Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Dec 2017 15:01:21 +0000 (UTC)
From:      Guido Falsi <madpilot@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-branches@freebsd.org
Subject:   svn commit: r456302 - in branches/2017Q4/sysutils/xfce4-wavelan-plugin: . files
Message-ID:  <201712141501.vBEF1LLE025560@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: madpilot
Date: Thu Dec 14 15:01:21 2017
New Revision: 456302
URL: https://svnweb.freebsd.org/changeset/ports/456302

Log:
  MFH: r455225
  
  - Import upstream patch to fix a memory leak [1]
  - While here rename and regenerate patches
  
  PR:		223937 [1]
  Submitted by:	J.R. Oldroyd <fbsd@opal.com>
  Obtained from:	https://git.xfce.org/panel-plugins/xfce4-wavelan-plugin/commit/?id=d4c76389d63199636c52e8a7a0ce80d5f2fde591
  
  Approved by:	ports-secteam (swills)

Added:
  branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c
     - copied unchanged from r455225, head/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c
  branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c
     - copied unchanged from r455225, head/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c
Deleted:
  branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin__wavelan.c
  branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin__wi_bsd.c
Modified:
  branches/2017Q4/sysutils/xfce4-wavelan-plugin/Makefile
Directory Properties:
  branches/2017Q4/   (props changed)

Modified: branches/2017Q4/sysutils/xfce4-wavelan-plugin/Makefile
==============================================================================
--- branches/2017Q4/sysutils/xfce4-wavelan-plugin/Makefile	Thu Dec 14 14:52:58 2017	(r456301)
+++ branches/2017Q4/sysutils/xfce4-wavelan-plugin/Makefile	Thu Dec 14 15:01:21 2017	(r456302)
@@ -3,6 +3,7 @@
 
 PORTNAME=	xfce4-wavelan-plugin
 PORTVERSION=	0.6.0
+PORTREVISION=	1
 CATEGORIES=	sysutils xfce
 MASTER_SITES=	XFCE/src/panel-plugins/${PORTNAME}/${PORTVERSION:R}
 DIST_SUBDIR=	xfce4

Copied: branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c (from r455225, head/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c	Thu Dec 14 15:01:21 2017	(r456302, copy of r455225, head/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wavelan.c)
@@ -0,0 +1,80 @@
+--- panel-plugin/wavelan.c.orig	2016-10-29 06:46:02 UTC
++++ panel-plugin/wavelan.c
+@@ -64,6 +64,9 @@ typedef struct
+   GtkWidget *image;
+   GtkWidget *signal;
+   GtkWidget *tooltip_text;
++#if GTK_CHECK_VERSION (3, 16, 0)
++  GtkCssProvider *css_provider;
++#endif
+ 
+   XfcePanelPlugin *plugin;
+   
+@@ -77,7 +80,6 @@ wavelan_set_state(t_wavelan *wavelan, gint state)
+ {  
+   GdkRGBA color;
+ #if GTK_CHECK_VERSION (3, 16, 0)
+-  GtkCssProvider *css_provider;
+   gchar *css;
+ #endif
+ 
+@@ -99,11 +101,11 @@ wavelan_set_state(t_wavelan *wavelan, gint state)
+ 
+    if (wavelan->signal_colors) {
+     /* set color */
+-     if (state > 70)
++     if (state > 75)
+       gdk_rgba_parse(&color, signal_color_strong);
+-     else if (state > 55)
++     else if (state > 50)
+       gdk_rgba_parse(&color, signal_color_good);
+-     else if (state > 40)
++     else if (state > 25)
+       gdk_rgba_parse(&color, signal_color_weak);
+      else
+       gdk_rgba_parse(&color, signal_color_bad);
+@@ -118,12 +120,7 @@ wavelan_set_state(t_wavelan *wavelan, gint state)
+ #endif
+                            gdk_rgba_to_string(&color));
+      /* Setup Gtk style */
+-     css_provider = gtk_css_provider_new ();
+-     gtk_css_provider_load_from_data (css_provider, css, strlen(css), NULL);
+-     gtk_style_context_add_provider (
+-         GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (wavelan->signal))),
+-         GTK_STYLE_PROVIDER (css_provider),
+-         GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
++     gtk_css_provider_load_from_data (wavelan->css_provider, css, strlen(css), NULL);
+      g_free(css);
+ #else
+      gtk_widget_override_background_color(GTK_WIDGET(wavelan->signal),
+@@ -183,7 +180,15 @@ wavelan_timer(gpointer data)
+       }
+     }
+     else {
+-      wavelan_set_state(wavelan, stats.ws_quality);
++      /*
++       * Usual formula is: qual = 4 * (signal - noise)
++       * where noise is typically about -96dBm, but we don't have
++       * the actual noise value here, so approximate one.
++       */
++      if (strcmp(stats.ws_qunit, "dBm") == 0)
++        wavelan_set_state(wavelan, 4 * (stats.ws_quality - (-96)));
++      else
++        wavelan_set_state(wavelan, stats.ws_quality);
+ 
+       if (strlen(stats.ws_netname) > 0)
+         /* Translators: net_name: quality quality_unit at rate Mb/s*/
+@@ -338,6 +343,13 @@ wavelan_new(XfcePanelPlugin *plugin)
+ 
+   /* setup progressbar */
+   wavelan->signal = gtk_progress_bar_new();
++#if GTK_CHECK_VERSION (3, 16, 0)
++  wavelan->css_provider = gtk_css_provider_new ();
++  gtk_style_context_add_provider (
++      GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (wavelan->signal))),
++      GTK_STYLE_PROVIDER (wavelan->css_provider),
++      GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
++#endif
+   wavelan->image = GTK_WIDGET(xfce_panel_image_new_from_source("network-wireless"));
+ 
+   gtk_box_pack_start(GTK_BOX(wavelan->box), GTK_WIDGET(wavelan->image), FALSE, FALSE, 0);

Copied: branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c (from r455225, head/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2017Q4/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c	Thu Dec 14 15:01:21 2017	(r456302, copy of r455225, head/sysutils/xfce4-wavelan-plugin/files/patch-panel-plugin_wi__bsd.c)
@@ -0,0 +1,251 @@
+--- panel-plugin/wi_bsd.c.orig	2016-05-01 15:53:40 UTC
++++ panel-plugin/wi_bsd.c
+@@ -3,6 +3,8 @@
+  *                    (OpenBSD support)
+  *               2008 Pietro Cerutti <gahr@gahr.ch>
+  *                    (FreeBSD > 700000 adaptation)
++ *               2014 J.R. Oldroyd <fbsd@opal.com> 
++ *                    (Enhance FreeBSD support)
+  *
+  * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions
+@@ -26,14 +28,9 @@
+  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  */
+ 
+-#if !defined(__FreeBSD_kernel__) && defined(__FreeBSD__)
+-#define __FreeBSD_kernel__ __FreeBSD__
+-#endif
+-#if !defined(__FreeBSD_kernel_version) && defined(__FreeBSD_version)
+-#define __FreeBSD_kernel_version __FreeBSD_version
+-#endif
++#include <sys/param.h>
+ 
+-#if defined(__NetBSD__) || defined(__FreeBSD_kernel__) || defined(__FreeBSD_kernel_kernel__) || defined(__OpenBSD__) 
++#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) 
+ 
+ #include <sys/types.h>
+ #include <sys/cdefs.h>
+@@ -44,20 +41,14 @@
+ 
+ #include <net/if.h>
+ #include <net/if_media.h>
+-#ifdef __FreeBSD_kernel__
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ #include <netinet/in.h>
+ #include <netinet/if_ether.h>
+ #include <sys/endian.h>
+-#if __FreeBSD_kernel_version >= 700000
+ #include <sys/types.h>
+ #include <sys/sysctl.h>
+ #include <net80211/ieee80211_ioctl.h>
+ #else
+-#include <net/if_var.h>
+-#include <net/ethernet.h>
+-#include <dev/wi/if_wavelan_ieee.h>
+-#endif
+-#else
+ #ifdef __NetBSD__
+ #include <net80211/ieee80211.h>
+ #include <net80211/ieee80211_ioctl.h>
+@@ -107,14 +98,10 @@ struct wi_device
+ };
+ 
+ static int _wi_carrier(const struct wi_device *);
+-#if defined(__FreeBSD_kernel__)
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ static int _wi_vendor(const struct wi_device *, char *, size_t);
+-#if __FreeBSD_kernel_version > 700000
+ static int _wi_getval(const struct wi_device *, struct ieee80211req_scan_result *);
+-#else
+-static int _wi_getval(const struct wi_device *, struct wi_req *);
+ #endif
+-#endif
+ static int _wi_netname(const struct wi_device *, char *, size_t);
+ static int _wi_quality(const struct wi_device *, int *);
+ static int _wi_rate(const struct wi_device *, int *);
+@@ -164,7 +151,7 @@ wi_query(struct wi_device *device, struct wi_stats *st
+   strlcpy(stats->ws_qunit, "dBm", 4);
+ #endif
+   /* check vendor (independent of carrier state) */
+-#if defined(__FreeBSD_kernel__)
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+   if ((result = _wi_vendor(device, stats->ws_vendor, WI_MAXSTRLEN)) != WI_OK)
+     return(result);
+ #endif
+@@ -305,12 +292,10 @@ _wi_rate(const struct wi_device *device, int *rate)
+ }
+ #endif
+ 
+-/* seems only FreeBSD supports this operation */
+-#if defined(__FreeBSD_kernel__)
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ static int
+ _wi_vendor(const struct wi_device *device, char *buffer, size_t len)
+ {
+-#if defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version >= 700000
+    /*
+     * We use sysctl to get a device description
+     */
+@@ -327,59 +312,30 @@ _wi_vendor(const struct wi_device *device, char *buffe
+    dev_number = (int)strtol(c, NULL, 10);
+    *c = '\0';
+ 
++   /*
++    * Also, wlan doesn't present dev.wlan.N.%desc, need to use
++    * underlying driver name, instead: dev.ath.0.%desc, so we
++    * need to get the parent's name.
++    */
++   if(strcmp(dev_name, "wlan") == 0) {
++      snprintf(mib, sizeof(mib), "net.%s.%d.%%parent", dev_name, dev_number);
++      if(sysctlbyname(mib, dev_name, &len, NULL, 0) == -1)
++         return (WI_NOSUCHDEV);
++
++      c = dev_name;
++      while(!isdigit(*c)) c++;
++      dev_number = (int)strtol(c, NULL, 10);
++      *c = '\0';
++      len = WI_MAXSTRLEN;
++   }
++
+    snprintf(mib, sizeof(mib), "dev.%s.%d.%%desc", dev_name, dev_number);
+    if(sysctlbyname(mib, buffer, &len, NULL, 0) == -1)
+       return (WI_NOSUCHDEV);
+-#else
+-#define WI_RID_STA_IDENTITY_LUCENT	0x1
+-#define WI_RID_STA_IDENTITY_PRISMII	0x2
+-#define WI_RID_STA_IDENTITY_SAMSUNG	0x3
+-#define WI_RID_STA_IDENTITY_DLINK	0x6
+-  const char* vendor = "Unknown";
+-  struct wi_req wr;
+-  int result;
+ 
+-  bzero((void*)&wr, sizeof(wr));
+-  wr.wi_len = WI_MAX_DATALEN;
+-  wr.wi_type = WI_RID_STA_IDENTITY;
+-
+-  if ((result = _wi_getval(device, &wr)) != WI_OK){
+-    /* For the Atheros, IDENTITY does not work. */
+-    if (strcmp(device->interface, "ath") != 0)
+-      return(result);
+-  }
+-  else if (wr.wi_len < 4)
+-    return(WI_NOSUCHDEV);
+-
+-  switch (wr.wi_val[1]) {
+-  case WI_RID_STA_IDENTITY_LUCENT:
+-    vendor = "Lucent";
+-    break;
+-
+-  case WI_RID_STA_IDENTITY_PRISMII:
+-    vendor = "generic PRISM II";
+-    break;
+-
+-  case WI_RID_STA_IDENTITY_SAMSUNG:
+-		vendor = "Samsung";
+-		break;
+-	case WI_RID_STA_IDENTITY_DLINK:
+-		vendor = "D-Link";
+-		break;
+-  }
+-
+-  snprintf(buffer, len, "%s (ID %d, version %d.%d)", vendor,
+-      wr.wi_val[0], wr.wi_val[2], wr.wi_val[3]);
+-#endif
+-
+   return(WI_OK);
+ }
+-#endif /* wi_vendor */
+ 
+-/* NetBSD and FreeBSD 6.x uses old wi_* API */
+-#if defined(__NetBSD__) || defined(__FreeBSD_kernel__)
+-/* FreeBSD 7.x use its own new iee80211 API */
+-#if defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version >= 700000
+ static int
+ _wi_getval(const struct wi_device *device, struct ieee80211req_scan_result *scan)
+ {
+@@ -404,7 +360,9 @@ _wi_getval(const struct wi_device *device, struct ieee
+ 
+    return(WI_OK);
+ }
+-#else
++#endif
++
++#if defined(__NetBSD__)
+ static int
+ _wi_getval(const struct wi_device *device, struct wi_req *wr)
+ {
+@@ -420,10 +378,11 @@ _wi_getval(const struct wi_device *device, struct wi_r
+   return(WI_OK);
+ }
+ #endif
++
+ static int
+ _wi_netname(const struct wi_device *device, char *buffer, size_t len)
+ {
+-#if defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version >= 700000
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+    struct ieee80211req ireq;
+ 
+    memset(&ireq, 0, sizeof(ireq));
+@@ -434,7 +393,7 @@ _wi_netname(const struct wi_device *device, char *buff
+    ireq.i_len = len; 
+    if (ioctl(device->socket, SIOCG80211, &ireq) < 0) 
+       return WI_NOSUCHDEV;
+-#else
++#elif defined(__NetBSD__)
+   struct wi_req wr;
+   int result;
+ 
+@@ -454,7 +413,7 @@ _wi_netname(const struct wi_device *device, char *buff
+ static int
+ _wi_quality(const struct wi_device *device, int *quality)
+ {
+-#if defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version >= 700000
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+    struct ieee80211req_scan_result req;
+    int result;
+    bzero(&req, sizeof(req));
+@@ -462,8 +421,16 @@ _wi_quality(const struct wi_device *device, int *quali
+    if((result = _wi_getval(device, &req)) != WI_OK)
+       return (result);
+ 
+-   *quality = req.isr_rssi;
+-#else
++   /*
++    * FreeBSD's wlan stats:
++    *	signal (in dBm) = rssi * 2 + noise;
++    *	quality_bars    = 4 * (signal - noise);
++    * or
++    *	quality_bars    = rssi * 8;
++    * but, per wi_query(), above, we need to return strength in dBm, so... 
++    */
++   *quality = req.isr_rssi * 2 + req.isr_noise;
++#elif defined(__NetBSD__)
+   struct wi_req wr;
+   int result;
+ 
+@@ -486,7 +453,7 @@ _wi_quality(const struct wi_device *device, int *quali
+ static int
+ _wi_rate(const struct wi_device *device, int *rate)
+ {
+-#if defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version >= 700000
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+    struct ieee80211req_scan_result req;
+    int result, i, high;
+    bzero(&req, sizeof(req));
+@@ -499,7 +466,7 @@ _wi_rate(const struct wi_device *device, int *rate)
+          high = req.isr_rates[i] & IEEE80211_RATE_VAL;
+    
+    *rate = high / 2;
+-#else
++#elif defined(__NetBSD__)
+   struct wi_req wr;
+   int result;
+ 
+@@ -516,5 +483,4 @@ _wi_rate(const struct wi_device *device, int *rate)
+   return(WI_OK);
+ }
+ 
+-#endif  /* defined(__NetBSD__) || defined(__FreeBSD_kernel__) */
+ #endif



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201712141501.vBEF1LLE025560>