snmp_mibII.h revision 142810
139225Sgibbs/* 239225Sgibbs * Copyright (c) 2001-2003 339225Sgibbs * Fraunhofer Institute for Open Communication Systems (FhG Fokus). 439225Sgibbs * All rights reserved. 539751Simp * 639225Sgibbs * Author: Harti Brandt <harti@freebsd.org> 739751Simp * 839751Simp * Redistribution and use in source and binary forms, with or without 939751Simp * modification, are permitted provided that the following conditions 1039751Simp * are met: 1139751Simp * 1. Redistributions of source code must retain the above copyright 1239751Simp * notice, this list of conditions and the following disclaimer. 1339751Simp * 2. Redistributions in binary form must reproduce the above copyright 1439751Simp * notice, this list of conditions and the following disclaimer in the 1539751Simp * documentation and/or other materials provided with the distribution. 1639751Simp * 1739751Simp * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1839751Simp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1939751Simp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2039751Simp * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 2139751Simp * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2239751Simp * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2339751Simp * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2439751Simp * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2539751Simp * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2639751Simp * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2739751Simp * SUCH DAMAGE. 2839751Simp * 2939751Simp * $Begemot: bsnmp/snmp_mibII/snmp_mibII.h,v 1.16 2005/02/25 16:04:43 brandt_h Exp $ 3039751Simp * 3139751Simp * Implementation of the interfaces and IP groups of MIB-II. 3239225Sgibbs */ 3339225Sgibbs#ifndef snmp_mibII_h_ 3439225Sgibbs#define snmp_mibII_h_ 3539225Sgibbs 3639225Sgibbs/* forward declaration */ 3739225Sgibbsstruct mibif; 3839225Sgibbs 3939225Sgibbsenum mibif_notify { 4039225Sgibbs MIBIF_NOTIFY_DESTROY 4139225Sgibbs}; 4239225Sgibbs 4339225Sgibbstypedef void (*mibif_notify_f)(struct mibif *, enum mibif_notify, void *); 4439225Sgibbs 4539225Sgibbs/* 4639225Sgibbs * Interfaces. This structure describes one interface as seen in the MIB. 4739225Sgibbs * Interfaces are indexed by ifindex. This is not the same as the index 4839225Sgibbs * used by the system because of the rules in RFC-2863 section 3.1.5. This 4939225Sgibbs * RFC requires, that an ifindex is not to be re-used for ANOTHER dynamically 5039225Sgibbs * interfaces once the interface was deleted. The system's ifindex is in 5139225Sgibbs * sysindex. Mapping is via the mapping table below. 5239225Sgibbs */ 5339225Sgibbsstruct mibif { 5439225Sgibbs TAILQ_ENTRY(mibif) link; 5539225Sgibbs u_int flags; 5639225Sgibbs u_int index; /* the logical ifindex */ 5739225Sgibbs u_int sysindex; 5850477Speter char name[IFNAMSIZ]; 5939225Sgibbs char descr[256]; 6039225Sgibbs struct ifmibdata mib; 6139225Sgibbs u_int32_t mibtick; 6239225Sgibbs void *specmib; 6339225Sgibbs size_t specmiblen; 6439225Sgibbs u_char *physaddr; 6539225Sgibbs u_int physaddrlen; 6639225Sgibbs int has_connector; 6739225Sgibbs int trap_enable; 6839225Sgibbs u_int32_t counter_disc; 6939225Sgibbs 7039225Sgibbs /* 7139225Sgibbs * This is needed to handle interface type specific information 7239225Sgibbs * in sub-modules. It contains a function pointer which handles 7339225Sgibbs * notifications and a data pointer to arbitrary data. 7439225Sgibbs * Should be set via the mibif_notify function. 7539225Sgibbs */ 7639225Sgibbs mibif_notify_f xnotify; 7739225Sgibbs void *xnotify_data; 7839225Sgibbs const struct lmodule *xnotify_mod; 7939225Sgibbs 8042887Simp /* to be set by ifType specific modules. This is ifSpecific. */ 8139225Sgibbs struct asn_oid spec_oid; 8239225Sgibbs}; 8342887Simp 8439225Sgibbs/* 8539881Simp * Interface IP-address table. 8639225Sgibbs */ 8739751Simpstruct mibifa { 8839751Simp TAILQ_ENTRY(mibifa) link; 8939751Simp struct in_addr inaddr; 9039751Simp struct in_addr inmask; 9139751Simp struct in_addr inbcast; 9239751Simp struct asn_oid index; /* index for table search */ 9347506Sgibbs u_int ifindex; 9447506Sgibbs u_int flags; 9547506Sgibbs}; 9647506Sgibbs 9739225Sgibbs/* 9839225Sgibbs * Interface receive addresses. Interface link-level multicast, broadcast 9939225Sgibbs * and hardware addresses are handled automatically. 10039225Sgibbs */ 10139225Sgibbsstruct mibrcvaddr { 10239225Sgibbs TAILQ_ENTRY(mibrcvaddr) link; 10339225Sgibbs struct asn_oid index; 10439225Sgibbs u_int ifindex; 10539225Sgibbs u_char addr[ASN_MAXOIDLEN]; 10639225Sgibbs size_t addrlen; 10739225Sgibbs u_int flags; 10839225Sgibbs}; 10939225Sgibbsenum { 11039225Sgibbs MIBRCVADDR_VOLATILE = 0x00000001, 11139225Sgibbs MIBRCVADDR_BCAST = 0x00000002, 11239225Sgibbs MIBRCVADDR_HW = 0x00000004, 11339225Sgibbs}; 11439225Sgibbs 11539225Sgibbs/* network socket */ 11639225Sgibbsextern int mib_netsock; 11739225Sgibbs 11839225Sgibbs/* set an interface name to dynamic mode */ 11939225Sgibbsvoid mib_if_set_dyn(const char *); 12039225Sgibbs 12139225Sgibbs/* re-read the systems interface list */ 12239225Sgibbsvoid mib_refresh_iflist(void); 12339225Sgibbs 12439225Sgibbs/* find interface by index */ 12539225Sgibbsstruct mibif *mib_find_if(u_int); 12639225Sgibbsstruct mibif *mib_find_if_sys(u_int); 12739225Sgibbsstruct mibif *mib_find_if_name(const char *); 12839225Sgibbs 12941047Sgibbs/* iterate through all interfaces */ 13039225Sgibbsstruct mibif *mib_first_if(void); 13139225Sgibbsstruct mibif *mib_next_if(const struct mibif *); 13239225Sgibbs 13339225Sgibbs/* register for interface creations */ 13441047Sgibbsint mib_register_newif(int (*)(struct mibif *), const struct lmodule *); 13539225Sgibbsvoid mib_unregister_newif(const struct lmodule *); 13639225Sgibbs 13741047Sgibbs/* get fresh MIB data */ 13839225Sgibbsint mib_fetch_ifmib(struct mibif *); 13939225Sgibbs 14039225Sgibbs/* change the ADMIN status of an interface and refresh the MIB */ 14139225Sgibbsint mib_if_admin(struct mibif *, int up); 14239225Sgibbs 14339225Sgibbs/* find interface address by address */ 14439225Sgibbsstruct mibifa *mib_find_ifa(struct in_addr); 14539225Sgibbs 14639225Sgibbs/* find first/next address for a given interface */ 14741047Sgibbsstruct mibifa *mib_first_ififa(const struct mibif *); 14839225Sgibbsstruct mibifa *mib_next_ififa(struct mibifa *); 14939225Sgibbs 15041047Sgibbs/* create/delete stacking entries */ 15139225Sgibbsint mib_ifstack_create(const struct mibif *lower, const struct mibif *upper); 15239225Sgibbsvoid mib_ifstack_delete(const struct mibif *lower, const struct mibif *upper); 15339225Sgibbs 15439225Sgibbs/* find receive address */ 15539225Sgibbsstruct mibrcvaddr *mib_find_rcvaddr(u_int, const u_char *, size_t); 15639225Sgibbs 15739225Sgibbs/* create/delete receive addresses */ 15839225Sgibbsstruct mibrcvaddr *mib_rcvaddr_create(struct mibif *, const u_char *, size_t); 15939225Sgibbsvoid mib_rcvaddr_delete(struct mibrcvaddr *); 16039225Sgibbs 16139225Sgibbs/* register for interface notification */ 16239225Sgibbsvoid *mibif_notify(struct mibif *, const struct lmodule *, mibif_notify_f, 16339225Sgibbs void *); 16439225Sgibbsvoid mibif_unnotify(void *); 16539225Sgibbs 16639225Sgibbs#endif 16741047Sgibbs