Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/bsnmp/snmp_mibII/snmp_mibII.h
39478 views
1
/*
2
* Copyright (c) 2001-2003
3
* Fraunhofer Institute for Open Communication Systems (FhG Fokus).
4
* All rights reserved.
5
*
6
* Author: Harti Brandt <[email protected]>
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.18 2006/02/14 09:04:19 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 */
37
struct mibif;
38
39
enum mibif_notify {
40
MIBIF_NOTIFY_DESTROY
41
};
42
43
typedef 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
*/
53
struct 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
char *alias;
84
size_t alias_size;
85
86
/* private data - don't touch */
87
void *private;
88
};
89
90
/*
91
* Interface IP-address table.
92
*/
93
struct mibifa {
94
TAILQ_ENTRY(mibifa) link;
95
struct in_addr inaddr;
96
struct in_addr inmask;
97
struct in_addr inbcast;
98
struct asn_oid index; /* index for table search */
99
u_int ifindex;
100
u_int flags;
101
};
102
103
/*
104
* Interface receive addresses. Interface link-level multicast, broadcast
105
* and hardware addresses are handled automatically.
106
*/
107
struct mibrcvaddr {
108
TAILQ_ENTRY(mibrcvaddr) link;
109
struct asn_oid index;
110
u_int ifindex;
111
u_char addr[ASN_MAXOIDLEN];
112
size_t addrlen;
113
u_int flags;
114
};
115
enum {
116
MIBRCVADDR_VOLATILE = 0x00000001,
117
MIBRCVADDR_BCAST = 0x00000002,
118
MIBRCVADDR_HW = 0x00000004,
119
};
120
121
/* network socket */
122
extern int mib_netsock;
123
124
/* set an interface name to dynamic mode */
125
void mib_if_set_dyn(const char *);
126
127
/* re-read the systems interface list */
128
void mib_refresh_iflist(void);
129
130
/* find interface by index */
131
struct mibif *mib_find_if(u_int);
132
struct mibif *mib_find_if_sys(u_int);
133
struct mibif *mib_find_if_name(const char *);
134
135
/* iterate through all interfaces */
136
struct mibif *mib_first_if(void);
137
struct mibif *mib_next_if(const struct mibif *);
138
139
/* register for interface creations */
140
int mib_register_newif(int (*)(struct mibif *), const struct lmodule *);
141
void mib_unregister_newif(const struct lmodule *);
142
143
/* get fresh MIB data */
144
int mib_fetch_ifmib(struct mibif *);
145
146
/* change the ADMIN status of an interface and refresh the MIB */
147
int mib_if_admin(struct mibif *, int up);
148
149
/* find interface address by address */
150
struct mibifa *mib_find_ifa(struct in_addr);
151
152
/* find first/next address for a given interface */
153
struct mibifa *mib_first_ififa(const struct mibif *);
154
struct mibifa *mib_next_ififa(struct mibifa *);
155
156
/* create/delete stacking entries */
157
int mib_ifstack_create(const struct mibif *lower, const struct mibif *upper);
158
void mib_ifstack_delete(const struct mibif *lower, const struct mibif *upper);
159
160
/* find receive address */
161
struct mibrcvaddr *mib_find_rcvaddr(u_int, const u_char *, size_t);
162
163
/* create/delete receive addresses */
164
struct mibrcvaddr *mib_rcvaddr_create(struct mibif *, const u_char *, size_t);
165
void mib_rcvaddr_delete(struct mibrcvaddr *);
166
167
/* register for interface notification */
168
void *mibif_notify(struct mibif *, const struct lmodule *, mibif_notify_f,
169
void *);
170
void mibif_unnotify(void *);
171
172
#endif
173
174