PageRenderTime 29ms CodeModel.GetById 14ms app.highlight 11ms RepoModel.GetById 1ms app.codeStats 1ms

/contrib/bsnmp/snmp_mibII/snmp_mibII.h

https://bitbucket.org/freebsd/freebsd-head/
C++ Header | 169 lines | 75 code | 24 blank | 70 comment | 0 complexity | e4aba361e9ae399eb949c8788d6b6058 MD5 | raw file
  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.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 */
 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;
 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