FreeBSD manual
download PDF document: ifmib.4.pdf
IFMIB(4) FreeBSD Kernel Interfaces Manual IFMIB(4)
NAME
ifmib - Management Information Base for network interfaces
SYNOPSIS
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/time.h>
#include <net/if.h>
#include <net/if_mib.h>
DESCRIPTION
The ifmib facility is an application of the sysctl(3) interface to
provide management information about network interfaces to client
applications such as netstat(1), slstat(8), and SNMP management agents.
This information is structured as a table, where each row in the table
represents a logical network interface (either a hardware device or a
software pseudo-device like lo(4)). There are two columns in the table,
each containing a single structure: one column contains generic
information relevant to all interfaces, and the other contains
information specific to the particular class of interface. (Generally
the latter will implement the SNMP MIB defined for that particular
interface class, if one exists and can be implemented in the kernel.)
The ifmib facility is accessed via the "net.link.generic" branch of the
sysctl(3) MIB. The manifest constants for each level in the sysctl(3)
name are defined in <net/if_mib.h>. The index of the last row in the
table is given by "net.link.generic.system.ifcount" (or, using the
manifest constants, CTL_NET, PF_LINK, NETLINK_GENERIC, IFMIB_SYSTEM,
IFMIB_IFCOUNT). A management application searching for a particular
interface should start with row 1 and continue through the table row-by-
row until the desired interface is found, or the interface count is
reached. Note that the table may be sparse, i.e., a given row may not
exist, indicated by an errno of ENOENT. Such an error should be ignored,
and the next row should be checked.
The generic interface information, common to all interfaces, can be
accessed via the following procedure:
int
get_ifmib_general(int row, struct ifmibdata *ifmd)
{
int name[6];
size_t len;
name[0] = CTL_NET;
name[1] = PF_LINK;
name[2] = NETLINK_GENERIC;
name[3] = IFMIB_IFDATA;
name[4] = row;
name[5] = IFDATA_GENERAL;
len = sizeof(*ifmd);
return sysctl(name, 6, ifmd, &len, (void *)0, 0);
}
ifmd_flags (int) the interface's flags (defined in <net/if.h>)
ifmd_snd_len (int) the current instantaneous length of the send queue
ifmd_snd_drops (int) the number of packets dropped at this interface
because the send queue was full
ifmd_data (struct if_data) more information from a structure
defined in <net/if.h> (see if_data(9))
Class-specific information can be retrieved by examining the
IFDATA_LINKSPECIFIC column instead. Note that the form and length of the
structure will depend on the class of interface. For IFT_ETHER,
IFT_ISO88023, and IFT_STARLAN interfaces, the structure is called "struct
ifmib_iso_8802_3" (defined in <net/if_mib.h>), and implements a superset
of the RFC 1650 MIB for Ethernet-like networks.
SEE ALSO
sysctl(3), intro(4), ifnet(9)
F. Kastenholz, Definitions of Managed Objects for the Ethernet-like
Interface Types Using SMIv2, August 1994, RFC 1650.
HISTORY
The ifmib interface first appeared in FreeBSD 2.2.
BUGS
Many Ethernet-like interfaces do not yet support the Ethernet MIB.
Regardless, all interfaces automatically support the generic MIB.
FreeBSD 14.0-RELEASE-p11 December 26, 2020 FreeBSD 14.0-RELEASE-p11