summaryrefslogtreecommitdiffstats
path: root/sys/net/if_mib.c
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 /sys/net/if_mib.c
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 'sys/net/if_mib.c')
-rw-r--r--sys/net/if_mib.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/sys/net/if_mib.c b/sys/net/if_mib.c
index c061e7f..dc2b8e1 100644
--- a/sys/net/if_mib.c
+++ b/sys/net/if_mib.c
@@ -75,6 +75,8 @@ sysctl_ifdata(SYSCTL_HANDLER_ARGS) /* XXX bad syntax! */
u_int namelen = arg2;
struct ifnet *ifp;
struct ifmibdata ifmd;
+ size_t dlen;
+ char *dbuf;
if (namelen != 2)
return EINVAL;
@@ -134,7 +136,22 @@ sysctl_ifdata(SYSCTL_HANDLER_ARGS) /* XXX bad syntax! */
error = SYSCTL_IN(req, ifp->if_linkmib, ifp->if_linkmiblen);
if (error)
return error;
-
+
+ case IFDATA_DRIVERNAME:
+ /* 20 is enough for 64bit ints */
+ dlen = strlen(ifp->if_dname) + 20 + 1;
+ if ((dbuf = malloc(dlen, M_TEMP, M_NOWAIT)) == NULL)
+ return (ENOMEM);
+ if (ifp->if_dunit == IF_DUNIT_NONE)
+ strcpy(dbuf, ifp->if_dname);
+ else
+ sprintf(dbuf, "%s%d", ifp->if_dname, ifp->if_dunit);
+
+ error = SYSCTL_OUT(req, dbuf, strlen(dbuf) + 1);
+ if (error == 0 && req->newptr != NULL)
+ error = EPERM;
+ free(dbuf, M_TEMP);
+ return (error);
}
return 0;
}
OpenPOWER on IntegriCloud