diff options
author | Joe Marcus Clarke <marcus@FreeBSD.org> | 2009-04-10 05:56:28 +0000 |
---|---|---|
committer | Joe Marcus Clarke <marcus@FreeBSD.org> | 2009-04-10 05:56:28 +0000 |
commit | ae52bc80895a23ddbe33b86e75a9cf331ae32ba9 (patch) | |
tree | 5538a7d3541f6d56e4bbab9c6329f5b9db64dafb /net/gnome-nettool/files/patch-src_info.c | |
parent | - Update to 0.6.3 (diff) |
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.
Diffstat (limited to 'net/gnome-nettool/files/patch-src_info.c')
-rw-r--r-- | net/gnome-nettool/files/patch-src_info.c | 197 |
1 files changed, 7 insertions, 190 deletions
diff --git a/net/gnome-nettool/files/patch-src_info.c b/net/gnome-nettool/files/patch-src_info.c index 74eb698a4665..88a107e6f825 100644 --- a/net/gnome-nettool/files/patch-src_info.c +++ b/net/gnome-nettool/files/patch-src_info.c @@ -1,5 +1,5 @@ ---- src/info.c.orig Fri Dec 1 10:36:15 2006 -+++ src/info.c Mon Dec 18 17:32:19 2006 +--- 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> @@ -11,19 +11,17 @@ #ifdef HAVE_CONFIG_H # include <config.h> -@@ -38,6 +42,11 @@ +@@ -37,6 +41,9 @@ #include <sys/ioctl.h> #include <stdlib.h> #include <net/if.h> +#ifdef __FreeBSD__ -+#include <sys/sysctl.h> -+#include <net/if_dl.h> +#include <net/if_media.h> +#endif - #include "info.h" - #include "utils.h" -@@ -58,6 +67,7 @@ static InfoInterfaceDescription info_ifa + #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 }, @@ -31,7 +29,7 @@ { 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 }, -@@ -128,9 +138,42 @@ info_get_interface_from_dev_name (const +@@ -131,9 +139,42 @@ info_get_interface_from_dev_name (const { gint i; gchar *path; @@ -76,184 +74,3 @@ (*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); -@@ -218,38 +261,87 @@ info_nic_update_stats (gpointer data) - gchar tx[10], tx_error[10], tx_drop[10], tx_ovr[10]; - */ - gchar iface[30]; /*, flags[30]; */ -- gchar rx_bytes[16], rx_pkt[10], rx_error[10], rx_drop[10], rx_fifo[10]; -- gchar frame[10], compressed[10], multicast[10]; -- gchar tx_bytes[16], tx_pkt[10], tx_error[10], tx_drop[10], tx_fifo[10]; -+ gchar rx_bytes[16], rx_pkt[10], rx_error[10]; -+ gchar tx_bytes[16], tx_pkt[10], tx_error[10]; - gchar collissions[10]; -+#if defined(__linux__) -+ gchar rx_drop[10], rx_fifo[10]; -+ gchar frame[10], compressed[10], multicast[10]; -+ gchar tx_drop[10], tx_fifo[10]; -+#elif defined(__FreeBSD__) -+ char *p; -+ gchar **tokens, **argv; -+ int i; -+ int pipe_out; -+#endif - - GIOChannel *io = NULL; - gchar *line; - gboolean title = TRUE; - const gchar *text; - gchar *text_tx_bytes, *text_rx_bytes; -- -+ - g_return_val_if_fail (info != NULL, FALSE); - - model = gtk_combo_box_get_model (GTK_COMBO_BOX (info->combo)); - text = info_get_nic (info); - if (!text) - return FALSE; -- -+ - #if defined(__linux__) - io = g_io_channel_new_file ("/proc/net/dev", "r", NULL); -- -+#elif defined(__FreeBSD__) -+ if (!g_shell_parse_argv ("/usr/bin/netstat -in -b -f link", NULL, &argv, NULL)) { -+ return FALSE; -+ } -+ if (!g_spawn_async_with_pipes (NULL, argv, NULL, 0, NULL, NULL, NULL, NULL, &pipe_out, NULL, NULL)) { -+ g_strfreev (argv); -+ return FALSE; -+ } -+ -+ g_strfreev (argv); -+ -+ io = g_io_channel_unix_new (pipe_out); -+#endif /* defined(__linux__) */ -+ - while (g_io_channel_read_line (io, &line, NULL, NULL, NULL) == G_IO_STATUS_NORMAL) { - if (title) { - title = FALSE; - g_free (line); - continue; - } -+#if defined(__linux__) - line = g_strdelimit (line, ":", ' '); - sscanf (line, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", iface, - rx_bytes, rx_pkt, rx_error, rx_drop, rx_fifo, frame, - compressed, multicast, - tx_bytes, tx_pkt, tx_error, tx_drop, tx_fifo, collissions); -+#elif defined(__FreeBSD__) -+ tokens = (gchar **) g_malloc0 (sizeof (gchar *) * 12); -+ p = strtok (line, " \t\n"); -+ /* We only care about 11 fields for now */ -+ for (i = 0; i < 11 && p; i++, p = strtok (NULL, " \t\n")) { -+ tokens[i] = g_strdup (p); -+ } -+ -+ if (i == 0 || i < 10) { -+ g_free (line); -+ g_strfreev (tokens); -+ continue; -+ } -+ -+ g_strlcpy (iface, tokens[0], sizeof (iface)); -+ -+ g_strlcpy (collissions, tokens[--i], sizeof (collissions)); -+ g_strlcpy (tx_bytes, tokens[--i], sizeof (tx_bytes)); -+ g_strlcpy (tx_error, tokens[--i], sizeof (tx_error)); -+ g_strlcpy (tx_pkt, tokens[--i], sizeof (tx_pkt)); -+ g_strlcpy (rx_bytes, tokens[--i], sizeof (rx_bytes)); -+ g_strlcpy (rx_error, tokens[--i], sizeof (rx_error)); -+ g_strlcpy (rx_pkt, tokens[--i], sizeof (rx_pkt)); -+ -+ g_strfreev (tokens); -+#endif /* defined(__linux__) */ - - if (g_ascii_strcasecmp (iface, text) == 0) { - /* -@@ -277,7 +369,9 @@ info_nic_update_stats (gpointer data) - } - - g_io_channel_unref (io); --#endif /* defined(__linux__) */ -+#if defined(__FreeBSD__) -+ close (pipe_out); -+#endif /* defined(__FreeBSD__) */ - - return TRUE; - } -@@ -425,8 +519,19 @@ info_get_nic_information (const gchar *n - #ifdef __linux__ - mii_data_result data; - #endif -+#ifdef __FreeBSD__ -+ gint hwmib[6]; -+ size_t hwlen; -+ gchar *hwbuf; -+ guchar *hwptr; -+ struct if_msghdr *hwifm; -+ struct sockaddr_dl *hwsinptr; -+#endif - -- getifaddrs (&ifa0); -+ if (getifaddrs (&ifa0) != 0) { -+ g_warning ("getifaddrs failed: %s", g_strerror (errno)); -+ goto fail; -+ } - - for (ifr6 = ifa0; ifr6; ifr6 = ifr6->ifa_next) { - if (strcmp (ifr6->ifa_name, nic) != 0) { -@@ -510,6 +615,45 @@ info_get_nic_information (const gchar *n - (int) ((guchar *) &ifrcopy.ifr_hwaddr.sa_data)[3], - (int) ((guchar *) &ifrcopy.ifr_hwaddr.sa_data)[4], - (int) ((guchar *) &ifrcopy.ifr_hwaddr.sa_data)[5]); -+#elif defined(__FreeBSD__) -+ hwmib[0] = CTL_NET; -+ hwmib[1] = AF_ROUTE; -+ hwmib[2] = 0; -+ hwmib[3] = AF_LINK; -+ hwmib[4] = NET_RT_IFLIST; -+ if ((hwmib[5] = if_nametoindex (nic)) == 0) { -+ g_sprintf (dst, NOT_AVAILABLE); -+ goto hwfail; -+ } -+ if (sysctl (hwmib, 6, NULL, &hwlen, NULL, 0) < 0) { -+ g_sprintf (dst, NOT_AVAILABLE); -+ goto hwfail; -+ } -+ if ((hwbuf = g_malloc (hwlen)) == NULL) { -+ g_sprintf (dst, NOT_AVAILABLE); -+ goto hwfail; -+ } -+ if (sysctl (hwmib, 6, hwbuf, &hwlen, NULL, 0) < 0) { -+ g_sprintf (dst, NOT_AVAILABLE); -+ goto hwfail; -+ } -+ -+ hwifm = (struct if_msghdr *) hwbuf; -+ hwsinptr = (struct sockaddr_dl *) (hwifm + 1); -+ hwptr = (guchar *) LLADDR (hwsinptr); -+ if (*hwptr != 0 || *(hwptr + 1) != 0 || -+ *(hwptr + 2) != 0 || *(hwptr + 3) != 0 || -+ *(hwptr + 4) != 0 || *(hwptr + 5) != 0) { -+ g_sprintf (dst, "%02x:%02x:%02x:%02x:%02x:%02x", -+ *hwptr, *(hwptr + 1), *(hwptr + 2), -+ *(hwptr + 3), *(hwptr + 4), *(hwptr + 5)); -+ } -+ else { -+ g_sprintf (dst, NOT_AVAILABLE); -+ } -+ g_free (hwbuf); -+ -+hwfail: - #else - g_sprintf (dst, NOT_AVAILABLE); - #endif /* SIOCGIFHWADDR */ -@@ -625,6 +769,8 @@ info_get_nic_information (const gchar *n - } - - freeifaddrs (ifa0); -+fail: -+ ; - } - - static gint * |