diff options
author | harti <harti@FreeBSD.org> | 2006-01-04 12:57:09 +0000 |
---|---|---|
committer | harti <harti@FreeBSD.org> | 2006-01-04 12:57:09 +0000 |
commit | 9cca28b4d7b7042fa7f1bb73238dcc863592e044 (patch) | |
tree | 9883bdb48e4fc6a6de0d55496500f2dcaf3bc18c /sys/net/if_mib.c | |
parent | e426666183b577af4f703c82c374703a3b0ce946 (diff) | |
download | FreeBSD-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.c | 19 |
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; } |