diff options
author | Rong-En Fan <rafan@FreeBSD.org> | 2008-03-14 16:08:26 +0000 |
---|---|---|
committer | Rong-En Fan <rafan@FreeBSD.org> | 2008-03-14 16:08:26 +0000 |
commit | 92a5b0006436dfe19bcebf365df79ff61b05ea77 (patch) | |
tree | 3612b8be4f245941cf56e241555a5faf42b39c7a /net | |
parent | 4d57f0c92cfd3448658c7b5afc3c84552134fcc5 (diff) | |
download | ports-92a5b0006436dfe19bcebf365df79ff61b05ea77.tar.gz ports-92a5b0006436dfe19bcebf365df79ff61b05ea77.zip |
Notes
Diffstat (limited to 'net')
-rw-r--r-- | net/wmwifi/Makefile | 8 | ||||
-rw-r--r-- | net/wmwifi/files/patch-wireless.c | 94 |
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; + } |