freebsd-ports/net/gnome-nettool/files/patch-src_info.c
Joe Marcus Clarke ae52bc8089 Presenting GNOME 2.26 for FreeBSD. See
http://library.gnome.org/misc/release-notes/2.26/ for a list of what's new.
On the FreeBSD front, we introduced a port of libxul 1.9 as an alternative
for Firefox 2.0 as a Gecko provider.  Almost all of the Gecko consumers
can make use of this provider by setting:

WITH_GECKO=libxul

The GNOME 2.26 port was done by ahze, kwm, marcus, and mezz with
contributions by Joseph S. Atkinson, Peter Wemm, Eric L. Chen,
Martin Matuska, Craig Butler, and Pawel Worach.
2009-04-10 05:56:28 +00:00

76 lines
2.4 KiB
C

--- src/info.c.orig 2008-12-08 23:29:39.000000000 -0500
+++ src/info.c 2009-02-27 16:33:49.000000000 -0500
@@ -20,6 +20,10 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <glib/gprintf.h>
+#include <sys/types.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
#ifdef HAVE_CONFIG_H
# include <config.h>
@@ -37,6 +41,9 @@
#include <sys/ioctl.h>
#include <stdlib.h>
#include <net/if.h>
+#ifdef __FreeBSD__
+#include <net/if_media.h>
+#endif
#include <glibtop.h>
#include <glibtop/netlist.h>
@@ -61,6 +68,7 @@ static InfoInterfaceDescription info_ifa
{ N_("Ethernet Interface"), INFO_INTERFACE_ETH, "16_ethernet.xpm", "eth", NULL },
{ N_("Wireless Interface"), INFO_INTERFACE_WLAN, "wavelan-16.png", "wlan", NULL },
{ N_("Modem Interface"), INFO_INTERFACE_PPP, "16_ppp.xpm", "ppp", NULL },
+ { N_("Modem Interface"), INFO_INTERFACE_PPP, "16_ppp.xpm", "tun", NULL },
{ N_("Parallel Line Interface"), INFO_INTERFACE_PLIP, "16_plip.xpm", "plip", NULL },
{ N_("Infrared Interface"), INFO_INTERFACE_IRLAN, "irda-16.png", "irlan", NULL },
{ N_("Loopback Interface"), INFO_INTERFACE_LO, "16_loopback.xpm", "lo", NULL },
@@ -131,9 +139,42 @@ info_get_interface_from_dev_name (const
{
gint i;
gchar *path;
-
+ gchar *dev_type = NULL;
+#if defined(__FreeBSD__)
+ int s;
+ struct ifmediareq ifmr;
+
+ if ((s = socket (AF_INET, SOCK_DGRAM, 0)) > -1) {
+
+ (void) memset (&ifmr, 0, sizeof (ifmr));
+ (void) strncpy (ifmr.ifm_name, dev_name, sizeof (ifmr.ifm_name));
+
+ if (ioctl (s, SIOCGIFMEDIA, (caddr_t) &ifmr) > -1) {
+ switch (IFM_TYPE (ifmr.ifm_active)) {
+ case IFM_ETHER:
+ dev_type = "eth";
+ break;
+ case IFM_FDDI:
+ case IFM_TOKEN:
+#ifdef IFM_ATM
+ case IFM_ATM:
+#endif
+ dev_type = "other_type";
+ break;
+ case IFM_IEEE80211:
+ dev_type = "wlan";
+ break;
+ }
+ }
+ close (s);
+ }
+#endif /* defined(__FreeBSD__) */
+
+ if (!dev_type)
+ dev_type = (gchar *) dev_name;
+
for (i = 0; info_iface_desc[i].name; i++)
- if (strstr (dev_name, info_iface_desc[i].prefix) == dev_name) {
+ if (strstr (dev_type, info_iface_desc[i].prefix) == dev_type) {
(*iface) = g_strdup_printf ("%s (%s)", _(info_iface_desc[i].name), dev_name);
if (info_iface_desc[i].pixbuf == NULL) {
path = g_build_filename (PIXMAPS_DIR, info_iface_desc[i].icon, NULL);