xref: /illumos-gate/usr/src/uts/common/inet/mib2.h (revision bd335c6465ddbafe543900df4b03247bfa288eff)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 /* Copyright (c) 1990 Mentat Inc. */
27 
28 #ifndef	_INET_MIB2_H
29 #define	_INET_MIB2_H
30 
31 #pragma ident	"%Z%%M%	%I%	%E% SMI"
32 
33 #include <netinet/in.h>	/* For in6_addr_t */
34 
35 #ifdef	__cplusplus
36 extern "C" {
37 #endif
38 
39 /*
40  * The IPv6 parts of this are derived from:
41  *	RFC 2465
42  *	RFC 2466
43  *	RFC 2452
44  *	RFC 2454
45  */
46 
47 /*
48  * SNMP set/get via M_PROTO T_OPTMGMT_REQ.  Structure is that used
49  * for [gs]etsockopt() calls.  get uses T_CURRENT, set uses T_NEOGTIATE
50  * MGMT_flags value.  The following definition of opthdr is taken from
51  * socket.h:
52  *
53  * An option specification consists of an opthdr, followed by the value of
54  * the option.  An options buffer contains one or more options.  The len
55  * field of opthdr specifies the length of the option value in bytes.  This
56  * length must be a multiple of sizeof(long) (use OPTLEN macro).
57  *
58  * struct opthdr {
59  *	long	level;	protocol level affected
60  *	long	name;	option to modify
61  *	long	len;	length of option value
62  * };
63  *
64  * #define OPTLEN(x) ((((x) + sizeof(long) - 1) / sizeof(long)) * sizeof(long))
65  * #define OPTVAL(opt) ((char *)(opt + 1))
66  *
67  * For get requests (T_NEGOTIATE), any MIB2_xxx value can be used (only
68  * "get all" is supported, so all modules get a copy of the request to
69  * return everything it knows.   Recommend: Use MIB2_IP
70  *
71  * IMPORTANT:  some fields are grouped in a different structure than
72  * suggested by MIB-II, e.g., checksum error counts.  The original MIB-2
73  * field name has been retained.  Field names beginning with "mi" are not
74  * defined in the MIB but contain important & useful information maintained
75  * by the corresponding module.
76  */
77 #ifndef IPPROTO_MAX
78 #define	IPPROTO_MAX	256
79 #endif
80 
81 
82 #define	MIB2_SYSTEM		(IPPROTO_MAX+1)
83 #define	MIB2_INTERFACES		(IPPROTO_MAX+2)
84 #define	MIB2_AT			(IPPROTO_MAX+3)
85 #define	MIB2_IP			(IPPROTO_MAX+4)
86 #define	MIB2_ICMP		(IPPROTO_MAX+5)
87 #define	MIB2_TCP		(IPPROTO_MAX+6)
88 #define	MIB2_UDP		(IPPROTO_MAX+7)
89 #define	MIB2_EGP		(IPPROTO_MAX+8)
90 #define	MIB2_CMOT		(IPPROTO_MAX+9)
91 #define	MIB2_TRANSMISSION	(IPPROTO_MAX+10)
92 #define	MIB2_SNMP		(IPPROTO_MAX+11)
93 #define	MIB2_IP6		(IPPROTO_MAX+12)
94 #define	MIB2_ICMP6		(IPPROTO_MAX+13)
95 #define	MIB2_TCP6		(IPPROTO_MAX+14)
96 #define	MIB2_UDP6		(IPPROTO_MAX+15)
97 #define	MIB2_SCTP		(IPPROTO_MAX+16)
98 
99 /*
100  * Define range of levels for use with MIB2_*
101  */
102 #define	MIB2_RANGE_START	(IPPROTO_MAX+1)
103 #define	MIB2_RANGE_END		(IPPROTO_MAX+16)
104 
105 
106 #define	EXPER			1024	/* experimental - not part of mib */
107 #define	EXPER_IGMP		(EXPER+1)
108 #define	EXPER_DVMRP		(EXPER+2)
109 #define	EXPER_RAWIP		(EXPER+3)
110 
111 /*
112  * Define range of levels for experimental use
113  */
114 #define	EXPER_RANGE_START	(EXPER+1)
115 #define	EXPER_RANGE_END		(EXPER+3)
116 
117 #define	BUMP_MIB(s, x)		{				\
118 	extern void __dtrace_probe___mib_##x(int, void *);	\
119 	void *stataddr = &((s)->x);				\
120 	__dtrace_probe___mib_##x(1, stataddr);			\
121 	(s)->x++;						\
122 }
123 
124 #define	UPDATE_MIB(s, x, y)	{				\
125 	extern void __dtrace_probe___mib_##x(int, void *);	\
126 	void *stataddr = &((s)->x);				\
127 	__dtrace_probe___mib_##x(y, stataddr);			\
128 	(s)->x += (y);						\
129 }
130 
131 #define	SET_MIB(x, y)		x = y
132 #define	BUMP_LOCAL(x)		(x)++
133 #define	UPDATE_LOCAL(x, y)	(x) += (y)
134 
135 #define	OCTET_LENGTH	32	/* Must be at least LIFNAMSIZ */
136 typedef struct Octet_s {
137 	int	o_length;
138 	char	o_bytes[OCTET_LENGTH];
139 } Octet_t;
140 
141 typedef uint32_t	Counter;
142 typedef uint32_t	Counter32;
143 typedef uint64_t	Counter64;
144 typedef uint32_t	Gauge;
145 typedef uint32_t	IpAddress;
146 typedef	struct in6_addr	Ip6Address;
147 typedef Octet_t		DeviceName;
148 typedef Octet_t		PhysAddress;
149 typedef uint32_t	DeviceIndex;	/* Interface index */
150 
151 /*
152  *  IP group
153  */
154 #define	MIB2_IP_ADDR	20	/* ipAddrEntry */
155 #define	MIB2_IP_ROUTE	21	/* ipRouteEntry */
156 #define	MIB2_IP_MEDIA	22	/* ipNetToMediaEntry */
157 #define	MIB2_IP6_ROUTE	23	/* ipv6RouteEntry */
158 #define	MIB2_IP6_MEDIA	24	/* ipv6NetToMediaEntry */
159 #define	MIB2_IP6_ADDR	25	/* ipv6AddrEntry */
160 #define	EXPER_IP_GROUP_MEMBERSHIP	100
161 #define	EXPER_IP6_GROUP_MEMBERSHIP	101
162 #define	EXPER_IP_GROUP_SOURCES		102
163 #define	EXPER_IP6_GROUP_SOURCES		103
164 
165 /* Old names retained for compatibility */
166 #define	MIB2_IP_20	MIB2_IP_ADDR
167 #define	MIB2_IP_21	MIB2_IP_ROUTE
168 #define	MIB2_IP_22	MIB2_IP_MEDIA
169 
170 typedef struct mib2_ip {
171 		/* forwarder?  1 gateway, 2 NOT gateway	{ip 1} RW */
172 	int	ipForwarding;
173 		/* default Time-to-Live for iph		{ip 2} RW */
174 	int	ipDefaultTTL;
175 		/* # of input datagrams			{ip 3} */
176 	Counter	ipInReceives;
177 		/* # of dg discards for iph error	{ip 4} */
178 	Counter	ipInHdrErrors;
179 		/* # of dg discards for bad addr	{ip 5} */
180 	Counter	ipInAddrErrors;
181 		/* # of dg being forwarded		{ip 6} */
182 	Counter	ipForwDatagrams;
183 		/* # of dg discards for unk protocol	{ip 7} */
184 	Counter	ipInUnknownProtos;
185 		/* # of dg discards of good dg's	{ip 8} */
186 	Counter	ipInDiscards;
187 		/* # of dg sent upstream		{ip 9} */
188 	Counter ipInDelivers;
189 		/* # of outdgs recv'd from upstream	{ip 10} */
190 	Counter	ipOutRequests;
191 		/* # of good outdgs discarded		{ip 11} */
192 	Counter ipOutDiscards;
193 		/* # of outdg discards: no route found	{ip 12} */
194 	Counter	ipOutNoRoutes;
195 		/* sec's recv'd frags held for reass.	{ip 13}	*/
196 	int	ipReasmTimeout;
197 		/* # of ip frags needing reassembly	{ip 14} */
198 	Counter	ipReasmReqds;
199 		/* # of dg's reassembled		{ip 15} */
200 	Counter	ipReasmOKs;
201 		/* # of reassembly failures (not dg cnt){ip 16} */
202 	Counter	ipReasmFails;
203 		/* # of dg's fragged			{ip 17} */
204 	Counter	ipFragOKs;
205 		/* # of dg discards for no frag set	{ip 18} */
206 	Counter ipFragFails;
207 		/* # of dg frags from fragmentation	{ip 19} */
208 	Counter	ipFragCreates;
209 		/* {ip 20} */
210 	int	ipAddrEntrySize;
211 		/* {ip 21} */
212 	int	ipRouteEntrySize;
213 		/* {ip 22} */
214 	int	ipNetToMediaEntrySize;
215 		/* # of valid route entries discarded 	{ip 23} */
216 	Counter	ipRoutingDiscards;
217 /*
218  * following defined in MIB-II as part of TCP & UDP groups:
219  */
220 		/* total # of segments recv'd with error	{ tcp 14 } */
221 	Counter	tcpInErrs;
222 		/* # of recv'd dg's not deliverable (no appl.)	{ udp 2 } */
223 	Counter	udpNoPorts;
224 /*
225  * In addition to MIB-II
226  */
227 		/* # of bad IP header checksums */
228 	Counter	ipInCksumErrs;
229 		/* # of complete duplicates in reassembly */
230 	Counter	ipReasmDuplicates;
231 		/* # of partial duplicates in reassembly */
232 	Counter	ipReasmPartDups;
233 		/* # of packets not forwarded due to adminstrative reasons */
234 	Counter	ipForwProhibits;
235 		/* # of UDP packets with bad UDP checksums */
236 	Counter udpInCksumErrs;
237 		/* # of UDP packets droped due to queue overflow */
238 	Counter udpInOverflows;
239 		/*
240 		 * # of RAW IP packets (all IP protocols except UDP, TCP
241 		 * and ICMP) droped due to queue overflow
242 		 */
243 	Counter rawipInOverflows;
244 
245 	/*
246 	 * Folowing are private IPSEC MIB.
247 	 */
248 	/* # of incoming packets that succeeded policy checks */
249 	Counter ipsecInSucceeded;
250 	/* # of incoming packets that failed policy checks */
251 	Counter ipsecInFailed;
252 /* Compatible extensions added here */
253 	int	ipMemberEntrySize;	/* Size of ip_member_t */
254 	int	ipGroupSourceEntrySize;	/* Size of ip_grpsrc_t */
255 
256 		/* # of IPv6 packets received by IPv4 and dropped */
257 	Counter ipInIPv6;
258 		/* # of IPv6 packets transmitted by ip_wput */
259 	Counter ipOutIPv6;
260 		/* # of times ip_wput has switched to become ip_wput_v6 */
261 	Counter ipOutSwitchIPv6;
262 } mib2_ip_t;
263 
264 /*
265  *	ipv6IfStatsEntry OBJECT-TYPE
266  *		SYNTAX     Ipv6IfStatsEntry
267  *		MAX-ACCESS not-accessible
268  *		STATUS     current
269  *		DESCRIPTION
270  *			"An interface statistics entry containing objects
271  *			at a particular IPv6 interface."
272  *		AUGMENTS { ipv6IfEntry }
273  *		::= { ipv6IfStatsTable 1 }
274  *
275  * Per-interface IPv6 statistics table
276  */
277 
278 typedef struct mib2_ipv6IfStatsEntry {
279 	/* Local ifindex to identify the interface */
280 	DeviceIndex	ipv6IfIndex;
281 
282 		/* forwarder?  1 gateway, 2 NOT gateway	{ipv6MIBObjects 1} RW */
283 	int	ipv6Forwarding;
284 		/* default Hoplimit for IPv6		{ipv6MIBObjects 2} RW */
285 	int	ipv6DefaultHopLimit;
286 
287 	int	ipv6IfStatsEntrySize;
288 	int	ipv6AddrEntrySize;
289 	int	ipv6RouteEntrySize;
290 	int	ipv6NetToMediaEntrySize;
291 	int	ipv6MemberEntrySize;		/* Size of ipv6_member_t */
292 	int	ipv6GroupSourceEntrySize;	/* Size of ipv6_grpsrc_t */
293 
294 	/* # input datagrams (incl errors)	{ ipv6IfStatsEntry 1 } */
295 	Counter	ipv6InReceives;
296 	/* # errors in IPv6 headers and options	{ ipv6IfStatsEntry 2 } */
297 	Counter	ipv6InHdrErrors;
298 	/* # exceeds outgoing link MTU		{ ipv6IfStatsEntry 3 } */
299 	Counter	ipv6InTooBigErrors;
300 	/* # discarded due to no route to dest 	{ ipv6IfStatsEntry 4 } */
301 	Counter	ipv6InNoRoutes;
302 	/* # invalid or unsupported addresses	{ ipv6IfStatsEntry 5 } */
303 	Counter	ipv6InAddrErrors;
304 	/* # unknown next header 		{ ipv6IfStatsEntry 6 } */
305 	Counter	ipv6InUnknownProtos;
306 	/* # too short packets			{ ipv6IfStatsEntry 7 } */
307 	Counter	ipv6InTruncatedPkts;
308 	/* # discarded e.g. due to no buffers	{ ipv6IfStatsEntry 8 } */
309 	Counter	ipv6InDiscards;
310 	/* # delivered to upper layer protocols	{ ipv6IfStatsEntry 9 } */
311 	Counter	ipv6InDelivers;
312 	/* # forwarded out interface		{ ipv6IfStatsEntry 10 } */
313 	Counter	ipv6OutForwDatagrams;
314 	/* # originated out interface		{ ipv6IfStatsEntry 11 } */
315 	Counter	ipv6OutRequests;
316 	/* # discarded e.g. due to no buffers	{ ipv6IfStatsEntry 12 } */
317 	Counter	ipv6OutDiscards;
318 	/* # sucessfully fragmented packets	{ ipv6IfStatsEntry 13 } */
319 	Counter	ipv6OutFragOKs;
320 	/* # fragmentation failed		{ ipv6IfStatsEntry 14 } */
321 	Counter	ipv6OutFragFails;
322 	/* # fragments created			{ ipv6IfStatsEntry 15 } */
323 	Counter	ipv6OutFragCreates;
324 	/* # fragments to reassemble		{ ipv6IfStatsEntry 16 } */
325 	Counter	ipv6ReasmReqds;
326 	/* # packets after reassembly		{ ipv6IfStatsEntry 17 } */
327 	Counter	ipv6ReasmOKs;
328 	/* # reassembly failed			{ ipv6IfStatsEntry 18 } */
329 	Counter	ipv6ReasmFails;
330 	/* # received multicast packets		{ ipv6IfStatsEntry 19 } */
331 	Counter	ipv6InMcastPkts;
332 	/* # transmitted multicast packets	{ ipv6IfStatsEntry 20 } */
333 	Counter	ipv6OutMcastPkts;
334 /*
335  * In addition to defined MIBs
336  */
337 		/* # discarded due to no route to dest */
338 	Counter	ipv6OutNoRoutes;
339 		/* # of complete duplicates in reassembly */
340 	Counter	ipv6ReasmDuplicates;
341 		/* # of partial duplicates in reassembly */
342 	Counter	ipv6ReasmPartDups;
343 		/* # of packets not forwarded due to adminstrative reasons */
344 	Counter	ipv6ForwProhibits;
345 		/* # of UDP packets with bad UDP checksums */
346 	Counter udpInCksumErrs;
347 		/* # of UDP packets droped due to queue overflow */
348 	Counter udpInOverflows;
349 		/*
350 		 * # of RAW IPv6 packets (all IPv6 protocols except UDP, TCP
351 		 * and ICMPv6) droped due to queue overflow
352 		 */
353 	Counter rawipInOverflows;
354 
355 		/* # of IPv4 packets received by IPv6 and dropped */
356 	Counter ipv6InIPv4;
357 		/* # of IPv4 packets transmitted by ip_wput_wput */
358 	Counter ipv6OutIPv4;
359 		/* # of times ip_wput_v6 has switched to become ip_wput */
360 	Counter ipv6OutSwitchIPv4;
361 } mib2_ipv6IfStatsEntry_t;
362 
363 /*
364  * The IP address table contains this entity's IP addressing information.
365  *
366  *	ipAddrTable OBJECT-TYPE
367  *		SYNTAX  SEQUENCE OF IpAddrEntry
368  *		ACCESS  not-accessible
369  *		STATUS  mandatory
370  *		DESCRIPTION
371  *			"The table of addressing information relevant to
372  *			this entity's IP addresses."
373  *		::= { ip 20 }
374  */
375 
376 typedef struct mib2_ipAddrEntry {
377 			/* IP address of this entry	{ipAddrEntry 1} */
378 	IpAddress	ipAdEntAddr;
379 			/* Unique interface index	{ipAddrEntry 2} */
380 	DeviceName	ipAdEntIfIndex;
381 			/* Subnet mask for this IP addr	{ipAddrEntry 3} */
382 	IpAddress	ipAdEntNetMask;
383 			/* 2^lsb of IP broadcast addr	{ipAddrEntry 4} */
384 	int		ipAdEntBcastAddr;
385 			/* max size for dg reassembly	{ipAddrEntry 5} */
386 	int		ipAdEntReasmMaxSize;
387 			/* additional ipif_t fields */
388 	struct ipAdEntInfo_s {
389 		Gauge		ae_mtu;
390 				/* BSD if metric */
391 		int		ae_metric;
392 				/* ipif broadcast addr.  relation to above?? */
393 		IpAddress	ae_broadcast_addr;
394 				/* point-point dest addr */
395 		IpAddress	ae_pp_dst_addr;
396 		int		ae_flags;	/* IFF_* flags in if.h */
397 		Counter		ae_ibcnt;	/* Inbound packets */
398 		Counter		ae_obcnt;	/* Outbound packets */
399 		Counter		ae_focnt;	/* Forwarded packets */
400 		IpAddress	ae_subnet;	/* Subnet prefix */
401 		int		ae_subnet_len;	/* Subnet prefix length */
402 		IpAddress	ae_src_addr;	/* Source address */
403 	}		ipAdEntInfo;
404 } mib2_ipAddrEntry_t;
405 
406 /*
407  *	ipv6AddrTable OBJECT-TYPE
408  *		SYNTAX      SEQUENCE OF Ipv6AddrEntry
409  *		MAX-ACCESS  not-accessible
410  *		STATUS      current
411  *		DESCRIPTION
412  *			"The table of addressing information relevant to
413  *			this node's interface addresses."
414  *		::= { ipv6MIBObjects 8 }
415  */
416 
417 typedef struct mib2_ipv6AddrEntry {
418 	/* Unique interface index			{ Part of INDEX } */
419 	DeviceName	ipv6AddrIfIndex;
420 
421 	/* IPv6 address of this entry			{ ipv6AddrEntry 1 } */
422 	Ip6Address	ipv6AddrAddress;
423 	/* Prefix length				{ ipv6AddrEntry 2 } */
424 	uint_t		ipv6AddrPfxLength;
425 	/* Type: stateless(1), stateful(2), unknown(3)	{ ipv6AddrEntry 3 } */
426 	uint_t		ipv6AddrType;
427 	/* Anycast: true(1), false(2)			{ ipv6AddrEntry 4 } */
428 	uint_t		ipv6AddrAnycastFlag;
429 	/*
430 	 * Address status: preferred(1), deprecated(2), invalid(3),
431 	 * inaccessible(4), unknown(5)			{ ipv6AddrEntry 5 }
432 	 */
433 	uint_t		ipv6AddrStatus;
434 	struct ipv6AddrInfo_s {
435 		Gauge		ae_mtu;
436 				/* BSD if metric */
437 		int		ae_metric;
438 				/* point-point dest addr */
439 		Ip6Address	ae_pp_dst_addr;
440 		int		ae_flags;	/* IFF_* flags in if.h */
441 		Counter		ae_ibcnt;	/* Inbound packets */
442 		Counter		ae_obcnt;	/* Outbound packets */
443 		Counter		ae_focnt;	/* Forwarded packets */
444 		Ip6Address	ae_subnet;	/* Subnet prefix */
445 		int		ae_subnet_len;	/* Subnet prefix length */
446 		Ip6Address	ae_src_addr;	/* Source address */
447 	}		ipv6AddrInfo;
448 } mib2_ipv6AddrEntry_t;
449 
450 
451 /*
452  * The IP routing table contains an entry for each route presently known to
453  * this entity. (for IPv4 routes)
454  *
455  *	ipRouteTable OBJECT-TYPE
456  *		SYNTAX  SEQUENCE OF IpRouteEntry
457  *		ACCESS  not-accessible
458  *		STATUS  mandatory
459  *		DESCRIPTION
460  *			"This entity's IP Routing table."
461  *		::= { ip 21 }
462  */
463 
464 typedef struct mib2_ipRouteEntry {
465 		/* dest ip addr for this route		{ipRouteEntry 1 } RW */
466 	IpAddress	ipRouteDest;
467 		/* unique interface index for this hop	{ipRouteEntry 2 } RW */
468 	DeviceName	ipRouteIfIndex;
469 		/* primary route metric 		{ipRouteEntry 3 } RW */
470 	int		ipRouteMetric1;
471 		/* alternate route metric 		{ipRouteEntry 4 } RW */
472 	int		ipRouteMetric2;
473 		/* alternate route metric 		{ipRouteEntry 5 } RW */
474 	int		ipRouteMetric3;
475 		/* alternate route metric 		{ipRouteEntry 6 } RW */
476 	int		ipRouteMetric4;
477 		/* ip addr of next hop on this route	{ipRouteEntry 7 } RW */
478 	IpAddress	ipRouteNextHop;
479 		/* other(1), inval(2), dir(3), indir(4)	{ipRouteEntry 8 } RW */
480 	int		ipRouteType;
481 		/* mechanism by which route was learned	{ipRouteEntry 9 } */
482 	int		ipRouteProto;
483 		/* sec's since last update of route	{ipRouteEntry 10} RW */
484 	int		ipRouteAge;
485 		/* 					{ipRouteEntry 11} RW */
486 	IpAddress	ipRouteMask;
487 		/* alternate route metric 		{ipRouteEntry 12} RW */
488 	int		ipRouteMetric5;
489 		/* additional info from ire's		{ipRouteEntry 13 } */
490 	struct ipRouteInfo_s {
491 		Gauge		re_max_frag;
492 		Gauge		re_rtt;
493 		Counter		re_ref;
494 		int		re_frag_flag;
495 		IpAddress	re_src_addr;
496 		int		re_ire_type;
497 		Counter		re_obpkt;
498 		Counter		re_ibpkt;
499 		int		re_flags;
500 		DeviceName	re_in_ill;	/* Input interface */
501 		IpAddress	re_in_src_addr;	/* Input source address */
502 	} 		ipRouteInfo;
503 } mib2_ipRouteEntry_t;
504 
505 /*
506  * The IPv6 routing table contains an entry for each route presently known to
507  * this entity.
508  *
509  *	ipv6RouteTable OBJECT-TYPE
510  *		SYNTAX  SEQUENCE OF IpRouteEntry
511  *		ACCESS  not-accessible
512  *		STATUS  current
513  *		DESCRIPTION
514  *			"IPv6 Routing table. This table contains
515  *			an entry for each valid IPv6 unicast route
516  *			that can be used for packet forwarding
517  *			determination."
518  *		::= { ipv6MIBObjects 11 }
519  */
520 
521 typedef struct mib2_ipv6RouteEntry {
522 		/* dest ip addr for this route		{ ipv6RouteEntry 1 } */
523 	Ip6Address	ipv6RouteDest;
524 		/* prefix length 			{ ipv6RouteEntry 2 } */
525 	int		ipv6RoutePfxLength;
526 		/* unique route index 			{ ipv6RouteEntry 3 } */
527 	unsigned	ipv6RouteIndex;
528 		/* unique interface index for this hop	{ ipv6RouteEntry 4 } */
529 	DeviceName	ipv6RouteIfIndex;
530 		/* IPv6 addr of next hop on this route	{ ipv6RouteEntry 5 } */
531 	Ip6Address	ipv6RouteNextHop;
532 		/* other(1), discard(2), local(3), remote(4) */
533 		/* 					{ ipv6RouteEntry 6 } */
534 	int		ipv6RouteType;
535 		/* mechanism by which route was learned	{ ipv6RouteEntry 7 } */
536 		/*
537 		 * other(1), local(2), netmgmt(3), ndisc(4), rip(5), ospf(6),
538 		 * bgp(7), idrp(8), igrp(9)
539 		 */
540 	int		ipv6RouteProtocol;
541 		/* policy hook or traffic class		{ ipv6RouteEntry 8 } */
542 	unsigned	ipv6RoutePolicy;
543 		/* sec's since last update of route	{ ipv6RouteEntry 9} */
544 	int		ipv6RouteAge;
545 		/* Routing domain ID of the next hop	{ ipv6RouteEntry 10 } */
546 	unsigned	ipv6RouteNextHopRDI;
547 		/* route metric				{ ipv6RouteEntry 11 } */
548 	unsigned	ipv6RouteMetric;
549 		/* preference (impl specific)		{ ipv6RouteEntry 12 } */
550 	unsigned	ipv6RouteWeight;
551 		/* additional info from ire's		{ } */
552 	struct ipv6RouteInfo_s {
553 		Gauge		re_max_frag;
554 		Gauge		re_rtt;
555 		Counter		re_ref;
556 		int		re_frag_flag;
557 		Ip6Address	re_src_addr;
558 		int		re_ire_type;
559 		Counter		re_obpkt;
560 		Counter		re_ibpkt;
561 		int		re_flags;
562 	} 		ipv6RouteInfo;
563 } mib2_ipv6RouteEntry_t;
564 
565 
566 /*
567  * The IP address translation table contain the IpAddress to
568  * `physical' address equivalences.  Some interfaces do not
569  * use translation tables for determining address
570  * equivalences (e.g., DDN-X.25 has an algorithmic method);
571  * if all interfaces are of this type, then the Address
572  * Translation table is empty, i.e., has zero entries.
573  *
574  *	ipNetToMediaTable OBJECT-TYPE
575  *		SYNTAX  SEQUENCE OF IpNetToMediaEntry
576  *		ACCESS  not-accessible
577  *		STATUS  mandatory
578  *		DESCRIPTION
579  *			"The IP Address Translation table used for mapping
580  *			from IP addresses to physical addresses."
581  *		::= { ip 22 }
582  */
583 
584 typedef struct mib2_ipNetToMediaEntry {
585 	/* Unique interface index		{ ipNetToMediaEntry 1 } RW */
586 	DeviceName	ipNetToMediaIfIndex;
587 	/* Media dependent physical addr	{ ipNetToMediaEntry 2 } RW */
588 	PhysAddress	ipNetToMediaPhysAddress;
589 	/* ip addr for this physical addr	{ ipNetToMediaEntry 3 } RW */
590 	IpAddress	ipNetToMediaNetAddress;
591 	/* other(1), inval(2), dyn(3), stat(4)	{ ipNetToMediaEntry 4 } RW */
592 	int		ipNetToMediaType;
593 	struct ipNetToMediaInfo_s {
594 		PhysAddress	ntm_mask;	/* subnet mask for entry */
595 		int		ntm_flags;	/* ACE_F_* flags in arp.h */
596 	}		ipNetToMediaInfo;
597 } mib2_ipNetToMediaEntry_t;
598 
599 /*
600  *	ipv6NetToMediaTable OBJECT-TYPE
601  *		 SYNTAX      SEQUENCE OF Ipv6NetToMediaEntry
602  *		 MAX-ACCESS  not-accessible
603  *		 STATUS      current
604  *		 DESCRIPTION
605  *			"The IPv6 Address Translation table used for
606  *			mapping from IPv6 addresses to physical addresses.
607  *
608  *			The IPv6 address translation table contain the
609  *			Ipv6Address to `physical' address equivalencies.
610  *			Some interfaces do not use translation tables
611  *			for determining address equivalencies; if all
612  *			interfaces are of this type, then the Address
613  *			Translation table is empty, i.e., has zero
614  *			entries."
615  *		::= { ipv6MIBObjects 12 }
616  */
617 
618 typedef struct mib2_ipv6NetToMediaEntry {
619 	/* Unique interface index		{ Part of INDEX } */
620 	DeviceIndex	ipv6NetToMediaIfIndex;
621 
622 	/* ip addr for this physical addr	{ ipv6NetToMediaEntry 1 } */
623 	Ip6Address	ipv6NetToMediaNetAddress;
624 	/* Media dependent physical addr	{ ipv6NetToMediaEntry 2 } */
625 	PhysAddress	ipv6NetToMediaPhysAddress;
626 	/*
627 	 * Type of mapping
628 	 * other(1), dynamic(2), static(3), local(4)
629 	 *					{ ipv6NetToMediaEntry 3 }
630 	 */
631 	int		ipv6NetToMediaType;
632 	/*
633 	 * NUD state
634 	 * reachable(1), stale(2), delay(3), probe(4), invalid(5), unknown(6)
635 	 * Note: The kernel returns ND_* states.
636 	 *					{ ipv6NetToMediaEntry 4 }
637 	 */
638 	int		ipv6NetToMediaState;
639 	/* sysUpTime last time entry was updated { ipv6NetToMediaEntry 5 } */
640 	int		ipv6NetToMediaLastUpdated;
641 } mib2_ipv6NetToMediaEntry_t;
642 
643 
644 /*
645  * List of group members per interface
646  */
647 typedef struct ip_member {
648 	/* Interface index */
649 	DeviceName	ipGroupMemberIfIndex;
650 	/* IP Multicast address */
651 	IpAddress	ipGroupMemberAddress;
652 	/* Number of member sockets */
653 	Counter		ipGroupMemberRefCnt;
654 	/* Filter mode: 1 => include, 2 => exclude */
655 	int		ipGroupMemberFilterMode;
656 } ip_member_t;
657 
658 
659 /*
660  * List of IPv6 group members per interface
661  */
662 typedef struct ipv6_member {
663 	/* Interface index */
664 	DeviceIndex	ipv6GroupMemberIfIndex;
665 	/* IP Multicast address */
666 	Ip6Address	ipv6GroupMemberAddress;
667 	/* Number of member sockets */
668 	Counter		ipv6GroupMemberRefCnt;
669 	/* Filter mode: 1 => include, 2 => exclude */
670 	int		ipv6GroupMemberFilterMode;
671 } ipv6_member_t;
672 
673 
674 /*
675  * List of IPv4 source addresses being filtered per interface
676  */
677 typedef struct ip_grpsrc {
678 	/* Interface index */
679 	DeviceName	ipGroupSourceIfIndex;
680 	/* IP Multicast address */
681 	IpAddress	ipGroupSourceGroup;
682 	/* IP Source address */
683 	IpAddress	ipGroupSourceAddress;
684 } ip_grpsrc_t;
685 
686 
687 /*
688  * List of IPv6 source addresses being filtered per interface
689  */
690 typedef struct ipv6_grpsrc {
691 	/* Interface index */
692 	DeviceIndex	ipv6GroupSourceIfIndex;
693 	/* IP Multicast address */
694 	Ip6Address	ipv6GroupSourceGroup;
695 	/* IP Source address */
696 	Ip6Address	ipv6GroupSourceAddress;
697 } ipv6_grpsrc_t;
698 
699 
700 /*
701  * ICMP Group
702  */
703 typedef struct mib2_icmp {
704 	/* total # of recv'd ICMP msgs			{ icmp 1 } */
705 	Counter	icmpInMsgs;
706 	/* recv'd ICMP msgs with errors			{ icmp 2 } */
707 	Counter	icmpInErrors;
708 	/* recv'd "dest unreachable" msg's		{ icmp 3 } */
709 	Counter	icmpInDestUnreachs;
710 	/* recv'd "time exceeded" msg's			{ icmp 4 } */
711 	Counter	icmpInTimeExcds;
712 	/* recv'd "parameter problem" msg's		{ icmp 5 } */
713 	Counter	icmpInParmProbs;
714 	/* recv'd "source quench" msg's			{ icmp 6 } */
715 	Counter	icmpInSrcQuenchs;
716 	/* recv'd "ICMP redirect" msg's			{ icmp 7 } */
717 	Counter	icmpInRedirects;
718 	/* recv'd "echo request" msg's			{ icmp 8 } */
719 	Counter	icmpInEchos;
720 	/* recv'd "echo reply" msg's			{ icmp 9 } */
721 	Counter	icmpInEchoReps;
722 	/* recv'd "timestamp" msg's			{ icmp 10 } */
723 	Counter	icmpInTimestamps;
724 	/* recv'd "timestamp reply" msg's		{ icmp 11 } */
725 	Counter	icmpInTimestampReps;
726 	/* recv'd "address mask request" msg's		{ icmp 12 } */
727 	Counter	icmpInAddrMasks;
728 	/* recv'd "address mask reply" msg's		{ icmp 13 } */
729 	Counter	icmpInAddrMaskReps;
730 	/* total # of sent ICMP msg's			{ icmp 14 } */
731 	Counter	icmpOutMsgs;
732 	/* # of msg's not sent for internal icmp errors	{ icmp 15 } */
733 	Counter	icmpOutErrors;
734 	/* # of "dest unreachable" msg's sent		{ icmp 16 } */
735 	Counter	icmpOutDestUnreachs;
736 	/* # of "time exceeded" msg's sent		{ icmp 17 } */
737 	Counter	icmpOutTimeExcds;
738 	/* # of "parameter problme" msg's sent		{ icmp 18 } */
739 	Counter	icmpOutParmProbs;
740 	/* # of "source quench" msg's sent		{ icmp 19 } */
741 	Counter	icmpOutSrcQuenchs;
742 	/* # of "ICMP redirect" msg's sent		{ icmp 20 } */
743 	Counter	icmpOutRedirects;
744 	/* # of "Echo request" msg's sent		{ icmp 21 } */
745 	Counter	icmpOutEchos;
746 	/* # of "Echo reply" msg's sent			{ icmp 22 } */
747 	Counter	icmpOutEchoReps;
748 	/* # of "timestamp request" msg's sent		{ icmp 23 } */
749 	Counter	icmpOutTimestamps;
750 	/* # of "timestamp reply" msg's sent		{ icmp 24 } */
751 	Counter	icmpOutTimestampReps;
752 	/* # of "address mask request" msg's sent	{ icmp 25 } */
753 	Counter	icmpOutAddrMasks;
754 	/* # of "address mask reply" msg's sent		{ icmp 26 } */
755 	Counter	icmpOutAddrMaskReps;
756 /*
757  * In addition to MIB-II
758  */
759 	/* # of received packets with checksum errors */
760 	Counter	icmpInCksumErrs;
761 	/* # of received packets with unknow codes */
762 	Counter	icmpInUnknowns;
763 	/* # of received unreachables with "fragmentation needed" */
764 	Counter	icmpInFragNeeded;
765 	/* # of sent unreachables with "fragmentation needed" */
766 	Counter	icmpOutFragNeeded;
767 	/*
768 	 * # of msg's not sent since original packet was broadcast/multicast
769 	 * or an ICMP error packet
770 	 */
771 	Counter	icmpOutDrops;
772 	/* # of ICMP packets droped due to queue overflow */
773 	Counter icmpInOverflows;
774 	/* recv'd "ICMP redirect" msg's	that are bad thus ignored */
775 	Counter	icmpInBadRedirects;
776 } mib2_icmp_t;
777 
778 
779 /*
780  *	ipv6IfIcmpEntry OBJECT-TYPE
781  *		SYNTAX      Ipv6IfIcmpEntry
782  *		MAX-ACCESS  not-accessible
783  *		STATUS      current
784  *		DESCRIPTION
785  *			"An ICMPv6 statistics entry containing
786  *			objects at a particular IPv6 interface.
787  *
788  *			Note that a receiving interface is
789  *			the interface to which a given ICMPv6 message
790  *			is addressed which may not be necessarily
791  *			the input interface for the message.
792  *
793  *			Similarly, the sending interface is
794  *			the interface that sources a given
795  *			ICMP message which is usually but not
796  *			necessarily the output interface for the message."
797  *		AUGMENTS { ipv6IfEntry }
798  *		::= { ipv6IfIcmpTable 1 }
799  *
800  * Per-interface ICMPv6 statistics table
801  */
802 
803 typedef struct mib2_ipv6IfIcmpEntry {
804 	/* Local ifindex to identify the interface */
805 	DeviceIndex	ipv6IfIcmpIfIndex;
806 
807 	int		ipv6IfIcmpEntrySize;	/* Size of ipv6IfIcmpEntry */
808 
809 	/* The total # ICMP msgs rcvd includes ipv6IfIcmpInErrors */
810 	Counter32	ipv6IfIcmpInMsgs;
811 	/* # ICMP with ICMP-specific errors (bad checkum, length, etc) */
812 	Counter32	ipv6IfIcmpInErrors;
813 	/* # ICMP Destination Unreachable */
814 	Counter32	ipv6IfIcmpInDestUnreachs;
815 	/* # ICMP destination unreachable/communication admin prohibited */
816 	Counter32	ipv6IfIcmpInAdminProhibs;
817 	Counter32	ipv6IfIcmpInTimeExcds;
818 	Counter32	ipv6IfIcmpInParmProblems;
819 	Counter32	ipv6IfIcmpInPktTooBigs;
820 	Counter32	ipv6IfIcmpInEchos;
821 	Counter32	ipv6IfIcmpInEchoReplies;
822 	Counter32	ipv6IfIcmpInRouterSolicits;
823 	Counter32	ipv6IfIcmpInRouterAdvertisements;
824 	Counter32	ipv6IfIcmpInNeighborSolicits;
825 	Counter32	ipv6IfIcmpInNeighborAdvertisements;
826 	Counter32	ipv6IfIcmpInRedirects;
827 	Counter32	ipv6IfIcmpInGroupMembQueries;
828 	Counter32	ipv6IfIcmpInGroupMembResponses;
829 	Counter32	ipv6IfIcmpInGroupMembReductions;
830 	/* Total # ICMP messages attempted to send (includes OutErrors) */
831 	Counter32	ipv6IfIcmpOutMsgs;
832 	/* # ICMP messages not sent due to ICMP problems (e.g. no buffers) */
833 	Counter32	ipv6IfIcmpOutErrors;
834 	Counter32	ipv6IfIcmpOutDestUnreachs;
835 	Counter32	ipv6IfIcmpOutAdminProhibs;
836 	Counter32	ipv6IfIcmpOutTimeExcds;
837 	Counter32	ipv6IfIcmpOutParmProblems;
838 	Counter32	ipv6IfIcmpOutPktTooBigs;
839 	Counter32	ipv6IfIcmpOutEchos;
840 	Counter32	ipv6IfIcmpOutEchoReplies;
841 	Counter32	ipv6IfIcmpOutRouterSolicits;
842 	Counter32	ipv6IfIcmpOutRouterAdvertisements;
843 	Counter32	ipv6IfIcmpOutNeighborSolicits;
844 	Counter32	ipv6IfIcmpOutNeighborAdvertisements;
845 	Counter32	ipv6IfIcmpOutRedirects;
846 	Counter32	ipv6IfIcmpOutGroupMembQueries;
847 	Counter32	ipv6IfIcmpOutGroupMembResponses;
848 	Counter32	ipv6IfIcmpOutGroupMembReductions;
849 /* Additions beyond the MIB */
850 	Counter32	ipv6IfIcmpInOverflows;
851 	/* recv'd "ICMPv6 redirect" msg's that are bad thus ignored */
852 	Counter32	ipv6IfIcmpBadHoplimit;
853 	Counter32	ipv6IfIcmpInBadNeighborAdvertisements;
854 	Counter32	ipv6IfIcmpInBadNeighborSolicitations;
855 	Counter32	ipv6IfIcmpInBadRedirects;
856 	Counter32	ipv6IfIcmpInGroupMembTotal;
857 	Counter32	ipv6IfIcmpInGroupMembBadQueries;
858 	Counter32	ipv6IfIcmpInGroupMembBadReports;
859 	Counter32	ipv6IfIcmpInGroupMembOurReports;
860 } mib2_ipv6IfIcmpEntry_t;
861 
862 /*
863  * the TCP group
864  *
865  * Note that instances of object types that represent
866  * information about a particular TCP connection are
867  * transient; they persist only as long as the connection
868  * in question.
869  */
870 #define	MIB2_TCP_CONN	13	/* tcpConnEntry */
871 #define	MIB2_TCP6_CONN	14	/* tcp6ConnEntry */
872 
873 /* Old name retained for compatibility */
874 #define	MIB2_TCP_13	MIB2_TCP_CONN
875 
876 typedef struct mib2_tcp {
877 		/* algorithm used for transmit timeout value	{ tcp 1 } */
878 	int	tcpRtoAlgorithm;
879 		/* minimum retransmit timeout (ms)		{ tcp 2 } */
880 	int	tcpRtoMin;
881 		/* maximum retransmit timeout (ms)		{ tcp 3 } */
882 	int	tcpRtoMax;
883 		/* maximum # of connections supported		{ tcp 4 } */
884 	int	tcpMaxConn;
885 		/* # of direct transitions CLOSED -> SYN-SENT	{ tcp 5 } */
886 	Counter	tcpActiveOpens;
887 		/* # of direct transitions LISTEN -> SYN-RCVD	{ tcp 6 } */
888 	Counter	tcpPassiveOpens;
889 		/* # of direct SIN-SENT/RCVD -> CLOSED/LISTEN	{ tcp 7 } */
890 	Counter	tcpAttemptFails;
891 		/* # of direct ESTABLISHED/CLOSE-WAIT -> CLOSED	{ tcp 8 } */
892 	Counter	tcpEstabResets;
893 		/* # of connections ESTABLISHED or CLOSE-WAIT	{ tcp 9 } */
894 	Gauge	tcpCurrEstab;
895 		/* total # of segments recv'd			{ tcp 10 } */
896 	Counter	tcpInSegs;
897 		/* total # of segments sent			{ tcp 11 } */
898 	Counter	tcpOutSegs;
899 		/* total # of segments retransmitted		{ tcp 12 } */
900 	Counter	tcpRetransSegs;
901 		/* {tcp 13} */
902 	int	tcpConnTableSize;	/* Size of tcpConnEntry_t */
903 	/* in ip				{tcp 14} */
904 		/* # of segments sent with RST flag		{ tcp 15 } */
905 	Counter	tcpOutRsts;
906 /* In addition to MIB-II */
907 /* Sender */
908 	/* total # of data segments sent */
909 	Counter tcpOutDataSegs;
910 	/* total # of bytes in data segments sent */
911 	Counter tcpOutDataBytes;
912 	/* total # of bytes in segments retransmitted */
913 	Counter tcpRetransBytes;
914 	/* total # of acks sent */
915 	Counter tcpOutAck;
916 	/* total # of delayed acks sent */
917 	Counter tcpOutAckDelayed;
918 	/* total # of segments sent with the urg flag on */
919 	Counter tcpOutUrg;
920 	/* total # of window updates sent */
921 	Counter tcpOutWinUpdate;
922 	/* total # of zero window probes sent */
923 	Counter tcpOutWinProbe;
924 	/* total # of control segments sent (syn, fin, rst) */
925 	Counter tcpOutControl;
926 	/* total # of segments sent due to "fast retransmit" */
927 	Counter tcpOutFastRetrans;
928 /* Receiver */
929 	/* total # of ack segments received */
930 	Counter tcpInAckSegs;
931 	/* total # of bytes acked */
932 	Counter tcpInAckBytes;
933 	/* total # of duplicate acks */
934 	Counter tcpInDupAck;
935 	/* total # of acks acking unsent data */
936 	Counter tcpInAckUnsent;
937 	/* total # of data segments received in order */
938 	Counter tcpInDataInorderSegs;
939 	/* total # of data bytes received in order */
940 	Counter tcpInDataInorderBytes;
941 	/* total # of data segments received out of order */
942 	Counter tcpInDataUnorderSegs;
943 	/* total # of data bytes received out of order */
944 	Counter tcpInDataUnorderBytes;
945 	/* total # of complete duplicate data segments received */
946 	Counter tcpInDataDupSegs;
947 	/* total # of bytes in the complete duplicate data segments received */
948 	Counter tcpInDataDupBytes;
949 	/* total # of partial duplicate data segments received */
950 	Counter tcpInDataPartDupSegs;
951 	/* total # of bytes in the partial duplicate data segments received */
952 	Counter tcpInDataPartDupBytes;
953 	/* total # of data segments received past the window */
954 	Counter tcpInDataPastWinSegs;
955 	/* total # of data bytes received part the window */
956 	Counter tcpInDataPastWinBytes;
957 	/* total # of zero window probes received */
958 	Counter tcpInWinProbe;
959 	/* total # of window updates received */
960 	Counter tcpInWinUpdate;
961 	/* total # of data segments received after the connection has closed */
962 	Counter tcpInClosed;
963 /* Others */
964 	/* total # of failed attempts to update the rtt estimate */
965 	Counter tcpRttNoUpdate;
966 	/* total # of successful attempts to update the rtt estimate */
967 	Counter tcpRttUpdate;
968 	/* total # of retransmit timeouts */
969 	Counter tcpTimRetrans;
970 	/* total # of retransmit timeouts dropping the connection */
971 	Counter tcpTimRetransDrop;
972 	/* total # of keepalive timeouts */
973 	Counter tcpTimKeepalive;
974 	/* total # of keepalive timeouts sending a probe */
975 	Counter tcpTimKeepaliveProbe;
976 	/* total # of keepalive timeouts dropping the connection */
977 	Counter tcpTimKeepaliveDrop;
978 	/* total # of connections refused due to backlog full on listen */
979 	Counter tcpListenDrop;
980 	/* total # of connections refused due to half-open queue (q0) full */
981 	Counter tcpListenDropQ0;
982 	/* total # of connections dropped from a full half-open queue (q0) */
983 	Counter tcpHalfOpenDrop;
984 	/* total # of retransmitted segments by SACK retransmission */
985 	Counter	tcpOutSackRetransSegs;
986 
987 	int	tcp6ConnTableSize;	/* Size of tcp6ConnEntry_t */
988 } mib2_tcp_t;
989 
990 /*
991  * The TCP/IPv4 connection table {tcp 13} contains information about this
992  * entity's existing TCP connections over IPv4.
993  */
994 /* For tcpConnState and tcp6ConnState */
995 #define	MIB2_TCP_closed		1
996 #define	MIB2_TCP_listen		2
997 #define	MIB2_TCP_synSent	3
998 #define	MIB2_TCP_synReceived	4
999 #define	MIB2_TCP_established	5
1000 #define	MIB2_TCP_finWait1	6
1001 #define	MIB2_TCP_finWait2	7
1002 #define	MIB2_TCP_closeWait	8
1003 #define	MIB2_TCP_lastAck	9
1004 #define	MIB2_TCP_closing	10
1005 #define	MIB2_TCP_timeWait	11
1006 #define	MIB2_TCP_deleteTCB	12		/* only writeable value */
1007 
1008 typedef struct mib2_tcpConnEntry {
1009 		/* state of tcp connection		{ tcpConnEntry 1} RW */
1010 	int		tcpConnState;
1011 		/* local ip addr for this connection	{ tcpConnEntry 2 } */
1012 	IpAddress	tcpConnLocalAddress;
1013 		/* local port for this connection	{ tcpConnEntry 3 } */
1014 	int		tcpConnLocalPort;	/* In host byte order */
1015 		/* remote ip addr for this connection	{ tcpConnEntry 4 } */
1016 	IpAddress	tcpConnRemAddress;
1017 		/* remote port for this connection	{ tcpConnEntry 5 } */
1018 	int		tcpConnRemPort;		/* In host byte order */
1019 	struct tcpConnEntryInfo_s {
1020 			/* seq # of next segment to send */
1021 		Gauge		ce_snxt;
1022 				/* seq # of of last segment unacknowledged */
1023 		Gauge		ce_suna;
1024 				/* currect send window size */
1025 		Gauge		ce_swnd;
1026 				/* seq # of next expected segment */
1027 		Gauge		ce_rnxt;
1028 				/* seq # of last ack'd segment */
1029 		Gauge		ce_rack;
1030 				/* currenct receive window size */
1031 		Gauge		ce_rwnd;
1032 					/* current rto (retransmit timeout) */
1033 		Gauge		ce_rto;
1034 					/* current max segment size */
1035 		Gauge		ce_mss;
1036 				/* actual internal state */
1037 		int		ce_state;
1038 	} 		tcpConnEntryInfo;
1039 } mib2_tcpConnEntry_t;
1040 
1041 
1042 /*
1043  * The TCP/IPv6 connection table {tcp 14} contains information about this
1044  * entity's existing TCP connections over IPv6.
1045  */
1046 
1047 typedef struct mib2_tcp6ConnEntry {
1048 	/* local ip addr for this connection	{ ipv6TcpConnEntry 1 } */
1049 	Ip6Address	tcp6ConnLocalAddress;
1050 	/* local port for this connection	{ ipv6TcpConnEntry 2 } */
1051 	int		tcp6ConnLocalPort;
1052 	/* remote ip addr for this connection	{ ipv6TcpConnEntry 3 } */
1053 	Ip6Address	tcp6ConnRemAddress;
1054 	/* remote port for this connection	{ ipv6TcpConnEntry 4 } */
1055 	int		tcp6ConnRemPort;
1056 	/* interface index or zero		{ ipv6TcpConnEntry 5 } */
1057 	DeviceIndex	tcp6ConnIfIndex;
1058 	/* state of tcp6 connection		{ ipv6TcpConnEntry 6 } RW */
1059 	int		tcp6ConnState;
1060 	struct tcp6ConnEntryInfo_s {
1061 			/* seq # of next segment to send */
1062 		Gauge		ce_snxt;
1063 				/* seq # of of last segment unacknowledged */
1064 		Gauge		ce_suna;
1065 				/* currect send window size */
1066 		Gauge		ce_swnd;
1067 				/* seq # of next expected segment */
1068 		Gauge		ce_rnxt;
1069 				/* seq # of last ack'd segment */
1070 		Gauge		ce_rack;
1071 				/* currenct receive window size */
1072 		Gauge		ce_rwnd;
1073 					/* current rto (retransmit timeout) */
1074 		Gauge		ce_rto;
1075 					/* current max segment size */
1076 		Gauge		ce_mss;
1077 				/* actual internal state */
1078 		int		ce_state;
1079 	} 		tcp6ConnEntryInfo;
1080 } mib2_tcp6ConnEntry_t;
1081 
1082 /*
1083  * the UDP group
1084  */
1085 #define	MIB2_UDP_ENTRY	5	/* udpEntry */
1086 #define	MIB2_UDP6_ENTRY	6	/* udp6Entry */
1087 
1088 /* Old name retained for compatibility */
1089 #define	MIB2_UDP_5	MIB2_UDP_ENTRY
1090 
1091 typedef struct mib2_udp {
1092 		/* total # of UDP datagrams sent upstream	{ udp 1 } */
1093 	Counter	udpInDatagrams;
1094 	/* in ip				{ udp 2 } */
1095 		/* # of recv'd dg's not deliverable (other)	{ udp 3 }  */
1096 	Counter	udpInErrors;
1097 		/* total # of dg's sent				{ udp 4 } */
1098 	Counter	udpOutDatagrams;
1099 		/* { udp 5 } */
1100 	int	udpEntrySize;			/* Size of udpEntry_t */
1101 	int	udp6EntrySize;			/* Size of udp6Entry_t */
1102 	Counter	udpOutErrors;
1103 } mib2_udp_t;
1104 
1105 /*
1106  * The UDP listener table contains information about this entity's UDP
1107  * end-points on which a local application is currently accepting datagrams.
1108  */
1109 
1110 /* For both IPv4 and IPv6 ue_state: */
1111 #define	MIB2_UDP_unbound	1
1112 #define	MIB2_UDP_idle		2
1113 #define	MIB2_UDP_connected	3
1114 #define	MIB2_UDP_unknown	4
1115 
1116 typedef struct mib2_udpEntry {
1117 		/* local ip addr of listener		{ udpEntry 1 } */
1118 	IpAddress	udpLocalAddress;
1119 		/* local port of listener		{ udpEntry 2 } */
1120 	int		udpLocalPort;		/* In host byte order */
1121 	struct udpEntryInfo_s {
1122 		int		ue_state;
1123 		IpAddress	ue_RemoteAddress;
1124 		int		ue_RemotePort;	/* In host byte order */
1125 	}		udpEntryInfo;
1126 } mib2_udpEntry_t;
1127 
1128 /*
1129  * The UDP (for IPv6) listener table contains information about this
1130  * entity's UDP end-points on which a local application is
1131  * currently accepting datagrams.
1132  */
1133 
1134 typedef	struct mib2_udp6Entry {
1135 		/* local ip addr of listener		{ ipv6UdpEntry 1 } */
1136 	Ip6Address	udp6LocalAddress;
1137 		/* local port of listener		{ ipv6UdpEntry 2 } */
1138 	int		udp6LocalPort;		/* In host byte order */
1139 		/* interface index or zero 		{ ipv6UdpEntry 3 } */
1140 	DeviceIndex	udp6IfIndex;
1141 	struct udp6EntryInfo_s {
1142 		int	ue_state;
1143 		Ip6Address	ue_RemoteAddress;
1144 		int		ue_RemotePort;	/* In host byte order */
1145 	}		udp6EntryInfo;
1146 } mib2_udp6Entry_t;
1147 
1148 /*
1149  * the RAWIP group
1150  */
1151 typedef struct mib2_rawip {
1152 		/* total # of RAWIP datagrams sent upstream */
1153 	Counter	rawipInDatagrams;
1154 		/* # of RAWIP packets with bad IPV6_CHECKSUM checksums */
1155 	Counter rawipInCksumErrs;
1156 		/* # of recv'd dg's not deliverable (other) */
1157 	Counter	rawipInErrors;
1158 		/* total # of dg's sent */
1159 	Counter	rawipOutDatagrams;
1160 		/* total # of dg's not sent (e.g. no memory) */
1161 	Counter	rawipOutErrors;
1162 } mib2_rawip_t;
1163 
1164 /* DVMRP group */
1165 #define	EXPER_DVMRP_VIF		1
1166 #define	EXPER_DVMRP_MRT		2
1167 
1168 
1169 /*
1170  * The SCTP group
1171  */
1172 #define	MIB2_SCTP_CONN			15
1173 #define	MIB2_SCTP_CONN_LOCAL		16
1174 #define	MIB2_SCTP_CONN_REMOTE		17
1175 
1176 #define	MIB2_SCTP_closed		1
1177 #define	MIB2_SCTP_cookieWait		2
1178 #define	MIB2_SCTP_cookieEchoed		3
1179 #define	MIB2_SCTP_established		4
1180 #define	MIB2_SCTP_shutdownPending	5
1181 #define	MIB2_SCTP_shutdownSent		6
1182 #define	MIB2_SCTP_shutdownReceived	7
1183 #define	MIB2_SCTP_shutdownAckSent	8
1184 #define	MIB2_SCTP_deleteTCB		9
1185 #define	MIB2_SCTP_listen		10	/* Not in the MIB */
1186 
1187 #define	MIB2_SCTP_ACTIVE		1
1188 #define	MIB2_SCTP_INACTIVE		2
1189 
1190 #define	MIB2_SCTP_ADDR_V4		1
1191 #define	MIB2_SCTP_ADDR_V6		2
1192 
1193 #define	MIB2_SCTP_RTOALGO_OTHER		1
1194 #define	MIB2_SCTP_RTOALGO_VANJ		2
1195 
1196 typedef struct mib2_sctpConnEntry {
1197 		/* connection identifier	{ sctpAssocEntry 1 } */
1198 	uint32_t	sctpAssocId;
1199 		/* remote hostname (not used)	{ sctpAssocEntry 2 } */
1200 	Octet_t		sctpAssocRemHostName;
1201 		/* local port number		{ sctpAssocEntry 3 } */
1202 	uint32_t	sctpAssocLocalPort;
1203 		/* remote port number		{ sctpAssocEntry 4 } */
1204 	uint32_t	sctpAssocRemPort;
1205 		/* type of primary remote addr	{ sctpAssocEntry 5 } */
1206 	int		sctpAssocRemPrimAddrType;
1207 		/* primary remote address	{ sctpAssocEntry 6 } */
1208 	Ip6Address	sctpAssocRemPrimAddr;
1209 		/* local address */
1210 	Ip6Address	sctpAssocLocPrimAddr;
1211 		/* current heartbeat interval	{ sctpAssocEntry 7 } */
1212 	uint32_t	sctpAssocHeartBeatInterval;
1213 		/* state of this association	{ sctpAssocEntry 8 } */
1214 	int		sctpAssocState;
1215 		/* # of inbound streams		{ sctpAssocEntry 9 } */
1216 	uint32_t	sctpAssocInStreams;
1217 		/* # of outbound streams	{ sctpAssocEntry 10 } */
1218 	uint32_t	sctpAssocOutStreams;
1219 		/* max # of data retans		{ sctpAssocEntry 11 } */
1220 	uint32_t	sctpAssocMaxRetr;
1221 		/* sysId for assoc owner	{ sctpAssocEntry 12 } */
1222 	uint32_t	sctpAssocPrimProcess;
1223 		/* # of rxmit timeouts during hanshake */
1224 	Counter32	sctpAssocT1expired;	/* { sctpAssocEntry 13 } */
1225 		/* # of rxmit timeouts during shutdown */
1226 	Counter32	sctpAssocT2expired;	/* { sctpAssocEntry 14 } */
1227 		/* # of rxmit timeouts during data transfer */
1228 	Counter32	sctpAssocRtxChunks;	/* { sctpAssocEntry 15 } */
1229 		/* assoc start-up time		{ sctpAssocEntry 16 } */
1230 	uint32_t	sctpAssocStartTime;
1231 	struct sctpConnEntryInfo_s {
1232 				/* amount of data in send Q */
1233 		Gauge		ce_sendq;
1234 				/* amount of data in recv Q */
1235 		Gauge		ce_recvq;
1236 				/* currect send window size */
1237 		Gauge		ce_swnd;
1238 				/* currenct receive window size */
1239 		Gauge		ce_rwnd;
1240 				/* current max segment size */
1241 		Gauge		ce_mss;
1242 	} sctpConnEntryInfo;
1243 } mib2_sctpConnEntry_t;
1244 
1245 typedef struct mib2_sctpConnLocalAddrEntry {
1246 		/* connection identifier */
1247 	uint32_t	sctpAssocId;
1248 		/* type of local addr		{ sctpAssocLocalEntry 1 } */
1249 	int		sctpAssocLocalAddrType;
1250 		/* local address		{ sctpAssocLocalEntry 2 } */
1251 	Ip6Address	sctpAssocLocalAddr;
1252 } mib2_sctpConnLocalEntry_t;
1253 
1254 typedef struct mib2_sctpConnRemoteAddrEntry {
1255 		/* connection identier */
1256 	uint32_t	sctpAssocId;
1257 		/* remote addr type		{ sctpAssocRemEntry 1 } */
1258 	int		sctpAssocRemAddrType;
1259 		/* remote address		{ sctpAssocRemEntry 2 } */
1260 	Ip6Address	sctpAssocRemAddr;
1261 		/* is the address active	{ sctpAssocRemEntry 3 } */
1262 	int		sctpAssocRemAddrActive;
1263 		/* whether hearbeat is active	{ sctpAssocRemEntry 4 } */
1264 	int		sctpAssocRemAddrHBActive;
1265 		/* current RTO			{ sctpAssocRemEntry 5 } */
1266 	uint32_t	sctpAssocRemAddrRTO;
1267 		/* max # of rexmits before becoming inactive */
1268 	uint32_t	sctpAssocRemAddrMaxPathRtx; /* {sctpAssocRemEntry 6} */
1269 		/* # of rexmits to this dest	{ sctpAssocRemEntry 7 } */
1270 	uint32_t	sctpAssocRemAddrRtx;
1271 } mib2_sctpConnRemoteEntry_t;
1272 
1273 
1274 
1275 /* Pack data in mib2_sctp to make struct size the same for 32- and 64-bits */
1276 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1277 #pragma pack(4)
1278 #endif
1279 
1280 typedef struct mib2_sctp {
1281 		/* algorithm used to determine rto	{ sctpParams 1 } */
1282 	int		sctpRtoAlgorithm;
1283 		/* min RTO in msecs			{ sctpParams 2 } */
1284 	uint32_t	sctpRtoMin;
1285 		/* max RTO in msecs			{ sctpParams 3 } */
1286 	uint32_t	sctpRtoMax;
1287 		/* initial RTO in msecs			{ sctpParams 4 } */
1288 	uint32_t	sctpRtoInitial;
1289 		/* max # of assocs			{ sctpParams 5 } */
1290 	int32_t		sctpMaxAssocs;
1291 		/* cookie lifetime in msecs		{ sctpParams 6 } */
1292 	uint32_t	sctpValCookieLife;
1293 		/* max # of retrans in startup		{ sctpParams 7 } */
1294 	uint32_t	sctpMaxInitRetr;
1295 	/* # of conns ESTABLISHED, SHUTDOWN-RECEIVED or SHUTDOWN-PENDING */
1296 	Counter32	sctpCurrEstab;		/* { sctpStats 1 } */
1297 		/* # of active opens			{ sctpStats 2 } */
1298 	Counter32	sctpActiveEstab;
1299 		/* # of passive opens			{ sctpStats 3 } */
1300 	Counter32	sctpPassiveEstab;
1301 		/* # of aborted conns			{ sctpStats 4 } */
1302 	Counter32	sctpAborted;
1303 		/* # of graceful shutdowns		{ sctpStats 5 } */
1304 	Counter32	sctpShutdowns;
1305 		/* # of OOB packets			{ sctpStats 6 } */
1306 	Counter32	sctpOutOfBlue;
1307 		/* # of packets discarded due to cksum	{ sctpStats 7 } */
1308 	Counter32	sctpChecksumError;
1309 		/* # of control chunks sent		{ sctpStats 8 } */
1310 	Counter64	sctpOutCtrlChunks;
1311 		/* # of ordered data chunks sent	{ sctpStats 9 } */
1312 	Counter64	sctpOutOrderChunks;
1313 		/* # of unordered data chunks sent	{ sctpStats 10 } */
1314 	Counter64	sctpOutUnorderChunks;
1315 		/* # of retransmitted data chunks */
1316 	Counter64	sctpRetransChunks;
1317 		/* # of SACK chunks sent */
1318 	Counter		sctpOutAck;
1319 		/* # of delayed ACK timeouts */
1320 	Counter		sctpOutAckDelayed;
1321 		/* # of SACK chunks sent to update window */
1322 	Counter		sctpOutWinUpdate;
1323 		/* # of fast retransmits */
1324 	Counter		sctpOutFastRetrans;
1325 		/* # of window probes sent */
1326 	Counter		sctpOutWinProbe;
1327 		/* # of control chunks received		{ sctpStats 11 } */
1328 	Counter64	sctpInCtrlChunks;
1329 		/* # of ordered data chunks rcvd	{ sctpStats 12 } */
1330 	Counter64	sctpInOrderChunks;
1331 		/* # of unord data chunks rcvd		{ sctpStats 13 } */
1332 	Counter64	sctpInUnorderChunks;
1333 		/* # of received SACK chunks */
1334 	Counter		sctpInAck;
1335 		/* # of received SACK chunks with duplicate TSN */
1336 	Counter		sctpInDupAck;
1337 		/* # of SACK chunks acking unsent data */
1338 	Counter 	sctpInAckUnsent;
1339 		/* # of Fragmented User Messages	{ sctpStats 14 } */
1340 	Counter64	sctpFragUsrMsgs;
1341 		/* # of Reassembled User Messages	{ sctpStats 15 } */
1342 	Counter64	sctpReasmUsrMsgs;
1343 		/* # of Sent SCTP Packets		{ sctpStats 16 } */
1344 	Counter64	sctpOutSCTPPkts;
1345 		/* # of Received SCTP Packets		{ sctpStats 17 } */
1346 	Counter64	sctpInSCTPPkts;
1347 		/* # of invalid cookies received */
1348 	Counter		sctpInInvalidCookie;
1349 		/* total # of retransmit timeouts */
1350 	Counter		sctpTimRetrans;
1351 		/* total # of retransmit timeouts dropping the connection */
1352 	Counter		sctpTimRetransDrop;
1353 		/* total # of heartbeat probes */
1354 	Counter		sctpTimHeartBeatProbe;
1355 		/* total # of heartbeat timeouts dropping the connection */
1356 	Counter		sctpTimHeartBeatDrop;
1357 		/* total # of conns refused due to backlog full on listen */
1358 	Counter		sctpListenDrop;
1359 		/* total # of pkts received after the association has closed */
1360 	Counter		sctpInClosed;
1361 	int		sctpEntrySize;
1362 	int		sctpLocalEntrySize;
1363 	int		sctpRemoteEntrySize;
1364 } mib2_sctp_t;
1365 
1366 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1367 #pragma pack()
1368 #endif
1369 
1370 
1371 #ifdef	__cplusplus
1372 }
1373 #endif
1374 
1375 #endif	/* _INET_MIB2_H */
1376