From 17012652af2ae686c88359d73b1d12024f353507 Mon Sep 17 00:00:00 2001 From: marcus Date: Sun, 1 Jul 2007 18:19:46 +0000 Subject: Sync net80211 support from the FreeBSD ports tree. git-svn-id: svn://creme-brulee.marcuscom.com/ports/trunk@9109 df743ca5-7f9a-e211-a948-0013205c9059 --- net/gnome-netstatus/Makefile | 4 +- .../files/patch-src_netstatus-sysdeps.c | 128 +++++++++++++++++++-- 2 files changed, 123 insertions(+), 9 deletions(-) (limited to 'net') diff --git a/net/gnome-netstatus/Makefile b/net/gnome-netstatus/Makefile index 5f5d3363d..d980eadca 100644 --- a/net/gnome-netstatus/Makefile +++ b/net/gnome-netstatus/Makefile @@ -3,12 +3,12 @@ # Whom: Joe Marcus Clarke # # $FreeBSD$ -# $MCom: ports/net/gnome-netstatus/Makefile,v 1.45 2007/04/28 17:32:37 marcus Exp $ +# $MCom: ports/net/gnome-netstatus/Makefile,v 1.46 2007/05/19 21:36:16 marcus Exp $ # PORTNAME= gnome-netstatus PORTVERSION= 2.12.1 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= net gnome MASTER_SITES= ${MASTER_SITE_GNOME} MASTER_SITE_SUBDIR= sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/} diff --git a/net/gnome-netstatus/files/patch-src_netstatus-sysdeps.c b/net/gnome-netstatus/files/patch-src_netstatus-sysdeps.c index de7d713c7..200ed74f9 100644 --- a/net/gnome-netstatus/files/patch-src_netstatus-sysdeps.c +++ b/net/gnome-netstatus/files/patch-src_netstatus-sysdeps.c @@ -1,6 +1,28 @@ ---- src/netstatus-sysdeps.c.orig Tue Feb 13 04:39:19 2007 -+++ src/netstatus-sysdeps.c Tue Feb 13 17:16:29 2007 -@@ -430,11 +430,11 @@ static inline char * +--- src/netstatus-sysdeps.c.orig 2007-02-13 04:39:19.000000000 -0500 ++++ src/netstatus-sysdeps.c 2007-07-01 13:59:34.000000000 -0400 +@@ -37,12 +37,21 @@ + + #ifdef __FreeBSD__ + #include ++#include + #include + #include ++#include + #include ++#include + #include + #include + #include ++#include ++#include ++#include ++#ifndef IEEE80211_ADDR_COPY ++#define IEEE80211_ADDR_COPY(dst, src) memcpy(dst, src, IEEE80211_ADDR_LEN) ++#endif + #endif + + static inline gboolean +@@ -430,11 +439,11 @@ static inline char * get_an_data (const char *iface, int *signal_strength) { @@ -14,12 +36,12 @@ int level; char *error = NULL; gboolean rssimap_valid = FALSE; -@@ -486,11 +486,11 @@ get_wi_data (const char *iface, +@@ -486,11 +495,11 @@ get_wi_data (const char *iface, level = (int) wreq.wi_val[1]; #ifdef WI_RID_READ_APS - if (signal_strength <= 0) -+ if (*signal_strength <= 0) ++ if (level <= 0) { /* we fail to get signal strength by usual means, try another way */ static time_t last_scan; @@ -28,7 +50,7 @@ time_t now; now = time (NULL); -@@ -510,15 +510,15 @@ get_wi_data (const char *iface, +@@ -510,15 +519,15 @@ get_wi_data (const char *iface, if (nstations > 0) { w = (struct wi_apinfo *)(((char *) &wreq.wi_val) + sizeof (int)); @@ -47,7 +69,77 @@ } } #endif -@@ -548,6 +548,8 @@ netstatus_sysdeps_read_iface_wireless_de +@@ -528,6 +537,69 @@ get_wi_data (const char *iface, + return error; + } + ++static inline char * ++get_net80211_data (const char *iface, ++ int *signal_strength) ++{ ++ struct ieee80211req_sta_info *si; ++ struct ieee80211req ireq; ++ int level; ++ int s; ++ uint8_t mac[IEEE80211_ADDR_LEN]; ++ int8_t noise; ++ char *error = NULL; ++ union { ++ struct ieee80211req_sta_req info; ++ char buf[1024]; ++ } u_info; ++ ++ memset (&u_info, 0, sizeof (u_info)); ++ memset (&ireq, 0, sizeof (ireq)); ++ ++ strlcpy (ireq.i_name, iface, sizeof (ireq.i_name)); ++ ireq.i_type = IEEE80211_IOC_BSSID; ++ ireq.i_data = mac; ++ ireq.i_len = IEEE80211_ADDR_LEN; ++ ++ s = socket (AF_INET, SOCK_DGRAM, 0); ++ if (s == -1) ++ { ++ error = g_strdup_printf (_("Could not connect to interface, '%s'"), iface); ++ return error; ++ } ++ ++ if (ioctl (s, SIOCG80211, &ireq) == -1) ++ { ++ error = g_strdup_printf (_("Could not get MAC for interface, '%s'"), iface); ++ close (s); ++ return error; ++ } ++ ++ IEEE80211_ADDR_COPY (u_info.info.is_u.macaddr, mac); ++ ireq.i_type = IEEE80211_IOC_STA_INFO; ++ ireq.i_data = (caddr_t) &u_info; ++ ireq.i_len = sizeof (u_info); ++ ++ if (ioctl (s, SIOCG80211, &ireq) == -1) ++ { ++ error = g_strdup_printf (_("Could not send ioctl to interface, '%s'"), iface); ++ close (s); ++ return error; ++ } ++ ++ close (s); ++ ++ si = &u_info.info.info[0]; ++ noise = si->isi_noise; ++ if (noise == 0) ++ noise = -95; ++ level = (int) abs (rint ((si->isi_rssi / (si->isi_rssi/2. + noise)) * 100.0)); ++ level = CLAMP (level, 0, 100); ++ ++ memcpy (signal_strength, &level, sizeof (signal_strength)); ++ return error; ++} ++ + char * + netstatus_sysdeps_read_iface_wireless_details (const char *iface, + gboolean *is_wireless, +@@ -548,8 +620,12 @@ netstatus_sysdeps_read_iface_wireless_de g_strncasecmp (iface, "wi", 2) && g_strncasecmp (iface, "ath", 3) && g_strncasecmp (iface, "ndis", 4) && @@ -55,4 +147,26 @@ + g_strncasecmp (iface, "ral", 3) && g_strncasecmp (iface, "ipw", 3) && g_strncasecmp (iface, "iwi", 3) && ++ g_strncasecmp (iface, "rum", 3) && ++ g_strncasecmp (iface, "ray", 3) && g_strncasecmp (iface, "acx", 3)) + return error_message; + +@@ -558,11 +634,16 @@ netstatus_sysdeps_read_iface_wireless_de + error_message = get_an_data (iface, signal_strength); + *is_wireless = TRUE; + } +- else ++ else if (g_strncasecmp (iface, "wi", 2) == 0) + { + error_message = get_wi_data (iface, signal_strength); + *is_wireless = TRUE; + } ++ else ++ { ++ error_message = get_net80211_data (iface, signal_strength); ++ *is_wireless = TRUE; ++ } + + return error_message; + } -- cgit