summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarcus <marcus@df743ca5-7f9a-e211-a948-0013205c9059>2007-07-02 02:19:46 +0800
committermarcus <marcus@df743ca5-7f9a-e211-a948-0013205c9059>2007-07-02 02:19:46 +0800
commit17012652af2ae686c88359d73b1d12024f353507 (patch)
tree15a4672155ff4684bb6dde690f3791cc2f91bb2a
parent10e5f757de698f8016cb7b20e110e6062ec759a5 (diff)
downloadmarcuscom-ports-17012652af2ae686c88359d73b1d12024f353507.tar
marcuscom-ports-17012652af2ae686c88359d73b1d12024f353507.tar.gz
marcuscom-ports-17012652af2ae686c88359d73b1d12024f353507.tar.bz2
marcuscom-ports-17012652af2ae686c88359d73b1d12024f353507.tar.lz
marcuscom-ports-17012652af2ae686c88359d73b1d12024f353507.tar.xz
marcuscom-ports-17012652af2ae686c88359d73b1d12024f353507.tar.zst
marcuscom-ports-17012652af2ae686c88359d73b1d12024f353507.zip
Sync net80211 support from the FreeBSD ports tree.
git-svn-id: svn://creme-brulee.marcuscom.com/ports/trunk@9109 df743ca5-7f9a-e211-a948-0013205c9059
-rw-r--r--net/gnome-netstatus/Makefile4
-rw-r--r--net/gnome-netstatus/files/patch-src_netstatus-sysdeps.c128
2 files changed, 123 insertions, 9 deletions
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 <marcus@FreeBSD.org>
#
# $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 <sys/types.h>
++#include <sys/param.h>
+ #include <sys/socket.h>
+ #include <sys/ioctl.h>
++#include <ifaddrs.h>
+ #include <net/if.h>
++#include <net/if_media.h>
+ #include <net/if_var.h>
+ #include <dev/an/if_aironet_ieee.h>
+ #include <dev/wi/if_wavelan_ieee.h>
++#include <net80211/ieee80211.h>
++#include <net80211/ieee80211_ioctl.h>
++#include <stdlib.h>
++#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;
+ }