summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog14
-rw-r--r--features.def3
-rw-r--r--include/glibtop/Makefile.am2
-rw-r--r--include/glibtop/command.h9
-rw-r--r--include/glibtop/netinfo.h104
-rw-r--r--include/glibtop/netload.h51
-rw-r--r--include/glibtop/sysdeps.h12
-rw-r--r--include/glibtop/union.h4
-rw-r--r--src/daemon/main.c6
-rw-r--r--src/daemon/server.c1
-rw-r--r--src/daemon/slave.c6
-rw-r--r--sysdeps/linux/Makefile.am3
-rw-r--r--sysdeps/linux/glibtop_server.h1
-rw-r--r--sysdeps/linux/netinfo.c143
-rw-r--r--sysdeps/linux/netload.c75
-rw-r--r--sysdeps/names/Makefile.am4
-rw-r--r--sysdeps/names/netinfo.c53
-rw-r--r--sysdeps/names/netload.c17
18 files changed, 367 insertions, 141 deletions
diff --git a/ChangeLog b/ChangeLog
index 4317dd13..54cd8b72 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,19 @@
1999-11-28 Martin Baulig <martin@home-of-linux.org>
+ Split netload into netload and netinfo.
+
+ * include/glibtop/netinfo.h: New file.
+
+ * include/glibtop/netload.h (glibtop_netload): Moved `if_flags',
+ `mtu', `subnet' and `address' into the new `glibtop_netinfo'.
+
+ * include/glibtop/sysdeps.h (GLIBTOP_SYSDEPS_NETINFO): Added.
+ (glibtop_sysdeps): Added `netinfo.
+ * include/glibtop/union.h (glibtop_union): Added `netinfo.
+ * include/glibtop/command.h (GLIBTOP_CMND_NETINFO): Added.
+
+1999-11-28 Martin Baulig <martin@home-of-linux.org>
+
* include/glibtop/interfaces.h (glibtop_get_interface_names):
Added `instance' argument.
diff --git a/features.def b/features.def
index 8006c9bd..4e7727d5 100644
--- a/features.def
+++ b/features.def
@@ -18,6 +18,7 @@ char *|proc_args|ulong(size)|pid_t(pid):unsigned(max_len)
glibtop_map_entry *|proc_map|ulong(number,size,total)|pid_t(pid)
glibtop_mountentry *|@mountlist|ulong(number,size,total)|int(all_fs)
retval|@fsusage|ulong(blocks,bfree,bavail,files,ffree)|string(mount_dir)
-retval|netload|ulong(if_flags,mtu,subnet,address,packets_in,packets_out,packets_total,bytes_in,bytes_out,bytes_total,errors_in,errors_out,errors_total,collisions)|string(interface)
char *|interface_names|ulong(size)|unsigned(interface,number,instance,strategy)
+retval|netinfo|ulong(if_flags,mtu,subnet,address)|string(interface)
+retval|netload|ulong(packets_in,packets_out,packets_total,bytes_in,bytes_out,bytes_total,errors_in,errors_out,errors_total,collisions)|string(interface)
retval|ppp|ulong(state,bytes_in,bytes_out)|ushort(device)
diff --git a/include/glibtop/Makefile.am b/include/glibtop/Makefile.am
index 6d394f89..28a79174 100644
--- a/include/glibtop/Makefile.am
+++ b/include/glibtop/Makefile.am
@@ -8,4 +8,4 @@ glibtop_HEADERS = close.h loadavg.h prockernel.h procstate.h \
procsignal.h read_data.h union.h types.h gnuserv.h \
parameter.h mountlist.h fsusage.h procmap.h signal.h \
inodedb.h sysinfo.h ppp.h procargs.h netload.h \
- interfaces.h limits.h
+ netinfo.h interfaces.h limits.h
diff --git a/include/glibtop/command.h b/include/glibtop/command.h
index f4ad5e63..413bec45 100644
--- a/include/glibtop/command.h
+++ b/include/glibtop/command.h
@@ -57,11 +57,12 @@ BEGIN_LIBGTOP_DECLS
#define GLIBTOP_CMND_MOUNTLIST 20
#define GLIBTOP_CMND_FSUSAGE 21
-#define GLIBTOP_CMND_NETLOAD 22
-#define GLIBTOP_CMND_INTERFACE_NAMES 23
-#define GLIBTOP_CMND_PPP 24
+#define GLIBTOP_CMND_INTERFACE_NAMES 22
+#define GLIBTOP_CMND_NETINFO 23
+#define GLIBTOP_CMND_NETLOAD 24
+#define GLIBTOP_CMND_PPP 25
-#define GLIBTOP_MAX_CMND 25
+#define GLIBTOP_MAX_CMND 26
#define _GLIBTOP_PARAM_SIZE 16
diff --git a/include/glibtop/netinfo.h b/include/glibtop/netinfo.h
new file mode 100644
index 00000000..afc2c5ab
--- /dev/null
+++ b/include/glibtop/netinfo.h
@@ -0,0 +1,104 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef __GLIBTOP_NETINFO_H__
+#define __GLIBTOP_NETINFO_H__
+
+#include <glibtop.h>
+#include <glibtop/global.h>
+
+BEGIN_LIBGTOP_DECLS
+
+#define GLIBTOP_NETINFO_IF_FLAGS 0
+#define GLIBTOP_NETINFO_MTU 1
+#define GLIBTOP_NETINFO_SUBNET 2
+#define GLIBTOP_NETINFO_ADDRESS 3
+
+#define GLIBTOP_MAX_NETINFO 4
+
+typedef struct _glibtop_netinfo glibtop_netinfo;
+
+#include <glibtop/interfaces.h>
+
+enum {
+ GLIBTOP_IF_FLAGS_UP = 1,
+ GLIBTOP_IF_FLAGS_BROADCAST,
+ GLIBTOP_IF_FLAGS_DEBUG,
+ GLIBTOP_IF_FLAGS_LOOPBACK,
+ GLIBTOP_IF_FLAGS_POINTOPOINT,
+ GLIBTOP_IF_FLAGS_RUNNING,
+ GLIBTOP_IF_FLAGS_NOARP,
+ GLIBTOP_IF_FLAGS_PROMISC,
+ GLIBTOP_IF_FLAGS_ALLMULTI,
+ GLIBTOP_IF_FLAGS_OACTIVE,
+ GLIBTOP_IF_FLAGS_SIMPLEX,
+ GLIBTOP_IF_FLAGS_LINK0,
+ GLIBTOP_IF_FLAGS_LINK1,
+ GLIBTOP_IF_FLAGS_LINK2,
+ GLIBTOP_IF_FLAGS_ALTPHYS,
+ GLIBTOP_IF_FLAGS_MULTICAST
+};
+
+struct _glibtop_netinfo
+{
+ u_int64_t flags,
+ if_flags, /* GLIBTOP_NETINFO_IF_FLAGS */
+ mtu, /* GLIBTOP_NETINFO_MTU */
+ subnet, /* GLIBTOP_NETINFO_SUBNET */
+ address; /* GLIBTOP_NETINFO_ADDRESS */
+};
+
+#define glibtop_get_netinfo(netinfo,interface) glibtop_get_netinfo_l(glibtop_global_server, netinfo, interface)
+
+#if GLIBTOP_SUID_NETINFO
+#define glibtop_get_netinfo_r glibtop_get_netinfo_p
+#else
+#define glibtop_get_netinfo_r glibtop_get_netinfo_s
+#endif
+
+int glibtop_get_netinfo_l (glibtop *server, glibtop_netinfo *buf, const char *interface);
+
+#if GLIBTOP_SUID_NETINFO
+int glibtop_init_netinfo_p (glibtop *server);
+int glibtop_get_netinfo_p (glibtop *server, glibtop_netinfo *buf, const char *interface);
+#else
+int glibtop_init_netinfo_s (glibtop *server);
+int glibtop_get_netinfo_s (glibtop *server, glibtop_netinfo *buf, const char *interface);
+#endif
+
+#ifdef GLIBTOP_NAMES
+
+/* You need to link with -lgtop_names to get this stuff here. */
+
+extern const char *glibtop_names_netinfo [];
+extern const unsigned glibtop_types_netinfo [];
+extern const char *glibtop_labels_netinfo [];
+extern const char *glibtop_descriptions_netinfo [];
+
+#endif
+
+END_LIBGTOP_DECLS
+
+#endif
diff --git a/include/glibtop/netload.h b/include/glibtop/netload.h
index 8eb8dcc9..27ffa787 100644
--- a/include/glibtop/netload.h
+++ b/include/glibtop/netload.h
@@ -31,53 +31,26 @@
BEGIN_LIBGTOP_DECLS
-#define GLIBTOP_NETLOAD_IF_FLAGS 0
-#define GLIBTOP_NETLOAD_MTU 1
-#define GLIBTOP_NETLOAD_SUBNET 2
-#define GLIBTOP_NETLOAD_ADDRESS 3
-#define GLIBTOP_NETLOAD_PACKETS_IN 4
-#define GLIBTOP_NETLOAD_PACKETS_OUT 5
-#define GLIBTOP_NETLOAD_PACKETS_TOTAL 6
-#define GLIBTOP_NETLOAD_BYTES_IN 7
-#define GLIBTOP_NETLOAD_BYTES_OUT 8
-#define GLIBTOP_NETLOAD_BYTES_TOTAL 9
-#define GLIBTOP_NETLOAD_ERRORS_IN 10
-#define GLIBTOP_NETLOAD_ERRORS_OUT 11
-#define GLIBTOP_NETLOAD_ERRORS_TOTAL 12
-#define GLIBTOP_NETLOAD_COLLISIONS 13
-
-#define GLIBTOP_MAX_NETLOAD 14
+#define GLIBTOP_NETLOAD_PACKETS_IN 0
+#define GLIBTOP_NETLOAD_PACKETS_OUT 1
+#define GLIBTOP_NETLOAD_PACKETS_TOTAL 2
+#define GLIBTOP_NETLOAD_BYTES_IN 3
+#define GLIBTOP_NETLOAD_BYTES_OUT 4
+#define GLIBTOP_NETLOAD_BYTES_TOTAL 5
+#define GLIBTOP_NETLOAD_ERRORS_IN 6
+#define GLIBTOP_NETLOAD_ERRORS_OUT 7
+#define GLIBTOP_NETLOAD_ERRORS_TOTAL 8
+#define GLIBTOP_NETLOAD_COLLISIONS 9
+
+#define GLIBTOP_MAX_NETLOAD 10
typedef struct _glibtop_netload glibtop_netload;
#include <glibtop/interfaces.h>
-enum {
- GLIBTOP_IF_FLAGS_UP = 1,
- GLIBTOP_IF_FLAGS_BROADCAST,
- GLIBTOP_IF_FLAGS_DEBUG,
- GLIBTOP_IF_FLAGS_LOOPBACK,
- GLIBTOP_IF_FLAGS_POINTOPOINT,
- GLIBTOP_IF_FLAGS_RUNNING,
- GLIBTOP_IF_FLAGS_NOARP,
- GLIBTOP_IF_FLAGS_PROMISC,
- GLIBTOP_IF_FLAGS_ALLMULTI,
- GLIBTOP_IF_FLAGS_OACTIVE,
- GLIBTOP_IF_FLAGS_SIMPLEX,
- GLIBTOP_IF_FLAGS_LINK0,
- GLIBTOP_IF_FLAGS_LINK1,
- GLIBTOP_IF_FLAGS_LINK2,
- GLIBTOP_IF_FLAGS_ALTPHYS,
- GLIBTOP_IF_FLAGS_MULTICAST
-};
-
struct _glibtop_netload
{
u_int64_t flags,
- if_flags, /* GLIBTOP_NETLOAD_IF_FLAGS */
- mtu, /* GLIBTOP_NETLOAD_MTU */
- subnet, /* GLIBTOP_NETLOAD_SUBNET */
- address, /* GLIBTOP_NETLOAD_ADDRESS */
packets_in, /* GLIBTOP_NETLOAD_PACKETS_IN */
packets_out, /* GLIBTOP_NETLOAD_PACKETS_OUT */
packets_total, /* GLIBTOP_NETLOAD_PACKETS_TOTAL*/
diff --git a/include/glibtop/sysdeps.h b/include/glibtop/sysdeps.h
index b737fad9..7738d7c5 100644
--- a/include/glibtop/sysdeps.h
+++ b/include/glibtop/sysdeps.h
@@ -50,11 +50,12 @@ BEGIN_LIBGTOP_DECLS
#define GLIBTOP_SYSDEPS_PROC_MAP 17
#define GLIBTOP_SYSDEPS_MOUNTLIST 18
#define GLIBTOP_SYSDEPS_FSUSAGE 19
-#define GLIBTOP_SYSDEPS_NETLOAD 20
-#define GLIBTOP_SYSDEPS_INTERFACE_NAMES 21
-#define GLIBTOP_SYSDEPS_PPP 22
+#define GLIBTOP_SYSDEPS_INTERFACE_NAMES 20
+#define GLIBTOP_SYSDEPS_NETINFO 21
+#define GLIBTOP_SYSDEPS_NETLOAD 22
+#define GLIBTOP_SYSDEPS_PPP 23
-#define GLIBTOP_MAX_SYSDEPS 25
+#define GLIBTOP_MAX_SYSDEPS 26
#define GLIBTOP_SYSDEPS_ALL ((1 << GLIBTOP_MAX_SYSDEPS) - 1)
@@ -89,8 +90,9 @@ struct _glibtop_sysdeps
proc_map, /* glibtop_proc_map */
mountlist, /* glibtop_mountlist */
fsusage, /* glibtop_fsusage */
- netload, /* glibtop_netload */
interface_names, /* glibtop_interface_names */
+ netinfo, /* glibtop_netinfo */
+ netload, /* glibtop_netload */
ppp; /* glibtop_ppp */
};
diff --git a/include/glibtop/union.h b/include/glibtop/union.h
index 7446c2ff..e072b213 100644
--- a/include/glibtop/union.h
+++ b/include/glibtop/union.h
@@ -50,6 +50,7 @@
#include <glibtop/fsusage.h>
#include <glibtop/netload.h>
+#include <glibtop/netinfo.h>
#include <glibtop/interfaces.h>
#include <glibtop/ppp.h>
@@ -79,8 +80,9 @@ union _glibtop_union
glibtop_proc_map proc_map;
glibtop_mountlist mountlist;
glibtop_fsusage fsusage;
- glibtop_netload netload;
glibtop_interface_names interface_names;
+ glibtop_netinfo netinfo;
+ glibtop_netload netload;
glibtop_ppp ppp;
};
diff --git a/src/daemon/main.c b/src/daemon/main.c
index db16269c..7b1e8732 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -231,6 +231,12 @@ handle_parent_connection (int s)
(server, &resp->u.data.ppp, device);
do_output (s, resp, _offset_data (ppp), 0, NULL, retval);
break;
+ case GLIBTOP_CMND_NETINFO:
+ retval = glibtop_get_netinfo_l
+ (server, &resp->u.data.netinfo, parameter);
+ do_output (s, resp, _offset_data (netinfo),
+ 0, NULL, retval);
+ break;
case GLIBTOP_CMND_NETLOAD:
retval = glibtop_get_netload_l
(server, &resp->u.data.netload, parameter);
diff --git a/src/daemon/server.c b/src/daemon/server.c
index 43127042..0ca46669 100644
--- a/src/daemon/server.c
+++ b/src/daemon/server.c
@@ -51,6 +51,7 @@ GLIBTOP_SUID_PROC_KERNEL +
GLIBTOP_SUID_PROC_SEGMENT +
GLIBTOP_SUID_PROC_ARGS +
GLIBTOP_SUID_PROC_MAP +
+GLIBTOP_SUID_NETINFO +
GLIBTOP_SUID_NETLOAD +
GLIBTOP_SUID_INTERFACE_NAMES +
GLIBTOP_SUID_PPP;
diff --git a/src/daemon/slave.c b/src/daemon/slave.c
index 82bee6e9..05f69240 100644
--- a/src/daemon/slave.c
+++ b/src/daemon/slave.c
@@ -263,6 +263,12 @@ handle_slave_command (glibtop_command *cmnd, glibtop_response *resp,
resp->offset = _offset_data (proc_segment);
break;
#endif
+#if GLIBTOP_SUID_NETINFO
+ case GLIBTOP_CMND_NETINFO:
+ retval = glibtop_get_netinfo_p (server, &resp->u.data.netinfo, parameter);
+ resp->offset = _offset_data (netload);
+ break;
+#endif
#if GLIBTOP_SUID_NETLOAD
case GLIBTOP_CMND_NETLOAD:
retval = glibtop_get_netload_p (server, &resp->u.data.netload, parameter);
diff --git a/sysdeps/linux/Makefile.am b/sysdeps/linux/Makefile.am
index 69c32007..b0b455a3 100644
--- a/sysdeps/linux/Makefile.am
+++ b/sysdeps/linux/Makefile.am
@@ -9,7 +9,8 @@ libgtop_sysdeps_la_SOURCES = open.c close.c cpu.c mem.c swap.c \
sem_limits.c proclist.c procstate.c procuid.c \
proctime.c procmem.c procsignal.c prockernel.c \
procsegment.c procargs.c procmap.c siglist.c \
- sysinfo.c netload.c interfaces.c ppp.c
+ sysinfo.c interfaces.c netinfo.c netload.c \
+ ppp.c
libgtop_sysdeps_la_LIBADD = @GLIB_LIBS@
libgtop_sysdeps_la_LDFLAGS = $(LT_VERSION_INFO)
diff --git a/sysdeps/linux/glibtop_server.h b/sysdeps/linux/glibtop_server.h
index e4bd79a6..7892a8da 100644
--- a/sysdeps/linux/glibtop_server.h
+++ b/sysdeps/linux/glibtop_server.h
@@ -126,6 +126,7 @@ proc_stat_after_cmd (char *p)
#define GLIBTOP_SUID_PROC_SEGMENT 0
#define GLIBTOP_SUID_PROC_ARGS 0
#define GLIBTOP_SUID_PROC_MAP 0
+#define GLIBTOP_SUID_NETINFO 0
#define GLIBTOP_SUID_NETLOAD 0
#define GLIBTOP_SUID_INTERFACE_NAMES 0
#define GLIBTOP_SUID_PPP 0
diff --git a/sysdeps/linux/netinfo.c b/sysdeps/linux/netinfo.c
new file mode 100644
index 00000000..31ca9a42
--- /dev/null
+++ b/sysdeps/linux/netinfo.c
@@ -0,0 +1,143 @@
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, October 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <glibtop.h>
+#include <glibtop/error.h>
+#include <glibtop/netinfo.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+
+#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
+/* GNU LibC */
+#include <net/if.h>
+#include <netinet/ip_icmp.h>
+#include <netinet/in.h>
+#include <netinet/ip.h>
+#include <netinet/tcp.h>
+#include <netinet/udp.h>
+#include <net/if.h>
+#else /* Libc 5 */
+#include <linux/if.h>
+#include <linux/in.h>
+#include <linux/ip.h>
+#include <linux/icmp.h>
+#include <linux/tcp.h>
+#include <linux/udp.h>
+#endif
+
+static const unsigned long _glibtop_sysdeps_netinfo =
+(1L << GLIBTOP_NETINFO_ADDRESS) +
+(1L << GLIBTOP_NETINFO_SUBNET) +
+(1L << GLIBTOP_NETINFO_MTU);
+
+/* Init function. */
+
+int
+glibtop_init_netinfo_s (glibtop *server)
+{
+ server->sysdeps.netinfo = _glibtop_sysdeps_netinfo;
+
+ return 0;
+}
+
+/* Provides network statistics. */
+
+int
+glibtop_get_netinfo_s (glibtop *server, glibtop_netinfo *buf,
+ const char *interface)
+{
+ int skfd;
+
+ memset (buf, 0, sizeof (glibtop_netinfo));
+
+ skfd = socket (AF_INET, SOCK_DGRAM, 0);
+ if (skfd) {
+ struct ifreq ifr;
+ unsigned flags;
+
+ strcpy (ifr.ifr_name, interface);
+ if (!ioctl (skfd, SIOCGIFFLAGS, &ifr)) {
+ buf->flags |= (1L << GLIBTOP_NETINFO_IF_FLAGS);
+ flags = ifr.ifr_flags;
+ } else
+ flags = 0;
+
+ if (flags & IFF_UP)
+ buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_UP);
+
+ if (flags & IFF_BROADCAST)
+ buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_BROADCAST);
+
+ if (flags & IFF_DEBUG)
+ buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_DEBUG);
+
+ if (flags & IFF_LOOPBACK)
+ buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_LOOPBACK);
+
+ if (flags & IFF_POINTOPOINT)
+ buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_POINTOPOINT);
+
+ if (flags & IFF_RUNNING)
+ buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_RUNNING);
+
+ if (flags & IFF_NOARP)
+ buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_NOARP);
+
+ if (flags & IFF_PROMISC)
+ buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_PROMISC);
+
+ if (flags & IFF_ALLMULTI)
+ buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_ALLMULTI);
+
+ if (flags & IFF_MULTICAST)
+ buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_MULTICAST);
+
+ strcpy (ifr.ifr_name, interface);
+ if (!ioctl (skfd, SIOCGIFADDR, &ifr)) {
+ struct sockaddr_in addr =
+ *(struct sockaddr_in *) &ifr.ifr_addr;
+ buf->address = addr.sin_addr.s_addr;
+ buf->flags |= (1L << GLIBTOP_NETINFO_ADDRESS);
+ }
+
+ strcpy (ifr.ifr_name, interface);
+ if (!ioctl (skfd, SIOCGIFNETMASK, &ifr)) {
+ struct sockaddr_in addr =
+ *(struct sockaddr_in *) &ifr.ifr_addr;
+ buf->subnet = addr.sin_addr.s_addr;
+ buf->flags |= (1L << GLIBTOP_NETINFO_SUBNET);
+ }
+
+ strcpy (ifr.ifr_name, interface);
+ if (!ioctl (skfd, SIOCGIFMTU, &ifr)) {
+ buf->mtu = ifr.ifr_mtu;
+ buf->flags |= (1L << GLIBTOP_NETINFO_MTU);
+ }
+
+ close (skfd);
+ }
+
+ return 0;
+}
diff --git a/sysdeps/linux/netload.c b/sysdeps/linux/netload.c
index 29dd6f07..745f6f26 100644
--- a/sysdeps/linux/netload.c
+++ b/sysdeps/linux/netload.c
@@ -55,11 +55,6 @@ static const unsigned long _glibtop_sysdeps_netload =
(1L << GLIBTOP_NETLOAD_ERRORS_OUT) +
(1L << GLIBTOP_NETLOAD_COLLISIONS);
-static const unsigned long _glibtop_sysdeps_netload_data =
-(1L << GLIBTOP_NETLOAD_ADDRESS) +
-(1L << GLIBTOP_NETLOAD_SUBNET) +
-(1L << GLIBTOP_NETLOAD_MTU);
-
static const unsigned long _glibtop_sysdeps_netload_bytes =
(1L << GLIBTOP_NETLOAD_BYTES_IN) +
(1L << GLIBTOP_NETLOAD_BYTES_OUT) +
@@ -92,7 +87,6 @@ int
glibtop_init_netload_s (glibtop *server)
{
server->sysdeps.netload = _glibtop_sysdeps_netload |
- _glibtop_sysdeps_netload_data |
_glibtop_sysdeps_netload_bytes |
_glibtop_sysdeps_netload_packets;
@@ -106,78 +100,11 @@ glibtop_get_netload_s (glibtop *server, glibtop_netload *buf,
const char *interface)
{
char buffer [BUFSIZ], *p;
- int have_bytes, fields, skfd;
+ int have_bytes, fields;
FILE *f;
memset (buf, 0, sizeof (glibtop_netload));
- skfd = socket (AF_INET, SOCK_DGRAM, 0);
- if (skfd) {
- struct ifreq ifr;
- unsigned flags;
-
- strcpy (ifr.ifr_name, interface);
- if (!ioctl (skfd, SIOCGIFFLAGS, &ifr)) {
- buf->flags |= (1L << GLIBTOP_NETLOAD_IF_FLAGS);
- flags = ifr.ifr_flags;
- } else
- flags = 0;
-
- if (flags & IFF_UP)
- buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_UP);
-
- if (flags & IFF_BROADCAST)
- buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_BROADCAST);
-
- if (flags & IFF_DEBUG)
- buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_DEBUG);
-
- if (flags & IFF_LOOPBACK)
- buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_LOOPBACK);
-
- if (flags & IFF_POINTOPOINT)
- buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_POINTOPOINT);
-
- if (flags & IFF_RUNNING)
- buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_RUNNING);
-
- if (flags & IFF_NOARP)
- buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_NOARP);
-
- if (flags & IFF_PROMISC)
- buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_PROMISC);
-
- if (flags & IFF_ALLMULTI)
- buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_ALLMULTI);
-
- if (flags & IFF_MULTICAST)
- buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_MULTICAST);
-
- strcpy (ifr.ifr_name, interface);
- if (!ioctl (skfd, SIOCGIFADDR, &ifr)) {
- struct sockaddr_in addr =
- *(struct sockaddr_in *) &ifr.ifr_addr;
- buf->address = addr.sin_addr.s_addr;
- buf->flags |= (1L << GLIBTOP_NETLOAD_ADDRESS);
- }
-
- strcpy (ifr.ifr_name, interface);
- if (!ioctl (skfd, SIOCGIFNETMASK, &ifr)) {
- struct sockaddr_in addr =
- *(struct sockaddr_in *) &ifr.ifr_addr;
- buf->subnet = addr.sin_addr.s_addr;
- buf->flags |= (1L << GLIBTOP_NETLOAD_SUBNET);
- }
-
- strcpy (ifr.ifr_name, interface);
- if (!ioctl (skfd, SIOCGIFMTU, &ifr)) {
- buf->mtu = ifr.ifr_mtu;
- buf->flags |= (1L << GLIBTOP_NETLOAD_MTU);
- }
-
- close (skfd);
- }
-
/* Linux 2.1.114 - don't know where exactly this was added, but
* recent kernels have byte count in /proc/net/dev so we don't
* need IP accounting.
diff --git a/sysdeps/names/Makefile.am b/sysdeps/names/Makefile.am
index c260abc2..5ae4af62 100644
--- a/sysdeps/names/Makefile.am
+++ b/sysdeps/names/Makefile.am
@@ -9,8 +9,8 @@ libgtop_names_la_SOURCES = cpu.c mem.c swap.c uptime.c loadavg.c \
proclist.c sysdeps.c procstate.c procuid.c \
proctime.c procmem.c procsignal.c \
prockernel.c procsegment.c fsusage.c \
- mountlist.c procargs.c procmap.c netload.c \
- interfaces.c ppp.c
+ mountlist.c procargs.c procmap.c netinfo.c \
+ netload.c interfaces.c ppp.c
libgtop_names_la_LDFLAGS = $(LT_VERSION_INFO)
diff --git a/sysdeps/names/netinfo.c b/sysdeps/names/netinfo.c
new file mode 100644
index 00000000..63930c1d
--- /dev/null
+++ b/sysdeps/names/netinfo.c
@@ -0,0 +1,53 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+
+/* $Id$ */
+
+/* Copyright (C) 1998-99 Martin Baulig
+ This file is part of LibGTop 1.0.
+
+ Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
+
+ LibGTop is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ LibGTop is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LibGTop; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+ */
+
+#include <glibtop/netinfo.h>
+
+const char *glibtop_names_netinfo[GLIBTOP_MAX_NETINFO] =
+{
+ "if_flags", "mtu", "subnet", "address"
+};
+
+const unsigned glibtop_types_netinfo[GLIBTOP_MAX_NETINFO] =
+{
+ GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG,
+ GLIBTOP_TYPE_ULONG
+};
+
+const char *glibtop_labels_netinfo[GLIBTOP_MAX_NETINFO] =
+{
+ N_ ("Interface Flags"),
+ N_ ("MTU"),
+ N_ ("Subnet"),
+ N_ ("Address"),
+};
+
+const char *glibtop_descriptions_netinfo[GLIBTOP_MAX_NETINFO] =
+{
+ N_ ("Interface Flags"),
+ N_ ("Maximum Transfer Unit"),
+ N_ ("Subnet"),
+ N_ ("Address"),
+};
diff --git a/sysdeps/names/netload.c b/sysdeps/names/netload.c
index ee4043c2..5ca74f91 100644
--- a/sysdeps/names/netload.c
+++ b/sysdeps/names/netload.c
@@ -27,9 +27,9 @@
const char *glibtop_names_netload[GLIBTOP_MAX_NETLOAD] =
{
- "if_flags", "mtu", "subnet", "address", "packets_in",
- "packets_out", "packets_total", "bytes_in", "bytes_out",
- "bytes_total", "errors_in", "errors_out", "errors_total",
+ "packets_in", "packets_out", "packets_total",
+ "bytes_in", "bytes_out", "bytes_total",
+ "errors_in", "errors_out", "errors_total",
"collisions"
};
@@ -38,16 +38,11 @@ const unsigned glibtop_types_netload[GLIBTOP_MAX_NETLOAD] =
GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG,
GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG,
GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG,
- GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG,
- GLIBTOP_TYPE_ULONG, GLIBTOP_TYPE_ULONG
+ GLIBTOP_TYPE_ULONG
};
const char *glibtop_labels_netload[GLIBTOP_MAX_NETLOAD] =
{
- N_ ("Interface Flags"),
- N_ ("MTU"),
- N_ ("Subnet"),
- N_ ("Address"),
N_ ("Packets In"),
N_ ("Packets Out"),
N_ ("Packets Total"),
@@ -62,10 +57,6 @@ const char *glibtop_labels_netload[GLIBTOP_MAX_NETLOAD] =
const char *glibtop_descriptions_netload[GLIBTOP_MAX_NETLOAD] =
{
- N_ ("Interface Flags"),
- N_ ("Maximum Transfer Unit"),
- N_ ("Subnet"),
- N_ ("Address"),
N_ ("Packets In"),
N_ ("Packets Out"),
N_ ("Packets Total"),