1/* 2 * Copyright (c) 2001-2003 3 * Fraunhofer Institute for Open Communication Systems (FhG Fokus). 4 * All rights reserved. 5 * 6 * Author: Harti Brandt <harti@freebsd.org> 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 * $Begemot: bsnmp/snmp_mibII/snmp_mibII.h,v 1.17 2005/05/23 09:03:43 brandt_h Exp $ 30 * 31 * Implementation of the interfaces and IP groups of MIB-II. 32 */ 33#ifndef snmp_mibII_h_ 34#define snmp_mibII_h_ 35 36/* forward declaration */ 37struct mibif; 38 39enum mibif_notify { 40 MIBIF_NOTIFY_DESTROY 41}; 42 43typedef void (*mibif_notify_f)(struct mibif *, enum mibif_notify, void *); 44 45/* 46 * Interfaces. This structure describes one interface as seen in the MIB. 47 * Interfaces are indexed by ifindex. This is not the same as the index 48 * used by the system because of the rules in RFC-2863 section 3.1.5. This 49 * RFC requires, that an ifindex is not to be re-used for ANOTHER dynamically 50 * interfaces once the interface was deleted. The system's ifindex is in 51 * sysindex. Mapping is via the mapping table below. 52 */ 53struct mibif { 54 TAILQ_ENTRY(mibif) link; 55 u_int flags; 56 u_int index; /* the logical ifindex */ 57 u_int sysindex; 58 char name[IFNAMSIZ]; 59 char descr[256]; 60 struct ifmibdata mib; 61 uint64_t mibtick; 62 void *specmib; 63 size_t specmiblen; 64 u_char *physaddr; 65 u_int physaddrlen; 66 int has_connector; 67 int trap_enable; 68 uint64_t counter_disc; 69 70 /* 71 * This is needed to handle interface type specific information 72 * in sub-modules. It contains a function pointer which handles 73 * notifications and a data pointer to arbitrary data. 74 * Should be set via the mibif_notify function. 75 */ 76 mibif_notify_f xnotify; 77 void *xnotify_data; 78 const struct lmodule *xnotify_mod; 79 80 /* to be set by ifType specific modules. This is ifSpecific. */ 81 struct asn_oid spec_oid;
| 1/* 2 * Copyright (c) 2001-2003 3 * Fraunhofer Institute for Open Communication Systems (FhG Fokus). 4 * All rights reserved. 5 * 6 * Author: Harti Brandt <harti@freebsd.org> 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 * $Begemot: bsnmp/snmp_mibII/snmp_mibII.h,v 1.17 2005/05/23 09:03:43 brandt_h Exp $ 30 * 31 * Implementation of the interfaces and IP groups of MIB-II. 32 */ 33#ifndef snmp_mibII_h_ 34#define snmp_mibII_h_ 35 36/* forward declaration */ 37struct mibif; 38 39enum mibif_notify { 40 MIBIF_NOTIFY_DESTROY 41}; 42 43typedef void (*mibif_notify_f)(struct mibif *, enum mibif_notify, void *); 44 45/* 46 * Interfaces. This structure describes one interface as seen in the MIB. 47 * Interfaces are indexed by ifindex. This is not the same as the index 48 * used by the system because of the rules in RFC-2863 section 3.1.5. This 49 * RFC requires, that an ifindex is not to be re-used for ANOTHER dynamically 50 * interfaces once the interface was deleted. The system's ifindex is in 51 * sysindex. Mapping is via the mapping table below. 52 */ 53struct mibif { 54 TAILQ_ENTRY(mibif) link; 55 u_int flags; 56 u_int index; /* the logical ifindex */ 57 u_int sysindex; 58 char name[IFNAMSIZ]; 59 char descr[256]; 60 struct ifmibdata mib; 61 uint64_t mibtick; 62 void *specmib; 63 size_t specmiblen; 64 u_char *physaddr; 65 u_int physaddrlen; 66 int has_connector; 67 int trap_enable; 68 uint64_t counter_disc; 69 70 /* 71 * This is needed to handle interface type specific information 72 * in sub-modules. It contains a function pointer which handles 73 * notifications and a data pointer to arbitrary data. 74 * Should be set via the mibif_notify function. 75 */ 76 mibif_notify_f xnotify; 77 void *xnotify_data; 78 const struct lmodule *xnotify_mod; 79 80 /* to be set by ifType specific modules. This is ifSpecific. */ 81 struct asn_oid spec_oid;
|
82}; 83 84/* 85 * Interface IP-address table. 86 */ 87struct mibifa { 88 TAILQ_ENTRY(mibifa) link; 89 struct in_addr inaddr; 90 struct in_addr inmask; 91 struct in_addr inbcast; 92 struct asn_oid index; /* index for table search */ 93 u_int ifindex; 94 u_int flags; 95}; 96 97/* 98 * Interface receive addresses. Interface link-level multicast, broadcast 99 * and hardware addresses are handled automatically. 100 */ 101struct mibrcvaddr { 102 TAILQ_ENTRY(mibrcvaddr) link; 103 struct asn_oid index; 104 u_int ifindex; 105 u_char addr[ASN_MAXOIDLEN]; 106 size_t addrlen; 107 u_int flags; 108}; 109enum { 110 MIBRCVADDR_VOLATILE = 0x00000001, 111 MIBRCVADDR_BCAST = 0x00000002, 112 MIBRCVADDR_HW = 0x00000004, 113}; 114 115/* network socket */ 116extern int mib_netsock; 117 118/* set an interface name to dynamic mode */ 119void mib_if_set_dyn(const char *); 120 121/* re-read the systems interface list */ 122void mib_refresh_iflist(void); 123 124/* find interface by index */ 125struct mibif *mib_find_if(u_int); 126struct mibif *mib_find_if_sys(u_int); 127struct mibif *mib_find_if_name(const char *); 128 129/* iterate through all interfaces */ 130struct mibif *mib_first_if(void); 131struct mibif *mib_next_if(const struct mibif *); 132 133/* register for interface creations */ 134int mib_register_newif(int (*)(struct mibif *), const struct lmodule *); 135void mib_unregister_newif(const struct lmodule *); 136 137/* get fresh MIB data */ 138int mib_fetch_ifmib(struct mibif *); 139 140/* change the ADMIN status of an interface and refresh the MIB */ 141int mib_if_admin(struct mibif *, int up); 142 143/* find interface address by address */ 144struct mibifa *mib_find_ifa(struct in_addr); 145 146/* find first/next address for a given interface */ 147struct mibifa *mib_first_ififa(const struct mibif *); 148struct mibifa *mib_next_ififa(struct mibifa *); 149 150/* create/delete stacking entries */ 151int mib_ifstack_create(const struct mibif *lower, const struct mibif *upper); 152void mib_ifstack_delete(const struct mibif *lower, const struct mibif *upper); 153 154/* find receive address */ 155struct mibrcvaddr *mib_find_rcvaddr(u_int, const u_char *, size_t); 156 157/* create/delete receive addresses */ 158struct mibrcvaddr *mib_rcvaddr_create(struct mibif *, const u_char *, size_t); 159void mib_rcvaddr_delete(struct mibrcvaddr *); 160 161/* register for interface notification */ 162void *mibif_notify(struct mibif *, const struct lmodule *, mibif_notify_f, 163 void *); 164void mibif_unnotify(void *); 165 166#endif
| 85}; 86 87/* 88 * Interface IP-address table. 89 */ 90struct mibifa { 91 TAILQ_ENTRY(mibifa) link; 92 struct in_addr inaddr; 93 struct in_addr inmask; 94 struct in_addr inbcast; 95 struct asn_oid index; /* index for table search */ 96 u_int ifindex; 97 u_int flags; 98}; 99 100/* 101 * Interface receive addresses. Interface link-level multicast, broadcast 102 * and hardware addresses are handled automatically. 103 */ 104struct mibrcvaddr { 105 TAILQ_ENTRY(mibrcvaddr) link; 106 struct asn_oid index; 107 u_int ifindex; 108 u_char addr[ASN_MAXOIDLEN]; 109 size_t addrlen; 110 u_int flags; 111}; 112enum { 113 MIBRCVADDR_VOLATILE = 0x00000001, 114 MIBRCVADDR_BCAST = 0x00000002, 115 MIBRCVADDR_HW = 0x00000004, 116}; 117 118/* network socket */ 119extern int mib_netsock; 120 121/* set an interface name to dynamic mode */ 122void mib_if_set_dyn(const char *); 123 124/* re-read the systems interface list */ 125void mib_refresh_iflist(void); 126 127/* find interface by index */ 128struct mibif *mib_find_if(u_int); 129struct mibif *mib_find_if_sys(u_int); 130struct mibif *mib_find_if_name(const char *); 131 132/* iterate through all interfaces */ 133struct mibif *mib_first_if(void); 134struct mibif *mib_next_if(const struct mibif *); 135 136/* register for interface creations */ 137int mib_register_newif(int (*)(struct mibif *), const struct lmodule *); 138void mib_unregister_newif(const struct lmodule *); 139 140/* get fresh MIB data */ 141int mib_fetch_ifmib(struct mibif *); 142 143/* change the ADMIN status of an interface and refresh the MIB */ 144int mib_if_admin(struct mibif *, int up); 145 146/* find interface address by address */ 147struct mibifa *mib_find_ifa(struct in_addr); 148 149/* find first/next address for a given interface */ 150struct mibifa *mib_first_ififa(const struct mibif *); 151struct mibifa *mib_next_ififa(struct mibifa *); 152 153/* create/delete stacking entries */ 154int mib_ifstack_create(const struct mibif *lower, const struct mibif *upper); 155void mib_ifstack_delete(const struct mibif *lower, const struct mibif *upper); 156 157/* find receive address */ 158struct mibrcvaddr *mib_find_rcvaddr(u_int, const u_char *, size_t); 159 160/* create/delete receive addresses */ 161struct mibrcvaddr *mib_rcvaddr_create(struct mibif *, const u_char *, size_t); 162void mib_rcvaddr_delete(struct mibrcvaddr *); 163 164/* register for interface notification */ 165void *mibif_notify(struct mibif *, const struct lmodule *, mibif_notify_f, 166 void *); 167void mibif_unnotify(void *); 168 169#endif
|