aboutsummaryrefslogtreecommitdiff
path: root/net/wmwifi
diff options
context:
space:
mode:
authorRong-En Fan <rafan@FreeBSD.org>2008-03-14 16:08:26 +0000
committerRong-En Fan <rafan@FreeBSD.org>2008-03-14 16:08:26 +0000
commit92a5b0006436dfe19bcebf365df79ff61b05ea77 (patch)
tree3612b8be4f245941cf56e241555a5faf42b39c7a /net/wmwifi
parent4d57f0c92cfd3448658c7b5afc3c84552134fcc5 (diff)
downloadports-92a5b0006436dfe19bcebf365df79ff61b05ea77.tar.gz
ports-92a5b0006436dfe19bcebf365df79ff61b05ea77.zip
Notes
Diffstat (limited to 'net/wmwifi')
-rw-r--r--net/wmwifi/Makefile8
-rw-r--r--net/wmwifi/files/patch-wireless.c94
2 files changed, 89 insertions, 13 deletions
diff --git a/net/wmwifi/Makefile b/net/wmwifi/Makefile
index c990bcbb7009..b29891c30e80 100644
--- a/net/wmwifi/Makefile
+++ b/net/wmwifi/Makefile
@@ -23,10 +23,4 @@ CONFIGURE_ENV+= "CPPFLAGS=-I${X11BASE}/include"
PLIST_FILES= bin/wmwifi
-.include <bsd.port.pre.mk>
-
-.if ${OSVERSION} >= 700042
-BROKEN= Does not compile with GCC 4.2
-.endif
-
-.include <bsd.port.post.mk>
+.include <bsd.port.mk>
diff --git a/net/wmwifi/files/patch-wireless.c b/net/wmwifi/files/patch-wireless.c
index 468d2d9d5b2d..028b39ac31d1 100644
--- a/net/wmwifi/files/patch-wireless.c
+++ b/net/wmwifi/files/patch-wireless.c
@@ -1,6 +1,20 @@
---- src/wireless.c.orig Tue Mar 9 20:39:17 2004
-+++ src/wireless.c Sun Jun 11 00:46:29 2006
-@@ -143,6 +143,7 @@
+--- src/wireless.c.orig 2004-03-09 20:39:17.000000000 +0100
++++ src/wireless.c 2007-11-01 17:58:13.170763665 +0100
+@@ -25,7 +25,13 @@
+ #include <net/if_mib.h>
+ #include <net/if_var.h>
+ #include <netinet/in.h>
++#include <sys/param.h>
++#if __FreeBSD_version > 700045
++#include <net80211/ieee80211.h>
++#include <net80211/ieee80211_ioctl.h>
++#else
+ #include <dev/wi/if_wavelan_ieee.h>
++#endif
+ #else
+ #error "sorry, your OS is not supported yet"
+ #endif
+@@ -143,6 +149,7 @@
max = get_max_ifs();
step = 0;
@@ -8,7 +22,7 @@
if (old > max)
old = max; /* just be sure to not be out of bounds */
-@@ -178,8 +179,8 @@
+@@ -178,8 +185,8 @@
len = sizeof(ifmd);
sysctl(name, 6, &ifmd, &len, NULL, 0);
@@ -19,7 +33,7 @@
continue;
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
-@@ -193,9 +194,11 @@
+@@ -193,9 +200,11 @@
if (ioctl(s, SIOCGIFMEDIA, (caddr_t) &ifmr) < 0)
{
@@ -33,7 +47,7 @@
}
close(s);
/* we cannot monitor interfaces in hostap mode, so just
-@@ -207,6 +210,10 @@
+@@ -207,6 +216,10 @@
found++;
}
}
@@ -44,3 +58,71 @@
return index;
}
/* how many interfaces do we have? this includes non-wireless! */
+@@ -224,9 +237,18 @@
+ struct ifmibdata ifmd;
+
+ struct ifreq ifr; /* interface stats */
++#if __FreeBSD_version > 700045
++ uint8_t buf[24*1024];
++ struct ieee80211req ireq;
++ const struct ieee80211req_scan_result *sr;
++#else
+ struct wi_req wireq;
++#endif
+ int s;
+
++ wfi->link = 0;
++ wfi->max_qual = 128;
++
+ /* lets find the current interface name */
+ name[0] = CTL_NET;
+ name[1] = PF_LINK;
+@@ -247,13 +269,38 @@
+ perror("socket");
+ exit(1);
+ }
+- bzero(&ifr, sizeof(ifr));
+ /* struct ifreq interface name can only be 16 Bytes long as of now */
+ if (strlen(wfi->ifname) >= IFNAMSIZ)
+ {
+ fprintf(stderr, "ERROR: interface name too long\n");
+ exit(1);
+ }
++#if __FreeBSD_version > 700045
++ bzero(&ireq, sizeof(ireq));
++ strncpy(ireq.i_name, wfi->ifname, sizeof(ireq.i_name));
++
++ ireq.i_type = IEEE80211_IOC_SCAN_RESULTS;
++ ireq.i_data = buf;
++ ireq.i_len = sizeof(buf);
++ if (ioctl(s, SIOCG80211, &ireq) < 0) {
++ perror("ioctl");
++ exit(1);
++ }
++ close (s);
++
++ if (ireq.i_len < sizeof(struct ieee80211req_scan_result)) {
++ return 1;
++ }
++
++ sr = (const struct ieee80211req_scan_result *) buf;
++
++ /*
++ * sr->isr_rssi Signal Strength
++ * sr->isr_noise Noise
++ */
++ wfi->link = (int) sr->isr_rssi;
++#else
++ bzero(&ifr, sizeof(ifr));
+ strncpy(ifr.ifr_name, wfi->ifname, strlen(wfi->ifname));
+ wireq.wi_type = WI_RID_COMMS_QUALITY;
+ wireq.wi_len = WI_MAX_DATALEN;
+@@ -272,7 +319,7 @@
+ * wi_val[2] = noise
+ */
+ wfi->link = (int) wireq.wi_val[1];
+- wfi->max_qual = 128;
++#endif
+
+ return 1;
+ }