pkgsrc-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Review of patch for net/gnome-netstatus
Hi,
I had some problems building net/gnome-netstatus on FreeBSD7 - and I checked
ports/ if there is a patch available. There was, and it does a lot more than
simply adding missing type definitions or similar.
I can't say how far this patch would affect NetBSD or DragonFlyBSD - could
someone have a look whether it works and can be committed or shall I keep it
local?
Thanks,
Jens
Index: distinfo
===================================================================
RCS file: /cvsroot/pkgsrc/net/gnome-netstatus/distinfo,v
retrieving revision 1.12
diff -u -r1.12 distinfo
--- distinfo 12 Mar 2009 15:19:38 -0000 1.12
+++ distinfo 21 Sep 2009 17:31:56 -0000
@@ -4,3 +4,4 @@
RMD160 (gnome-netstatus-2.26.0.tar.bz2) =
5cf01deb990c503d9691e514cc7bd3ca5d4b00f9
Size (gnome-netstatus-2.26.0.tar.bz2) = 552061 bytes
SHA1 (patch-aa) = cab8588a081191ee59c9f16f6481aa330331e38d
+SHA1 (patch-ab) = a385d5bf7c8e0e9fb06c154d8708905c7ca9ffad
Index: patches/patch-ab
===================================================================
RCS file: patches/patch-ab
diff -N patches/patch-ab
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-ab 21 Sep 2009 17:31:56 -0000
@@ -0,0 +1,214 @@
+$NetBSD$
+
+--- src/netstatus-sysdeps.c.orig 2009-03-08 00:25:52.000000000 -0500
++++ src/netstatus-sysdeps.c 2009-03-08 15:24:33.000000000 -0400
+@@ -37,13 +37,26 @@
+
+ #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>
++#if __FreeBSD_version < 700046
+ #include <dev/an/if_aironet_ieee.h>
+ #include <dev/wi/if_wavelan_ieee.h>
+ #endif
++#if __FreeBSD_version >= 602000
++#include <net80211/ieee80211.h>
++#include <net80211/ieee80211_ioctl.h>
++#endif
++#include <stdlib.h>
++#ifndef IEEE80211_ADDR_COPY
++#define IEEE80211_ADDR_COPY(dst, src) memcpy(dst, src, IEEE80211_ADDR_LEN)
++#endif
++#endif
+
+ static inline gboolean
+ parse_stats (char *buf,
+@@ -426,15 +439,16 @@ wireless_getval (const char *iface,
+ return TRUE;
+ }
+
++#if __FreeBSD_version < 700046
+ static inline char *
+ get_an_data (const char *iface,
+ int *signal_strength)
+ {
++ struct an_ltv_status *sts;
++ struct an_req areq;
+ #ifdef AN_RID_RSSI_MAP
+ struct an_ltv_rssi_map an_rssimap;
+ #endif
+- struct an_req areq;
+- struct an_ltv_status *sts;
+ int level;
+ char *error = NULL;
+ gboolean rssimap_valid = FALSE;
+@@ -486,11 +500,11 @@ get_wi_data (const char *iface,
+ level = (int) wreq.wi_val[1];
+
+ #ifdef WI_RID_READ_APS
+- if (signal_strength <= 0)
++ if (level <= 0)
+ {
+ /* we fail to get signal strength by usual means, try another way */
+ static time_t last_scan;
+- static long int cached;
++ static int cached;
+ time_t now;
+
+ now = time (NULL);
+@@ -510,15 +524,15 @@ get_wi_data (const char *iface,
+ if (nstations > 0)
+ {
+ w = (struct wi_apinfo *)(((char *) &wreq.wi_val) + sizeof
(int));
+- signal_strength = (long int) w->signal;
++ level = w->signal;
+ }
+
+- cached = signal_strength;
++ cached = level;
+ last_scan = now;
+ }
+ else
+ {
+- signal_strength = cached;
++ level = cached;
+ }
+ }
+ #endif
+@@ -527,6 +541,77 @@ get_wi_data (const char *iface,
+
+ return error;
+ }
++#endif
++
++#if __FreeBSD_version >= 602000
++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 (si->isi_rssi == 0)
++ level = 0;
++ else
++ {
++ 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;
++}
++#endif
+
+ char *
+ netstatus_sysdeps_read_iface_wireless_details (const char *iface,
+@@ -544,25 +629,52 @@ netstatus_sysdeps_read_iface_wireless_de
+ if (signal_strength)
+ *signal_strength = 0;
+
++#if __FreeBSD_version < 800036
+ if (g_ascii_strncasecmp (iface, "an", 2) &&
+ g_ascii_strncasecmp (iface, "wi", 2) &&
+ g_ascii_strncasecmp (iface, "ath", 3) &&
+ g_ascii_strncasecmp (iface, "ndis", 4) &&
++ g_ascii_strncasecmp (iface, "ural", 4) &&
++ g_ascii_strncasecmp (iface, "ral", 3) &&
+ g_ascii_strncasecmp (iface, "ipw", 3) &&
+ g_ascii_strncasecmp (iface, "iwi", 3) &&
++ g_ascii_strncasecmp (iface, "rum", 3) &&
++ g_ascii_strncasecmp (iface, "ray", 3) &&
+ g_ascii_strncasecmp (iface, "acx", 3))
++#else
++ if (g_strncasecmp (iface, "wlan", 4))
++#endif
+ return error_message;
+
++#if __FreeBSD_version < 700046
+ if (g_ascii_strncasecmp (iface, "an", 2) == 0)
+ {
+ error_message = get_an_data (iface, signal_strength);
+ *is_wireless = TRUE;
+ }
++#endif
++#if __FreeBSD_version >= 602000
++#if __FreeBSD_version < 700046
++ else if (g_strncasecmp (iface, "wi", 2) == 0)
++ {
++ error_message = get_wi_data (iface, signal_strength);
++ *is_wireless = TRUE;
++ }
++ else
++#endif
++ {
++ error_message = get_net80211_data (iface, signal_strength);
++ *is_wireless = TRUE;
++ }
++#else
++#if __FreeBSD_version < 700046
+ else
+ {
+ error_message = get_wi_data (iface, signal_strength);
+ *is_wireless = TRUE;
+ }
++#endif
++#endif
+
+ return error_message;
+ }
Home |
Main Index |
Thread Index |
Old Index