1f06ca4afSHartmut Brandt.\" 2f06ca4afSHartmut Brandt.\" Copyright (c) 2001-2003 3f06ca4afSHartmut Brandt.\" Fraunhofer Institute for Open Communication Systems (FhG Fokus). 4f06ca4afSHartmut Brandt.\" All rights reserved. 5f06ca4afSHartmut Brandt.\" 6f06ca4afSHartmut Brandt.\" Author: Harti Brandt <harti@freebsd.org> 7f06ca4afSHartmut Brandt.\" 8f06ca4afSHartmut Brandt.\" Redistribution of this software and documentation and use in source and 9f06ca4afSHartmut Brandt.\" binary forms, with or without modification, are permitted provided that 10f06ca4afSHartmut Brandt.\" the following conditions are met: 11f06ca4afSHartmut Brandt.\" 12f06ca4afSHartmut Brandt.\" 1. Redistributions of source code or documentation must retain the above 13f06ca4afSHartmut Brandt.\" copyright notice, this list of conditions and the following disclaimer. 14f06ca4afSHartmut Brandt.\" 2. Redistributions in binary form must reproduce the above copyright 15f06ca4afSHartmut Brandt.\" notice, this list of conditions and the following disclaimer in the 16f06ca4afSHartmut Brandt.\" documentation and/or other materials provided with the distribution. 17f06ca4afSHartmut Brandt.\" 3. Neither the name of the Institute nor the names of its contributors 18f06ca4afSHartmut Brandt.\" may be used to endorse or promote products derived from this software 19f06ca4afSHartmut Brandt.\" without specific prior written permission. 20f06ca4afSHartmut Brandt.\" 21f06ca4afSHartmut Brandt.\" THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY FRAUNHOFER FOKUS 22f06ca4afSHartmut Brandt.\" AND ITS CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 23f06ca4afSHartmut Brandt.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 24f06ca4afSHartmut Brandt.\" FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 25f06ca4afSHartmut Brandt.\" FRAUNHOFER FOKUS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26f06ca4afSHartmut Brandt.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27f06ca4afSHartmut Brandt.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 28f06ca4afSHartmut Brandt.\" OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 29f06ca4afSHartmut Brandt.\" LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 30f06ca4afSHartmut Brandt.\" NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 31f06ca4afSHartmut Brandt.\" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32f06ca4afSHartmut Brandt.\" 33f06ca4afSHartmut Brandt.\" $Begemot: bsnmp/snmp_mibII/snmp_mibII.3,v 1.1 2002/08/19 09:30:14 hbb Exp $ 34f06ca4afSHartmut Brandt.\" 35f06ca4afSHartmut Brandt.Dd August 19, 2002 36f06ca4afSHartmut Brandt.Dt snmp_mibII 3 37f06ca4afSHartmut Brandt.Os 38f06ca4afSHartmut Brandt.Sh NAME 39f06ca4afSHartmut Brandt.Nm mibif_notify_f , 40f06ca4afSHartmut Brandt.Nm mib_netsock , 41f06ca4afSHartmut Brandt.Nm mib_if_set_dyn , 42f06ca4afSHartmut Brandt.Nm mib_refresh_iflist , 43f06ca4afSHartmut Brandt.Nm mib_find_if , 44f06ca4afSHartmut Brandt.Nm mib_find_if_sys , 45f06ca4afSHartmut Brandt.Nm mib_find_if_name , 46f06ca4afSHartmut Brandt.Nm mib_first_if , 47f06ca4afSHartmut Brandt.Nm mib_next_if , 48f06ca4afSHartmut Brandt.Nm mib_register_newif , 49f06ca4afSHartmut Brandt.Nm mib_unregister_newif , 50f06ca4afSHartmut Brandt.Nm mib_fetch_ifmib , 51f06ca4afSHartmut Brandt.Nm mib_if_admin , 52f06ca4afSHartmut Brandt.Nm mib_find_ifa , 53f06ca4afSHartmut Brandt.Nm mib_first_ififa , 54f06ca4afSHartmut Brandt.Nm mib_next_ififa , 55f06ca4afSHartmut Brandt.Nm mib_ifstack_create , 56f06ca4afSHartmut Brandt.Nm mib_ifstack_delete , 57f06ca4afSHartmut Brandt.Nm mib_find_rcvaddr , 58f06ca4afSHartmut Brandt.Nm mib_rcvaddr_create , 59f06ca4afSHartmut Brandt.Nm mib_rcvaddr_delete , 60f06ca4afSHartmut Brandt.Nm mibif_notify , 61f06ca4afSHartmut Brandt.Nm mibif_unnotify 62f06ca4afSHartmut Brandt.Nd "mib-2 module for snmpd. 63f06ca4afSHartmut Brandt.Sh LIBRARY 64f06ca4afSHartmut Brandt.Pq begemotSnmpdModulePath."mibII" = "/usr/local/lib/snmp_mibII.so" 65f06ca4afSHartmut Brandt.Sh SYNOPSIS 66f06ca4afSHartmut Brandt.In bsnmp/snmpmod.h 67f06ca4afSHartmut Brandt.In bsnmp/snmp_mibII.h 68f06ca4afSHartmut Brandt.Ft typedef void 69f06ca4afSHartmut Brandt.Fn (*mibif_notify_f) "struct mibif *ifp" "enum mibif_notify event" "void *uarg" 70f06ca4afSHartmut Brandt.Vt extern int mib_netsock ; 71f06ca4afSHartmut Brandt.Ft void 72f06ca4afSHartmut Brandt.Fn mib_if_set_dyn "const char *ifname" 73f06ca4afSHartmut Brandt.Ft void 74f06ca4afSHartmut Brandt.Fn mib_refresh_iflist "void" 75f06ca4afSHartmut Brandt.Ft struct mibif * 76f06ca4afSHartmut Brandt.Fn mib_find_if "u_int ifindex" 77f06ca4afSHartmut Brandt.Ft struct mibif * 78f06ca4afSHartmut Brandt.Fn mib_find_if_sys "u_int sysindex" 79f06ca4afSHartmut Brandt.Ft struct mibif * 80f06ca4afSHartmut Brandt.Fn mib_find_if_name "const char *ifname" 81f06ca4afSHartmut Brandt.Ft struct mibif * 82f06ca4afSHartmut Brandt.Fn mib_first_if "void" 83f06ca4afSHartmut Brandt.Ft struct mibif * 84f06ca4afSHartmut Brandt.Fn mib_next_if "const struct mibif *ifp" 85f06ca4afSHartmut Brandt.Ft int 86f06ca4afSHartmut Brandt.Fn mib_register_newif "int (*func)(struct mibif *)" "const struct lmodule *mod" 87f06ca4afSHartmut Brandt.Ft void 88f06ca4afSHartmut Brandt.Fn mib_unregister_newif "const struct lmodule *mod" 89f06ca4afSHartmut Brandt.Ft int 90f06ca4afSHartmut Brandt.Fn mib_fetch_ifmib "struct mibif *ifp" 91f06ca4afSHartmut Brandt.Ft int 92f06ca4afSHartmut Brandt.Fn mib_if_admin "struct mibif *ifp" "int up" 93f06ca4afSHartmut Brandt.Ft struct mibifa * 94f06ca4afSHartmut Brandt.Fn mib_find_ifa "struct in_addr ipa" 95f06ca4afSHartmut Brandt.Ft struct mibifa * 96f06ca4afSHartmut Brandt.Fn mib_first_ififa "const struct mibif *ifp" 97f06ca4afSHartmut Brandt.Ft struct mibifa * 98f06ca4afSHartmut Brandt.Fn mib_next_ififa "struct mibifa *ifa" 99f06ca4afSHartmut Brandt.Ft int 100f06ca4afSHartmut Brandt.Fn mib_ifstack_create "const struct mibif *lower" "const struct mibif *upper" 101f06ca4afSHartmut Brandt.Ft void 102f06ca4afSHartmut Brandt.Fn mib_ifstack_delete "const struct mibif *lower" "const struct mibif *upper" 103f06ca4afSHartmut Brandt.Ft struct mibrcvaddr * 104f06ca4afSHartmut Brandt.Fn mib_find_rcvaddr "u_int ifindex" "const u_char *addr" "size_t addrlen" 105f06ca4afSHartmut Brandt.Ft struct mibrcvaddr * 106f06ca4afSHartmut Brandt.Fn mib_rcvaddr_create "struct mibif *ifp" "const u_char *addr" "size_t addrlen" 107f06ca4afSHartmut Brandt.Ft void 108f06ca4afSHartmut Brandt.Fn mib_rcvaddr_delete "struct mibrcvaddr *addr" 109f06ca4afSHartmut Brandt.Ft void * 110f06ca4afSHartmut Brandt.Fn mibif_notify "struct mibif *ifp" "const struct lmodule *mod" "mibif_notify_f func" "void *uarg" 111f06ca4afSHartmut Brandt.Ft void 112f06ca4afSHartmut Brandt.Fn mibif_unnotify "void *reg" 113f06ca4afSHartmut Brandt.Sh DESCRIPTION 114f06ca4afSHartmut BrandtThe 115f06ca4afSHartmut Brandt.Nm snmp_mibII 116f06ca4afSHartmut Brandtmodule implements parts of the internet standard MIB-2. Most of the relevant 117f06ca4afSHartmut BrandtMIBs are implemented. Some of the tables are restricted to be read-only 118f06ca4afSHartmut Brandtinstead of read-write. The exact current implementation can be found in 119f06ca4afSHartmut Brandt.Pa /usr/local/include/bsnmp/mibII_tree.def . 120f06ca4afSHartmut BrandtThe module also exports a number of functions and global variables for use 121f06ca4afSHartmut Brandtby other modules, that need to handle network interfaces. This man page describes 122f06ca4afSHartmut Brandtthese functions. 123f06ca4afSHartmut Brandt.Ss DIRECT NETWORK ACCESS 124f06ca4afSHartmut BrandtThe 125f06ca4afSHartmut Brandt.Nm 126f06ca4afSHartmut Brandtmodule opens a socket that is used to execute all network related 127f06ca4afSHartmut Brandt.Xr ioctl 2 128f06ca4afSHartmut Brandtfunctions. This socket is globally available under the name 129f06ca4afSHartmut Brandt.Va mib_netsock . 130f06ca4afSHartmut Brandt.Ss NETWORK INTERFACES 131f06ca4afSHartmut BrandtThe 132f06ca4afSHartmut Brandt.Nm 133f06ca4afSHartmut Brandtmodule handles a list of all currently existing network interfaces. It allows 134f06ca4afSHartmut Brandtother modules to handle their own interface lists with special information 135f06ca4afSHartmut Brandtby providing a mechanism to register to events that change the interface list 136f06ca4afSHartmut Brandt(see below). The basic data structure is the interface structure: 137f06ca4afSHartmut Brandt.Bd -literal -offset indent 138f06ca4afSHartmut Brandtstruct mibif { 139f06ca4afSHartmut Brandt TAILQ_ENTRY(mibif) link; 140f06ca4afSHartmut Brandt u_int flags; 141f06ca4afSHartmut Brandt u_int index; /* logical ifindex */ 142f06ca4afSHartmut Brandt u_int sysindex; 143f06ca4afSHartmut Brandt char name[IFNAMSIZ]; 144f06ca4afSHartmut Brandt char descr[256]; 145f06ca4afSHartmut Brandt struct ifmibdata mib; 146f06ca4afSHartmut Brandt u_int32_t mibtick; 147f06ca4afSHartmut Brandt void *specmib; 148f06ca4afSHartmut Brandt size_t specmiblen; 149f06ca4afSHartmut Brandt u_char *physaddr; 150f06ca4afSHartmut Brandt u_int physaddrlen; 151f06ca4afSHartmut Brandt int has_connector; 152f06ca4afSHartmut Brandt int trap_enable; 153f06ca4afSHartmut Brandt u_int32_t counter_disc; 154f06ca4afSHartmut Brandt mibif_notify_f xnotify; 155f06ca4afSHartmut Brandt void *xnotify_data; 156f06ca4afSHartmut Brandt const struct lmodule *xnotify_mod; 157f06ca4afSHartmut Brandt}; 158f06ca4afSHartmut Brandt.Ed 159f06ca4afSHartmut Brandt.Pp 160f06ca4afSHartmut BrandtThe 161f06ca4afSHartmut Brandt.Nm 162f06ca4afSHartmut Brandtmodule tries to implement the semantic if 163f06ca4afSHartmut Brandt.Va ifIndex 164f06ca4afSHartmut Brandtas described in RFC-2863. This RFC states, that an interface indexes may not 165f06ca4afSHartmut Brandtbe reused. That means, for example, if 166f06ca4afSHartmut Brandt.Pa tun 167f06ca4afSHartmut Brandtis a synthetic interface type and the system creates the interface 168f06ca4afSHartmut Brandt.Pa tun0 , 169f06ca4afSHartmut Brandtdestroys this interfaces and again creates a 170f06ca4afSHartmut Brandt.Pa tun 0 , 171f06ca4afSHartmut Brandtthen these interfaces must have different interface indexes, because in fact 172f06ca4afSHartmut Brandtthey are different interfaces. If, on the other hand, there is a hardware 173f06ca4afSHartmut Brandtinterface 174f06ca4afSHartmut Brandt.Pa xl0 175f06ca4afSHartmut Brandtand this interface disappears, because its driver is unloaded and appears 176f06ca4afSHartmut Brandtagain, because the driver is loaded again, the interface index must stay 177f06ca4afSHartmut Brandtthe same. 178f06ca4afSHartmut Brandt.Nm 179f06ca4afSHartmut Brandtimplements this by differentiating between real and synthetic (dynamic) 180f06ca4afSHartmut Brandtinterfaces. An interface type can be declared dynamic by calling the function 181f06ca4afSHartmut Brandt.Fn mib_if_set_dyn 182f06ca4afSHartmut Brandtwith the name if the interface type (for example 183f06ca4afSHartmut Brandt.Qq tun ). 184f06ca4afSHartmut BrandtFor real interfaces, the module keeps the mapping between the interface name 185f06ca4afSHartmut Brandtand its 186f06ca4afSHartmut Brandt.Va ifIndex 187f06ca4afSHartmut Brandtin a special list, if the interface is unloaded. For dynamic interfaces 188f06ca4afSHartmut Brandta new 189f06ca4afSHartmut Brandt.Va ifIndex 190f06ca4afSHartmut Brandtis generated each time the interface comes into existance. This 191f06ca4afSHartmut Brandtmeans, that the interface index as seen by SNMP is not the same index 192f06ca4afSHartmut Brandtas used by the system. The SNMP 193f06ca4afSHartmut Brandt.Va ifIndex 194f06ca4afSHartmut Brandtis held in field 195f06ca4afSHartmut Brandt.Va index , 196f06ca4afSHartmut Brandtthe system's interface index is 197f06ca4afSHartmut Brandt.Va sysindex . 198f06ca4afSHartmut Brandt.Pp 199f06ca4afSHartmut BrandtA call to 200f06ca4afSHartmut Brandt.Nm mib_refresh_iflist 201f06ca4afSHartmut Brandtcauses the entire interface list to be re-created. 202f06ca4afSHartmut Brandt.Pp 203f06ca4afSHartmut BrandtThe interface list can be traversed with the functions 204f06ca4afSHartmut Brandt.Fn mib_first_if 205f06ca4afSHartmut Brandtand 206f06ca4afSHartmut Brandt.Fn mib_next_if . 207f06ca4afSHartmut BrandtBe sure not to change the interface list while traversing the list with 208f06ca4afSHartmut Brandtthese two calls. 209f06ca4afSHartmut Brandt.Pp 210f06ca4afSHartmut BrandtThere are three functions to find an interface by name or index. 211f06ca4afSHartmut Brandt.Fn mib_find_if 212f06ca4afSHartmut Brandtfinds an interface by searching for an SNMP 213f06ca4afSHartmut Brandt.Va ifIndex , 214f06ca4afSHartmut Brandt.Fn mib_find_if_sys 215f06ca4afSHartmut Brandtfinds an interface by searching for a system interface index and 216f06ca4afSHartmut Brandt.Fn mib_find_if_name 217f06ca4afSHartmut Brandtfinds an interface by looking for an interface name. Each of the 218f06ca4afSHartmut Brandtfunction returns 219f06ca4afSHartmut Brandt.Li NULL 220f06ca4afSHartmut Brandtif the interface cannot be found. 221f06ca4afSHartmut Brandt.Pp 222f06ca4afSHartmut BrandtThe function 223f06ca4afSHartmut Brandt.Fn mib_fetch_ifmib 224f06ca4afSHartmut Brandtcauses the interface MIB to be refreshed from the kernel. 225f06ca4afSHartmut Brandt.Pp 226f06ca4afSHartmut BrandtThe function 227f06ca4afSHartmut Brandt.Fn mib_if_admin 228f06ca4afSHartmut Brandtcan be used to change the interface administrative state to up 229f06ca4afSHartmut Brandt(argument is 1) or down (argument is 0). 230f06ca4afSHartmut Brandt.Ss INTERFACE EVENTS 231f06ca4afSHartmut BrandtA module can register itself to receive a notification when a new entry is 232f06ca4afSHartmut Brandtcreated in the interface list. This is done by calling 233f06ca4afSHartmut Brandt.Fn mib_register_newif . 234f06ca4afSHartmut BrandtA module can register only one function, a second call to 235f06ca4afSHartmut Brandt.Fn mib_register_newif 236f06ca4afSHartmut Brandtcauses the registration to be overwritten. The registration can be removed 237f06ca4afSHartmut Brandtwith a call to 238f06ca4afSHartmut Brandt.Fn mib_unregister_newif . 239f06ca4afSHartmut BrandtIf is unregistered automatically, when the registering module is unloaded. 240f06ca4afSHartmut Brandt.Pp 241f06ca4afSHartmut BrandtA module can also register to events on a specific interface. This is done 242f06ca4afSHartmut Brandtby calling 243f06ca4afSHartmut Brandt.Fn mibif_notify . 244f06ca4afSHartmut BrandtThis causes the given callback 245f06ca4afSHartmut Brandt.Fa func 246f06ca4afSHartmut Brandtto be called with the interface pointer, a notification code and 247f06ca4afSHartmut Brandtthe user argument 248f06ca4afSHartmut Brandt.Fa uarg 249f06ca4afSHartmut Brandtwhen any of the following events occur: 250f06ca4afSHartmut Brandt.Bl -tag -width "XXXXX" 251f06ca4afSHartmut Brandt.It Li MIBIF_NOTIFY_DESTROY 252f06ca4afSHartmut BrandtThe interface is destroyed. 253f06ca4afSHartmut Brandt.El 254f06ca4afSHartmut Brandt.Pp 255f06ca4afSHartmut BrandtThis mechanism can be used to implement interface type specific MIB parts 256f06ca4afSHartmut Brandtin other modules. The registration can be removed with 257f06ca4afSHartmut Brandt.Fn mib_unnotify 258f06ca4afSHartmut Brandtwhich the return value from 259f06ca4afSHartmut Brandt.Fa mib_notify . 260f06ca4afSHartmut BrandtAny notification registration is removed automatically when the interface 261f06ca4afSHartmut Brandtis destroyed or the registering module is unloaded. 262f06ca4afSHartmut Brandt.Em Note that only one module can register to any given interface . 263f06ca4afSHartmut Brandt.Ss INTERFACE ADDRESSES 264f06ca4afSHartmut BrandtThe 265f06ca4afSHartmut Brandt.Nm 266f06ca4afSHartmut Brandtmodule handles a table of interface IP-addresses. These addresses are held 267f06ca4afSHartmut Brandtin a 268f06ca4afSHartmut Brandt.Bd -literal -offset indent 269f06ca4afSHartmut Brandtstruct mibifa { 270f06ca4afSHartmut Brandt TAILQ_ENTRY(mibifa) link; 271f06ca4afSHartmut Brandt struct in_addr inaddr; 272f06ca4afSHartmut Brandt struct in_addr inmask; 273f06ca4afSHartmut Brandt struct in_addr inbcast; 274f06ca4afSHartmut Brandt struct asn_oid index; 275f06ca4afSHartmut Brandt u_int ifindex; 276f06ca4afSHartmut Brandt u_int flags; 277f06ca4afSHartmut Brandt}; 278f06ca4afSHartmut Brandt.Ed 279f06ca4afSHartmut Brandt.Pp 280f06ca4afSHartmut BrandtThe (ordered) list of IP-addresses on a given interface can be traversed by 281f06ca4afSHartmut Brandtcalling 282f06ca4afSHartmut Brandt.Fn mib_first_ififa 283f06ca4afSHartmut Brandtand 284f06ca4afSHartmut Brandt.Fn mib_next_ififa . 285f06ca4afSHartmut BrandtThe list should not be considered read-only. 286f06ca4afSHartmut Brandt.Ss INTERFACE RECEIVE ADDRESSES 287f06ca4afSHartmut BrandtThe internet MIB-2 contains a table of interface receive addresses. These 288f06ca4afSHartmut Brandtaddresses are handled in: 289f06ca4afSHartmut Brandt.Bd -literal -offset indent 290f06ca4afSHartmut Brandtstruct mibrcvaddr { 291f06ca4afSHartmut Brandt TAILQ_ENTRY(mibrcvaddr) link; 292f06ca4afSHartmut Brandt struct asn_oid index; 293f06ca4afSHartmut Brandt u_int ifindex; 294f06ca4afSHartmut Brandt u_char addr[ASN_MAXOIDLEN]; 295f06ca4afSHartmut Brandt size_t addrlen; 296f06ca4afSHartmut Brandt u_int flags; 297f06ca4afSHartmut Brandt}; 298f06ca4afSHartmut Brandtenum { 299f06ca4afSHartmut Brandt MIBRCVADDR_VOLATILE = 0x00000001, 300f06ca4afSHartmut Brandt MIBRCVADDR_BCAST = 0x00000002, 301f06ca4afSHartmut Brandt MIBRCVADDR_HW = 0x00000004, 302f06ca4afSHartmut Brandt}; 303f06ca4afSHartmut Brandt.Ed 304f06ca4afSHartmut Brandt.Pp 305f06ca4afSHartmut BrandtNote, that the assignment of 306f06ca4afSHartmut Brandt.Li MIBRCVADDR_BCAST 307f06ca4afSHartmut Brandtis based on a list of known interface types. The flags should be handled 308f06ca4afSHartmut Brandtby modules inplementing interface type specific MIBs. 309f06ca4afSHartmut Brandt.Pp 310f06ca4afSHartmut BrandtA receive address can be created with 311f06ca4afSHartmut Brandt.Fn mib_rcvaddr_create 312f06ca4afSHartmut Brandtand deleted with 313f06ca4afSHartmut Brandt.Fn mib_rcvaddr_delete . 314f06ca4afSHartmut BrandtThis needs to be done only for addresses that are not automatically handled 315f06ca4afSHartmut Brandtby the system. 316f06ca4afSHartmut Brandt.Pp 317f06ca4afSHartmut BrandtA receive address can be found with 318f06ca4afSHartmut Brandt.Fn mib_find_rcvaddr . 319f06ca4afSHartmut Brandt.Ss INTERFACE STACK TABLE 320f06ca4afSHartmut BrandtThe 321f06ca4afSHartmut Brandt.Nm 322f06ca4afSHartmut Brandtmodule maintains also the interface stack table. Because for complex stacks, 323f06ca4afSHartmut Brandtthere is no system supported generic way of getting this information, interface 324f06ca4afSHartmut Brandttype specific modules need to help setting up stack entries. The 325f06ca4afSHartmut Brandt.Nm 326f06ca4afSHartmut Brandtmodule handles only the top and bottom entries. 327f06ca4afSHartmut Brandt.Pp 328f06ca4afSHartmut BrandtA table entry is created with 329f06ca4afSHartmut Brandt.Fn mib_ifstack_create 330f06ca4afSHartmut Brandtand deleted with 331f06ca4afSHartmut Brandt.Fn mib_ifstack_delete . 332f06ca4afSHartmut BrandtBoth functions need the pointers to the interfaces. Entries are automatically 333f06ca4afSHartmut Brandtdeleted if any of the interfaces of the entry is destroyed. The functions handle 334f06ca4afSHartmut Brandtboth the stack table and the reverse stack table. 335f06ca4afSHartmut Brandt.Sh FILES 336f06ca4afSHartmut Brandt.Bl -tag -width ".It Pa /usr/local/include/bsnmp/mibII_tree.def" -compact 337f06ca4afSHartmut Brandt.It Pa /usr/local/include/bsnmp/mibII_tree.def 338f06ca4afSHartmut BrandtThe description of the MIB tree implemented by 339f06ca4afSHartmut Brandt.Nm . 340f06ca4afSHartmut Brandt.It Pa /usr/local/share/snmp/mibs 341f06ca4afSHartmut BrandtThe various internet MIBs. 342f06ca4afSHartmut Brandt.Sh SEE ALSO 343f06ca4afSHartmut Brandt.Xr snmpmod 3 , 344f06ca4afSHartmut Brandt.Xr gensnmptree 1 345f06ca4afSHartmut Brandt.Sh STANDARDS 346f06ca4afSHartmut BrandtThis implementation conforms to the applicable IETF RFCs. 347f06ca4afSHartmut Brandt.Sh AUTHORS 348f06ca4afSHartmut Brandt.An Hartmut Brandt Aq brandt@fokus.gmd.de 349