summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorharti <harti@FreeBSD.org>2006-01-04 12:57:09 +0000
committerharti <harti@FreeBSD.org>2006-01-04 12:57:09 +0000
commit9cca28b4d7b7042fa7f1bb73238dcc863592e044 (patch)
tree9883bdb48e4fc6a6de0d55496500f2dcaf3bc18c /tools
parente426666183b577af4f703c82c374703a3b0ce946 (diff)
downloadFreeBSD-src-9cca28b4d7b7042fa7f1bb73238dcc863592e044.zip
FreeBSD-src-9cca28b4d7b7042fa7f1bb73238dcc863592e044.tar.gz
Add a new leaf to the net.link.generic.ifdata.%d sysctl to retrieve
the name and unit number assigned by the driver. This is needed by SNMP to find interfaces after they have been renamed. MFC after: 4 weeks
Diffstat (limited to 'tools')
-rw-r--r--tools/tools/ifinfo/ifinfo.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/tools/tools/ifinfo/ifinfo.c b/tools/tools/ifinfo/ifinfo.c
index 54ca164..22053c5 100644
--- a/tools/tools/ifinfo/ifinfo.c
+++ b/tools/tools/ifinfo/ifinfo.c
@@ -47,7 +47,7 @@
#include "ifinfo.h"
-static void printit(const struct ifmibdata *);
+static void printit(const struct ifmibdata *, const char *);
static const char *iftype(int);
static const char *ifphys(int, int);
static int isit(int, char **, const char *);
@@ -72,6 +72,7 @@ main(int argc, char **argv)
void *linkmib;
size_t linkmiblen;
printfcn pf;
+ char *dname;
while ((c = getopt(argc, argv, "l")) != -1) {
switch(c) {
@@ -110,7 +111,24 @@ main(int argc, char **argv)
if (!isit(argc - optind, argv + optind, ifmd.ifmd_name))
continue;
- printit(&ifmd);
+
+ dname = NULL;
+ len = 0;
+ name[5] = IFDATA_DRIVERNAME;
+ if (sysctl(name, 6, NULL, &len, 0, 0) < 0) {
+ warn("sysctl(net.link.ifdata.%d.drivername)", i);
+ } else {
+ if ((dname = malloc(len)) == NULL)
+ err(EX_OSERR, NULL);
+ if (sysctl(name, 6, dname, &len, 0, 0) < 0) {
+ warn("sysctl(net.link.ifdata.%d.drivername)",
+ i);
+ free(dname);
+ dname = NULL;
+ }
+ }
+ printit(&ifmd, dname);
+ free(dname);
if (dolink && (pf = findlink(ifmd.ifmd_data.ifi_type))) {
name[5] = IFDATA_LINKSPECIFIC;
if (sysctl(name, 6, 0, &linkmiblen, 0, 0) < 0)
@@ -135,9 +153,12 @@ main(int argc, char **argv)
}
static void
-printit(const struct ifmibdata *ifmd)
+printit(const struct ifmibdata *ifmd, const char *dname)
{
- printf("Interface %.*s:\n", IFNAMSIZ, ifmd->ifmd_name);
+ printf("Interface %.*s", IFNAMSIZ, ifmd->ifmd_name);
+ if (dname != NULL)
+ printf(" (%s)", dname);
+ printf(":\n");
printf("\tflags: %x\n", ifmd->ifmd_flags);
printf("\tpromiscuous listeners: %d\n", ifmd->ifmd_pcount);
printf("\tsend queue length: %d\n", ifmd->ifmd_snd_len);
OpenPOWER on IntegriCloud