summaryrefslogtreecommitdiff
path: root/net/gnome-nettool/files/patch-src_info.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/gnome-nettool/files/patch-src_info.c')
-rw-r--r--net/gnome-nettool/files/patch-src_info.c197
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 *