Provided by: freebsd-manpages_12.2-2_all bug

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);
           }

     The fields in struct ifmibdata are as follows:

     ifmd_name       (char []) the name of the interface, including the unit number

     ifmd_pcount     (int) the number of promiscuous listeners

     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; the interfaces known to
     support it include ed(4) and de(4).  Regardless, all interfaces automatically support the
     generic MIB.