Deleted Added
full compact
snmp_mibII.h (146525) snmp_mibII.h (155602)
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 /* private data - don't touch */
84 void *private;
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