Fill the ifAlias leaf of the ifXTable with the interface description

if there is one available and it fits into the maximum size (64 characters).
This commit is contained in:
Hartmut Brandt 2016-01-21 16:11:20 +00:00
parent 9e055ad144
commit 5edd0d3a4d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=294507
3 changed files with 20 additions and 1 deletions

View File

@ -443,6 +443,7 @@ mib_fetch_ifmib(struct mibif *ifp)
size_t len; size_t len;
void *newmib; void *newmib;
struct ifmibdata oldmib = ifp->mib; struct ifmibdata oldmib = ifp->mib;
struct ifreq irr;
if (fetch_generic_mib(ifp, &oldmib) == -1) if (fetch_generic_mib(ifp, &oldmib) == -1)
return (-1); return (-1);
@ -514,6 +515,18 @@ mib_fetch_ifmib(struct mibif *ifp)
} }
out: out:
strncpy(irr.ifr_name, ifp->name, sizeof(irr.ifr_name));
irr.ifr_buffer.buffer = MIBIF_PRIV(ifp)->alias;
irr.ifr_buffer.length = sizeof(MIBIF_PRIV(ifp)->alias);
if (ioctl(mib_netsock, SIOCGIFDESCR, &irr) == -1) {
MIBIF_PRIV(ifp)->alias[0] = 0;
if (errno != ENOMSG)
syslog(LOG_WARNING, "SIOCGIFDESCR (%s): %m", ifp->name);
} else if (irr.ifr_buffer.buffer == NULL) {
MIBIF_PRIV(ifp)->alias[0] = 0;
syslog(LOG_WARNING, "SIOCGIFDESCR (%s): too long (%zu)",
ifp->name, irr.ifr_buffer.length);
}
ifp->mibtick = get_ticks(); ifp->mibtick = get_ticks();
return (0); return (0);
} }

View File

@ -57,6 +57,9 @@
#include "snmp_mibII.h" #include "snmp_mibII.h"
#include "mibII_tree.h" #include "mibII_tree.h"
/* maximum size of the interface alias */
static const u_int MIBIF_ALIAS_SIZE = 64 + 1;
/* /*
* Interface list and flags. * Interface list and flags.
*/ */
@ -77,6 +80,9 @@ struct mibif_private {
uint64_t hc_opackets; uint64_t hc_opackets;
uint64_t hc_imcasts; uint64_t hc_imcasts;
uint64_t hc_ipackets; uint64_t hc_ipackets;
/* this should be made public */
char alias[MIBIF_ALIAS_SIZE];
}; };
#define MIBIF_PRIV(IFP) ((struct mibif_private *)((IFP)->private)) #define MIBIF_PRIV(IFP) ((struct mibif_private *)((IFP)->private))

View File

@ -528,7 +528,7 @@ op_ifxtable(struct snmp_context *ctx, struct snmp_value *value,
break; break;
case LEAF_ifAlias: case LEAF_ifAlias:
ret = string_get(value, "", -1); ret = string_get(value, MIBIF_PRIV(ifp)->alias, -1);
break; break;
case LEAF_ifCounterDiscontinuityTime: case LEAF_ifCounterDiscontinuityTime: