xref: /illumos-gate/usr/src/uts/common/inet/mib2.h (revision a2f04351e04971ab0879872d264d6038c156b860)
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 (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  *
21  * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
22  */
23 /*
24  * Copyright (c) 1990 Mentat Inc.
25  * Copyright (c) 2015, 2016 by Delphix. All rights reserved.
26  */
27 
28 #ifndef	_INET_MIB2_H
29 #define	_INET_MIB2_H
30 
31 #include <netinet/in.h>	/* For in6_addr_t */
32 #include <sys/tsol/label.h> /* For brange_t */
33 #include <sys/tsol/label_macro.h> /* For brange_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_CURRENT), 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.   In general, we use MIB2_IP.  There is
70  * one exception: in general, IP will not report information related to
71  * ire_testhidden and IRE_IF_CLONE routes (e.g., in the MIB2_IP_ROUTE
72  * table). However, using the special value EXPER_IP_AND_ALL_IRES will cause
73  * all information to be reported.  This special value should only be
74  * used by IPMP-aware low-level utilities (e.g. in.mpathd).
75  *
76  * IMPORTANT:  some fields are grouped in a different structure than
77  * suggested by MIB-II, e.g., checksum error counts.  The original MIB-2
78  * field name has been retained.  Field names beginning with "mi" are not
79  * defined in the MIB but contain important & useful information maintained
80  * by the corresponding module.
81  */
82 #ifndef IPPROTO_MAX
83 #define	IPPROTO_MAX	256
84 #endif
85 
86 #define	MIB2_SYSTEM		(IPPROTO_MAX+1)
87 #define	MIB2_INTERFACES		(IPPROTO_MAX+2)
88 #define	MIB2_AT			(IPPROTO_MAX+3)
89 #define	MIB2_IP			(IPPROTO_MAX+4)
90 #define	MIB2_ICMP		(IPPROTO_MAX+5)
91 #define	MIB2_TCP		(IPPROTO_MAX+6)
92 #define	MIB2_UDP		(IPPROTO_MAX+7)
93 #define	MIB2_EGP		(IPPROTO_MAX+8)
94 #define	MIB2_CMOT		(IPPROTO_MAX+9)
95 #define	MIB2_TRANSMISSION	(IPPROTO_MAX+10)
96 #define	MIB2_SNMP		(IPPROTO_MAX+11)
97 #define	MIB2_IP6		(IPPROTO_MAX+12)
98 #define	MIB2_ICMP6		(IPPROTO_MAX+13)
99 #define	MIB2_TCP6		(IPPROTO_MAX+14)
100 #define	MIB2_UDP6		(IPPROTO_MAX+15)
101 #define	MIB2_SCTP		(IPPROTO_MAX+16)
102 
103 /*
104  * Define range of levels for use with MIB2_*
105  */
106 #define	MIB2_RANGE_START	(IPPROTO_MAX+1)
107 #define	MIB2_RANGE_END		(IPPROTO_MAX+16)
108 
109 
110 #define	EXPER			1024	/* experimental - not part of mib */
111 #define	EXPER_IGMP		(EXPER+1)
112 #define	EXPER_DVMRP		(EXPER+2)
113 #define	EXPER_RAWIP		(EXPER+3)
114 #define	EXPER_IP_AND_ALL_IRES	(EXPER+4)
115 
116 /*
117  * Define range of levels for experimental use
118  */
119 #define	EXPER_RANGE_START	(EXPER+1)
120 #define	EXPER_RANGE_END		(EXPER+4)
121 
122 #define	BUMP_MIB(s, x)		{				\
123 	extern void __dtrace_probe___mib_##x(int, void *);	\
124 	void *stataddr = &((s)->x);				\
125 	__dtrace_probe___mib_##x(1, stataddr);			\
126 	(s)->x++;						\
127 }
128 
129 #define	UPDATE_MIB(s, x, y)	{				\
130 	extern void __dtrace_probe___mib_##x(int, void *);	\
131 	void *stataddr = &((s)->x);				\
132 	__dtrace_probe___mib_##x(y, stataddr);			\
133 	(s)->x += (y);						\
134 }
135 
136 #define	SET_MIB(x, y)		x = y
137 #define	BUMP_LOCAL(x)		(x)++
138 #define	UPDATE_LOCAL(x, y)	(x) += (y)
139 #define	SYNC32_MIB(s, m32, m64)	SET_MIB((s)->m32, (s)->m64 & 0xffffffff)
140 
141 /*
142  * Each struct that has been extended have a macro (MIB_FIRST_NEW_ELM_type)
143  * that is set to the first new element of the extended struct.
144  * The LEGACY_MIB_SIZE macro can be used to determine the size of MIB
145  * objects that needs to be returned to older applications unaware of
146  * these extensions.
147  */
148 #define	MIB_PTRDIFF(s, e)	(caddr_t)e - (caddr_t)s
149 #define	LEGACY_MIB_SIZE(s, t)	MIB_PTRDIFF(s, &(s)->MIB_FIRST_NEW_ELM_##t)
150 
151 #define	OCTET_LENGTH	32	/* Must be at least LIFNAMSIZ */
152 typedef struct Octet_s {
153 	int	o_length;
154 	char	o_bytes[OCTET_LENGTH];
155 } Octet_t;
156 
157 typedef uint32_t	Counter;
158 typedef uint32_t	Counter32;
159 typedef uint64_t	Counter64;
160 typedef uint32_t	Gauge;
161 typedef uint32_t	IpAddress;
162 typedef	struct in6_addr	Ip6Address;
163 typedef Octet_t		DeviceName;
164 typedef Octet_t		PhysAddress;
165 typedef uint32_t	DeviceIndex;	/* Interface index */
166 
167 #define	MIB2_UNKNOWN_INTERFACE	0
168 #define	MIB2_UNKNOWN_PROCESS	0
169 
170 /*
171  *  IP group
172  */
173 #define	MIB2_IP_ADDR		20	/* ipAddrEntry */
174 #define	MIB2_IP_ROUTE		21	/* ipRouteEntry */
175 #define	MIB2_IP_MEDIA		22	/* ipNetToMediaEntry */
176 #define	MIB2_IP6_ROUTE		23	/* ipv6RouteEntry */
177 #define	MIB2_IP6_MEDIA		24	/* ipv6NetToMediaEntry */
178 #define	MIB2_IP6_ADDR		25	/* ipv6AddrEntry */
179 #define	MIB2_IP_TRAFFIC_STATS	31	/* ipIfStatsEntry (IPv4) */
180 #define	EXPER_IP_GROUP_MEMBERSHIP	100
181 #define	EXPER_IP6_GROUP_MEMBERSHIP	101
182 #define	EXPER_IP_GROUP_SOURCES		102
183 #define	EXPER_IP6_GROUP_SOURCES		103
184 #define	EXPER_IP_RTATTR			104
185 #define	EXPER_IP_DCE			105
186 
187 /*
188  * There can be one of each of these tables per transport (MIB2_* above).
189  */
190 #define	EXPER_XPORT_MLP		105	/* transportMLPEntry */
191 
192 /* Old names retained for compatibility */
193 #define	MIB2_IP_20	MIB2_IP_ADDR
194 #define	MIB2_IP_21	MIB2_IP_ROUTE
195 #define	MIB2_IP_22	MIB2_IP_MEDIA
196 
197 typedef struct mib2_ip {
198 		/* forwarder?  1 gateway, 2 NOT gateway	{ip 1} RW */
199 	int	ipForwarding;
200 		/* default Time-to-Live for iph		{ip 2} RW */
201 	int	ipDefaultTTL;
202 		/* # of input datagrams			{ip 3} */
203 	Counter	ipInReceives;
204 		/* # of dg discards for iph error	{ip 4} */
205 	Counter	ipInHdrErrors;
206 		/* # of dg discards for bad addr	{ip 5} */
207 	Counter	ipInAddrErrors;
208 		/* # of dg being forwarded		{ip 6} */
209 	Counter	ipForwDatagrams;
210 		/* # of dg discards for unk protocol	{ip 7} */
211 	Counter	ipInUnknownProtos;
212 		/* # of dg discards of good dg's	{ip 8} */
213 	Counter	ipInDiscards;
214 		/* # of dg sent upstream		{ip 9} */
215 	Counter ipInDelivers;
216 		/* # of outdgs recv'd from upstream	{ip 10} */
217 	Counter	ipOutRequests;
218 		/* # of good outdgs discarded		{ip 11} */
219 	Counter ipOutDiscards;
220 		/* # of outdg discards: no route found	{ip 12} */
221 	Counter	ipOutNoRoutes;
222 		/* sec's recv'd frags held for reass.	{ip 13}	*/
223 	int	ipReasmTimeout;
224 		/* # of ip frags needing reassembly	{ip 14} */
225 	Counter	ipReasmReqds;
226 		/* # of dg's reassembled		{ip 15} */
227 	Counter	ipReasmOKs;
228 		/* # of reassembly failures (not dg cnt){ip 16} */
229 	Counter	ipReasmFails;
230 		/* # of dg's fragged			{ip 17} */
231 	Counter	ipFragOKs;
232 		/* # of dg discards for no frag set	{ip 18} */
233 	Counter ipFragFails;
234 		/* # of dg frags from fragmentation	{ip 19} */
235 	Counter	ipFragCreates;
236 		/* {ip 20} */
237 	int	ipAddrEntrySize;
238 		/* {ip 21} */
239 	int	ipRouteEntrySize;
240 		/* {ip 22} */
241 	int	ipNetToMediaEntrySize;
242 		/* # of valid route entries discarded 	{ip 23} */
243 	Counter	ipRoutingDiscards;
244 /*
245  * following defined in MIB-II as part of TCP & UDP groups:
246  */
247 		/* total # of segments recv'd with error	{ tcp 14 } */
248 	Counter	tcpInErrs;
249 		/* # of recv'd dg's not deliverable (no appl.)	{ udp 2 } */
250 	Counter	udpNoPorts;
251 /*
252  * In addition to MIB-II
253  */
254 		/* # of bad IP header checksums */
255 	Counter	ipInCksumErrs;
256 		/* # of complete duplicates in reassembly */
257 	Counter	ipReasmDuplicates;
258 		/* # of partial duplicates in reassembly */
259 	Counter	ipReasmPartDups;
260 		/* # of packets not forwarded due to adminstrative reasons */
261 	Counter	ipForwProhibits;
262 		/* # of UDP packets with bad UDP checksums */
263 	Counter udpInCksumErrs;
264 		/* # of UDP packets droped due to queue overflow */
265 	Counter udpInOverflows;
266 		/*
267 		 * # of RAW IP packets (all IP protocols except UDP, TCP
268 		 * and ICMP) droped due to queue overflow
269 		 */
270 	Counter rawipInOverflows;
271 
272 	/*
273 	 * Folowing are private IPSEC MIB.
274 	 */
275 	/* # of incoming packets that succeeded policy checks */
276 	Counter ipsecInSucceeded;
277 	/* # of incoming packets that failed policy checks */
278 	Counter ipsecInFailed;
279 /* Compatible extensions added here */
280 	int	ipMemberEntrySize;	/* Size of ip_member_t */
281 	int	ipGroupSourceEntrySize;	/* Size of ip_grpsrc_t */
282 
283 	Counter ipInIPv6; /* # of IPv6 packets received by IPv4 and dropped */
284 	Counter ipOutIPv6;		/* No longer used */
285 	Counter ipOutSwitchIPv6;	/* No longer used */
286 
287 	int	ipRouteAttributeSize;	/* Size of mib2_ipAttributeEntry_t */
288 	int	transportMLPSize;	/* Size of mib2_transportMLPEntry_t */
289 	int	ipDestEntrySize;	/* Size of dest_cache_entry_t */
290 } mib2_ip_t;
291 
292 /*
293  *	ipv6IfStatsEntry OBJECT-TYPE
294  *		SYNTAX     Ipv6IfStatsEntry
295  *		MAX-ACCESS not-accessible
296  *		STATUS     current
297  *		DESCRIPTION
298  *			"An interface statistics entry containing objects
299  *			at a particular IPv6 interface."
300  *		AUGMENTS { ipv6IfEntry }
301  *		::= { ipv6IfStatsTable 1 }
302  *
303  * Per-interface IPv6 statistics table
304  */
305 
306 typedef struct mib2_ipv6IfStatsEntry {
307 	/* Local ifindex to identify the interface */
308 	DeviceIndex	ipv6IfIndex;
309 
310 		/* forwarder?  1 gateway, 2 NOT gateway	{ipv6MIBObjects 1} RW */
311 	int	ipv6Forwarding;
312 		/* default Hoplimit for IPv6		{ipv6MIBObjects 2} RW */
313 	int	ipv6DefaultHopLimit;
314 
315 	int	ipv6IfStatsEntrySize;
316 	int	ipv6AddrEntrySize;
317 	int	ipv6RouteEntrySize;
318 	int	ipv6NetToMediaEntrySize;
319 	int	ipv6MemberEntrySize;		/* Size of ipv6_member_t */
320 	int	ipv6GroupSourceEntrySize;	/* Size of ipv6_grpsrc_t */
321 
322 	/* # input datagrams (incl errors)	{ ipv6IfStatsEntry 1 } */
323 	Counter	ipv6InReceives;
324 	/* # errors in IPv6 headers and options	{ ipv6IfStatsEntry 2 } */
325 	Counter	ipv6InHdrErrors;
326 	/* # exceeds outgoing link MTU		{ ipv6IfStatsEntry 3 } */
327 	Counter	ipv6InTooBigErrors;
328 	/* # discarded due to no route to dest 	{ ipv6IfStatsEntry 4 } */
329 	Counter	ipv6InNoRoutes;
330 	/* # invalid or unsupported addresses	{ ipv6IfStatsEntry 5 } */
331 	Counter	ipv6InAddrErrors;
332 	/* # unknown next header 		{ ipv6IfStatsEntry 6 } */
333 	Counter	ipv6InUnknownProtos;
334 	/* # too short packets			{ ipv6IfStatsEntry 7 } */
335 	Counter	ipv6InTruncatedPkts;
336 	/* # discarded e.g. due to no buffers	{ ipv6IfStatsEntry 8 } */
337 	Counter	ipv6InDiscards;
338 	/* # delivered to upper layer protocols	{ ipv6IfStatsEntry 9 } */
339 	Counter	ipv6InDelivers;
340 	/* # forwarded out interface		{ ipv6IfStatsEntry 10 } */
341 	Counter	ipv6OutForwDatagrams;
342 	/* # originated out interface		{ ipv6IfStatsEntry 11 } */
343 	Counter	ipv6OutRequests;
344 	/* # discarded e.g. due to no buffers	{ ipv6IfStatsEntry 12 } */
345 	Counter	ipv6OutDiscards;
346 	/* # sucessfully fragmented packets	{ ipv6IfStatsEntry 13 } */
347 	Counter	ipv6OutFragOKs;
348 	/* # fragmentation failed		{ ipv6IfStatsEntry 14 } */
349 	Counter	ipv6OutFragFails;
350 	/* # fragments created			{ ipv6IfStatsEntry 15 } */
351 	Counter	ipv6OutFragCreates;
352 	/* # fragments to reassemble		{ ipv6IfStatsEntry 16 } */
353 	Counter	ipv6ReasmReqds;
354 	/* # packets after reassembly		{ ipv6IfStatsEntry 17 } */
355 	Counter	ipv6ReasmOKs;
356 	/* # reassembly failed			{ ipv6IfStatsEntry 18 } */
357 	Counter	ipv6ReasmFails;
358 	/* # received multicast packets		{ ipv6IfStatsEntry 19 } */
359 	Counter	ipv6InMcastPkts;
360 	/* # transmitted multicast packets	{ ipv6IfStatsEntry 20 } */
361 	Counter	ipv6OutMcastPkts;
362 /*
363  * In addition to defined MIBs
364  */
365 		/* # discarded due to no route to dest */
366 	Counter	ipv6OutNoRoutes;
367 		/* # of complete duplicates in reassembly */
368 	Counter	ipv6ReasmDuplicates;
369 		/* # of partial duplicates in reassembly */
370 	Counter	ipv6ReasmPartDups;
371 		/* # of packets not forwarded due to adminstrative reasons */
372 	Counter	ipv6ForwProhibits;
373 		/* # of UDP packets with bad UDP checksums */
374 	Counter udpInCksumErrs;
375 		/* # of UDP packets droped due to queue overflow */
376 	Counter udpInOverflows;
377 		/*
378 		 * # of RAW IPv6 packets (all IPv6 protocols except UDP, TCP
379 		 * and ICMPv6) droped due to queue overflow
380 		 */
381 	Counter rawipInOverflows;
382 
383 		/* # of IPv4 packets received by IPv6 and dropped */
384 	Counter ipv6InIPv4;
385 		/* # of IPv4 packets transmitted by ip_wput_wput */
386 	Counter ipv6OutIPv4;
387 		/* # of times ip_wput_v6 has switched to become ip_wput */
388 	Counter ipv6OutSwitchIPv4;
389 } mib2_ipv6IfStatsEntry_t;
390 
391 /*
392  * Per interface IP statistics, both v4 and v6.
393  *
394  * Some applications expect to get mib2_ipv6IfStatsEntry_t structs back when
395  * making a request. To ensure backwards compatability, the first
396  * sizeof(mib2_ipv6IfStatsEntry_t) bytes of the structure is identical to
397  * mib2_ipv6IfStatsEntry_t. This should work as long the application is
398  * written correctly (i.e., using ipv6IfStatsEntrySize to get the size of
399  * the struct)
400  *
401  * RFC4293 introduces several new counters, as well as defining 64-bit
402  * versions of existing counters. For a new counters, if they have both 32-
403  * and 64-bit versions, then we only added the latter. However, for already
404  * existing counters, we have added the 64-bit versions without removing the
405  * old (32-bit) ones. The 64- and 32-bit counters will only be synchronized
406  * when the structure contains IPv6 statistics, which is done to ensure
407  * backwards compatibility.
408  */
409 
410 /* The following are defined in RFC 4001 and are used for ipIfStatsIPVersion */
411 #define	MIB2_INETADDRESSTYPE_unknown	0
412 #define	MIB2_INETADDRESSTYPE_ipv4	1
413 #define	MIB2_INETADDRESSTYPE_ipv6	2
414 
415 /*
416  * On amd64, the alignment requirements for long long's is different for
417  * 32 and 64 bits. If we have a struct containing long long's that is being
418  * passed between a 64-bit kernel to a 32-bit application, then it is very
419  * likely that the size of the struct will differ due to padding. Therefore, we
420  * pack the data to ensure that the struct size is the same for 32- and
421  * 64-bits.
422  */
423 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
424 #pragma pack(4)
425 #endif
426 
427 typedef struct mib2_ipIfStatsEntry {
428 
429 	/* Local ifindex to identify the interface */
430 	DeviceIndex	ipIfStatsIfIndex;
431 
432 	/* forwarder?  1 gateway, 2 NOT gateway	{ ipv6MIBObjects 1} RW */
433 	int	ipIfStatsForwarding;
434 	/* default Hoplimit for IPv6		{ ipv6MIBObjects 2} RW */
435 	int	ipIfStatsDefaultHopLimit;
436 #define	ipIfStatsDefaultTTL	ipIfStatsDefaultHopLimit
437 
438 	int	ipIfStatsEntrySize;
439 	int	ipIfStatsAddrEntrySize;
440 	int	ipIfStatsRouteEntrySize;
441 	int	ipIfStatsNetToMediaEntrySize;
442 	int	ipIfStatsMemberEntrySize;
443 	int	ipIfStatsGroupSourceEntrySize;
444 
445 	/* # input datagrams (incl errors)	{ ipIfStatsEntry 3 } */
446 	Counter	ipIfStatsInReceives;
447 	/* # errors in IP headers and options	{ ipIfStatsEntry 7 } */
448 	Counter	ipIfStatsInHdrErrors;
449 	/* # exceeds outgoing link MTU(v6 only)	{ ipv6IfStatsEntry 3 } */
450 	Counter	ipIfStatsInTooBigErrors;
451 	/* # discarded due to no route to dest 	{ ipIfStatsEntry 8 } */
452 	Counter	ipIfStatsInNoRoutes;
453 	/* # invalid or unsupported addresses	{ ipIfStatsEntry 9 } */
454 	Counter	ipIfStatsInAddrErrors;
455 	/* # unknown next header 		{ ipIfStatsEntry 10 } */
456 	Counter	ipIfStatsInUnknownProtos;
457 	/* # too short packets			{ ipIfStatsEntry 11 } */
458 	Counter	ipIfStatsInTruncatedPkts;
459 	/* # discarded e.g. due to no buffers	{ ipIfStatsEntry 17 } */
460 	Counter	ipIfStatsInDiscards;
461 	/* # delivered to upper layer protocols	{ ipIfStatsEntry 18 } */
462 	Counter	ipIfStatsInDelivers;
463 	/* # forwarded out interface		{ ipIfStatsEntry 23 } */
464 	Counter	ipIfStatsOutForwDatagrams;
465 	/* # originated out interface		{ ipIfStatsEntry 20 } */
466 	Counter	ipIfStatsOutRequests;
467 	/* # discarded e.g. due to no buffers	{ ipIfStatsEntry 25 } */
468 	Counter	ipIfStatsOutDiscards;
469 	/* # sucessfully fragmented packets	{ ipIfStatsEntry 27 } */
470 	Counter	ipIfStatsOutFragOKs;
471 	/* # fragmentation failed		{ ipIfStatsEntry 28 } */
472 	Counter	ipIfStatsOutFragFails;
473 	/* # fragments created			{ ipIfStatsEntry 29 } */
474 	Counter	ipIfStatsOutFragCreates;
475 	/* # fragments to reassemble		{ ipIfStatsEntry 14 } */
476 	Counter	ipIfStatsReasmReqds;
477 	/* # packets after reassembly		{ ipIfStatsEntry 15 } */
478 	Counter	ipIfStatsReasmOKs;
479 	/* # reassembly failed			{ ipIfStatsEntry 16 } */
480 	Counter	ipIfStatsReasmFails;
481 	/* # received multicast packets		{ ipIfStatsEntry 34 } */
482 	Counter	ipIfStatsInMcastPkts;
483 	/* # transmitted multicast packets	{ ipIfStatsEntry 38 } */
484 	Counter	ipIfStatsOutMcastPkts;
485 
486 	/*
487 	 * In addition to defined MIBs
488 	 */
489 
490 	/* # discarded due to no route to dest 	{ ipSystemStatsEntry 22 } */
491 	Counter	ipIfStatsOutNoRoutes;
492 	/* # of complete duplicates in reassembly */
493 	Counter	ipIfStatsReasmDuplicates;
494 	/* # of partial duplicates in reassembly */
495 	Counter	ipIfStatsReasmPartDups;
496 	/* # of packets not forwarded due to adminstrative reasons */
497 	Counter	ipIfStatsForwProhibits;
498 	/* # of UDP packets with bad UDP checksums */
499 	Counter udpInCksumErrs;
500 #define	udpIfStatsInCksumErrs	udpInCksumErrs
501 	/* # of UDP packets droped due to queue overflow */
502 	Counter udpInOverflows;
503 #define	udpIfStatsInOverflows	udpInOverflows
504 	/*
505 	 * # of RAW IP packets (all IP protocols except UDP, TCP
506 	 * and ICMP) droped due to queue overflow
507 	 */
508 	Counter rawipInOverflows;
509 #define	rawipIfStatsInOverflows	rawipInOverflows
510 
511 	/*
512 	 * # of IP packets received with the wrong version (i.e., not equal
513 	 * to ipIfStatsIPVersion) and that were dropped.
514 	 */
515 	Counter ipIfStatsInWrongIPVersion;
516 	/*
517 	 * This counter is no longer used
518 	 */
519 	Counter ipIfStatsOutWrongIPVersion;
520 	/*
521 	 * This counter is no longer used
522 	 */
523 	Counter ipIfStatsOutSwitchIPVersion;
524 
525 	/*
526 	 * Fields defined in RFC 4293
527 	 */
528 
529 	/* ip version				{ ipIfStatsEntry 1 } */
530 	int		ipIfStatsIPVersion;
531 	/* # input datagrams (incl errors)	{ ipIfStatsEntry 4 } */
532 	Counter64	ipIfStatsHCInReceives;
533 	/* # input octets (incl errors)		{ ipIfStatsEntry 6 } */
534 	Counter64	ipIfStatsHCInOctets;
535 	/*
536 	 *					{ ipIfStatsEntry 13 }
537 	 * # input datagrams for which a forwarding attempt was made
538 	 */
539 	Counter64	ipIfStatsHCInForwDatagrams;
540 	/* # delivered to upper layer protocols	{ ipIfStatsEntry 19 } */
541 	Counter64	ipIfStatsHCInDelivers;
542 	/* # originated out interface		{ ipIfStatsEntry 21 } */
543 	Counter64	ipIfStatsHCOutRequests;
544 	/* # forwarded out interface		{ ipIfStatsEntry 23 } */
545 	Counter64	ipIfStatsHCOutForwDatagrams;
546 	/* # dg's requiring fragmentation 	{ ipIfStatsEntry 26 } */
547 	Counter		ipIfStatsOutFragReqds;
548 	/* # output datagrams			{ ipIfStatsEntry 31 } */
549 	Counter64	ipIfStatsHCOutTransmits;
550 	/* # output octets			{ ipIfStatsEntry 33 } */
551 	Counter64	ipIfStatsHCOutOctets;
552 	/* # received multicast datagrams	{ ipIfStatsEntry 35 } */
553 	Counter64	ipIfStatsHCInMcastPkts;
554 	/* # received multicast octets		{ ipIfStatsEntry 37 } */
555 	Counter64	ipIfStatsHCInMcastOctets;
556 	/* # transmitted multicast datagrams	{ ipIfStatsEntry 39 } */
557 	Counter64	ipIfStatsHCOutMcastPkts;
558 	/* # transmitted multicast octets	{ ipIfStatsEntry 41 } */
559 	Counter64	ipIfStatsHCOutMcastOctets;
560 	/* # received broadcast datagrams	{ ipIfStatsEntry 43 } */
561 	Counter64	ipIfStatsHCInBcastPkts;
562 	/* # transmitted broadcast datagrams	{ ipIfStatsEntry 45 } */
563 	Counter64	ipIfStatsHCOutBcastPkts;
564 
565 	/*
566 	 * Fields defined in mib2_ip_t
567 	 */
568 
569 	/* # of incoming packets that succeeded policy checks */
570 	Counter		ipsecInSucceeded;
571 #define	ipsecIfStatsInSucceeded	ipsecInSucceeded
572 	/* # of incoming packets that failed policy checks */
573 	Counter		ipsecInFailed;
574 #define	ipsecIfStatsInFailed	ipsecInFailed
575 	/* # of bad IP header checksums */
576 	Counter		ipInCksumErrs;
577 #define	ipIfStatsInCksumErrs	ipInCksumErrs
578 	/* total # of segments recv'd with error	{ tcp 14 } */
579 	Counter		tcpInErrs;
580 #define	tcpIfStatsInErrs	tcpInErrs
581 	/* # of recv'd dg's not deliverable (no appl.)	{ udp 2 } */
582 	Counter		udpNoPorts;
583 #define	udpIfStatsNoPorts	udpNoPorts
584 } mib2_ipIfStatsEntry_t;
585 #define	MIB_FIRST_NEW_ELM_mib2_ipIfStatsEntry_t	ipIfStatsIPVersion
586 
587 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
588 #pragma pack()
589 #endif
590 
591 /*
592  * The IP address table contains this entity's IP addressing information.
593  *
594  *	ipAddrTable OBJECT-TYPE
595  *		SYNTAX  SEQUENCE OF IpAddrEntry
596  *		ACCESS  not-accessible
597  *		STATUS  mandatory
598  *		DESCRIPTION
599  *			"The table of addressing information relevant to
600  *			this entity's IP addresses."
601  *		::= { ip 20 }
602  */
603 
604 typedef struct mib2_ipAddrEntry {
605 			/* IP address of this entry	{ipAddrEntry 1} */
606 	IpAddress	ipAdEntAddr;
607 			/* Unique interface index	{ipAddrEntry 2} */
608 	DeviceName	ipAdEntIfIndex;
609 			/* Subnet mask for this IP addr	{ipAddrEntry 3} */
610 	IpAddress	ipAdEntNetMask;
611 			/* 2^lsb of IP broadcast addr	{ipAddrEntry 4} */
612 	int		ipAdEntBcastAddr;
613 			/* max size for dg reassembly	{ipAddrEntry 5} */
614 	int		ipAdEntReasmMaxSize;
615 			/* additional ipif_t fields */
616 	struct ipAdEntInfo_s {
617 		Gauge		ae_mtu;
618 				/* BSD if metric */
619 		int		ae_metric;
620 				/* ipif broadcast addr.  relation to above?? */
621 		IpAddress	ae_broadcast_addr;
622 				/* point-point dest addr */
623 		IpAddress	ae_pp_dst_addr;
624 		int		ae_flags;	/* IFF_* flags in if.h */
625 		Counter		ae_ibcnt;	/* Inbound packets */
626 		Counter		ae_obcnt;	/* Outbound packets */
627 		Counter		ae_focnt;	/* Forwarded packets */
628 		IpAddress	ae_subnet;	/* Subnet prefix */
629 		int		ae_subnet_len;	/* Subnet prefix length */
630 		IpAddress	ae_src_addr;	/* Source address */
631 	}		ipAdEntInfo;
632 	uint32_t	ipAdEntRetransmitTime;  /* ipInterfaceRetransmitTime */
633 } mib2_ipAddrEntry_t;
634 #define	MIB_FIRST_NEW_ELM_mib2_ipAddrEntry_t	ipAdEntRetransmitTime
635 
636 /*
637  *	ipv6AddrTable OBJECT-TYPE
638  *		SYNTAX      SEQUENCE OF Ipv6AddrEntry
639  *		MAX-ACCESS  not-accessible
640  *		STATUS      current
641  *		DESCRIPTION
642  *			"The table of addressing information relevant to
643  *			this node's interface addresses."
644  *		::= { ipv6MIBObjects 8 }
645  */
646 
647 typedef struct mib2_ipv6AddrEntry {
648 	/* Unique interface index			{ Part of INDEX } */
649 	DeviceName	ipv6AddrIfIndex;
650 
651 	/* IPv6 address of this entry			{ ipv6AddrEntry 1 } */
652 	Ip6Address	ipv6AddrAddress;
653 	/* Prefix length				{ ipv6AddrEntry 2 } */
654 	uint_t		ipv6AddrPfxLength;
655 	/* Type: stateless(1), stateful(2), unknown(3)	{ ipv6AddrEntry 3 } */
656 	uint_t		ipv6AddrType;
657 	/* Anycast: true(1), false(2)			{ ipv6AddrEntry 4 } */
658 	uint_t		ipv6AddrAnycastFlag;
659 	/*
660 	 * Address status: preferred(1), deprecated(2), invalid(3),
661 	 * inaccessible(4), unknown(5)			{ ipv6AddrEntry 5 }
662 	 */
663 	uint_t		ipv6AddrStatus;
664 	struct ipv6AddrInfo_s {
665 		Gauge		ae_mtu;
666 				/* BSD if metric */
667 		int		ae_metric;
668 				/* point-point dest addr */
669 		Ip6Address	ae_pp_dst_addr;
670 		int		ae_flags;	/* IFF_* flags in if.h */
671 		Counter		ae_ibcnt;	/* Inbound packets */
672 		Counter		ae_obcnt;	/* Outbound packets */
673 		Counter		ae_focnt;	/* Forwarded packets */
674 		Ip6Address	ae_subnet;	/* Subnet prefix */
675 		int		ae_subnet_len;	/* Subnet prefix length */
676 		Ip6Address	ae_src_addr;	/* Source address */
677 	}		ipv6AddrInfo;
678 	uint32_t	ipv6AddrReasmMaxSize;	/* InterfaceReasmMaxSize */
679 	Ip6Address	ipv6AddrIdentifier;	/* InterfaceIdentifier */
680 	uint32_t	ipv6AddrIdentifierLen;
681 	uint32_t	ipv6AddrReachableTime;	/* InterfaceReachableTime */
682 	uint32_t	ipv6AddrRetransmitTime; /* InterfaceRetransmitTime */
683 } mib2_ipv6AddrEntry_t;
684 #define	MIB_FIRST_NEW_ELM_mib2_ipv6AddrEntry_t	ipv6AddrReasmMaxSize
685 
686 /*
687  * The IP routing table contains an entry for each route presently known to
688  * this entity. (for IPv4 routes)
689  *
690  *	ipRouteTable OBJECT-TYPE
691  *		SYNTAX  SEQUENCE OF IpRouteEntry
692  *		ACCESS  not-accessible
693  *		STATUS  mandatory
694  *		DESCRIPTION
695  *			"This entity's IP Routing table."
696  *		::= { ip 21 }
697  */
698 
699 typedef struct mib2_ipRouteEntry {
700 		/* dest ip addr for this route		{ipRouteEntry 1 } RW */
701 	IpAddress	ipRouteDest;
702 		/* unique interface index for this hop	{ipRouteEntry 2 } RW */
703 	DeviceName	ipRouteIfIndex;
704 		/* primary route metric 		{ipRouteEntry 3 } RW */
705 	int		ipRouteMetric1;
706 		/* alternate route metric 		{ipRouteEntry 4 } RW */
707 	int		ipRouteMetric2;
708 		/* alternate route metric 		{ipRouteEntry 5 } RW */
709 	int		ipRouteMetric3;
710 		/* alternate route metric 		{ipRouteEntry 6 } RW */
711 	int		ipRouteMetric4;
712 		/* ip addr of next hop on this route	{ipRouteEntry 7 } RW */
713 	IpAddress	ipRouteNextHop;
714 		/* other(1), inval(2), dir(3), indir(4)	{ipRouteEntry 8 } RW */
715 	int		ipRouteType;
716 		/* mechanism by which route was learned	{ipRouteEntry 9 } */
717 	int		ipRouteProto;
718 		/* sec's since last update of route	{ipRouteEntry 10} RW */
719 	int		ipRouteAge;
720 		/* 					{ipRouteEntry 11} RW */
721 	IpAddress	ipRouteMask;
722 		/* alternate route metric 		{ipRouteEntry 12} RW */
723 	int		ipRouteMetric5;
724 		/* additional info from ire's		{ipRouteEntry 13 } */
725 	struct ipRouteInfo_s {
726 		Gauge		re_max_frag;
727 		Gauge		re_rtt;
728 		Counter		re_ref;
729 		int		re_frag_flag;
730 		IpAddress	re_src_addr;
731 		int		re_ire_type;
732 		Counter		re_obpkt;
733 		Counter		re_ibpkt;
734 		int		re_flags;
735 		/*
736 		 * The following two elements (re_in_ill and re_in_src_addr)
737 		 * are no longer used but are left here for the benefit of
738 		 * old Apps that won't be able to handle the change in the
739 		 * size of this struct. These elements will always be
740 		 * set to zeroes.
741 		 */
742 		DeviceName	re_in_ill;	/* Input interface */
743 		IpAddress	re_in_src_addr;	/* Input source address */
744 	} 		ipRouteInfo;
745 } mib2_ipRouteEntry_t;
746 
747 /*
748  * The IPv6 routing table contains an entry for each route presently known to
749  * this entity.
750  *
751  *	ipv6RouteTable OBJECT-TYPE
752  *		SYNTAX  SEQUENCE OF IpRouteEntry
753  *		ACCESS  not-accessible
754  *		STATUS  current
755  *		DESCRIPTION
756  *			"IPv6 Routing table. This table contains
757  *			an entry for each valid IPv6 unicast route
758  *			that can be used for packet forwarding
759  *			determination."
760  *		::= { ipv6MIBObjects 11 }
761  */
762 
763 typedef struct mib2_ipv6RouteEntry {
764 		/* dest ip addr for this route		{ ipv6RouteEntry 1 } */
765 	Ip6Address	ipv6RouteDest;
766 		/* prefix length 			{ ipv6RouteEntry 2 } */
767 	int		ipv6RoutePfxLength;
768 		/* unique route index 			{ ipv6RouteEntry 3 } */
769 	unsigned	ipv6RouteIndex;
770 		/* unique interface index for this hop	{ ipv6RouteEntry 4 } */
771 	DeviceName	ipv6RouteIfIndex;
772 		/* IPv6 addr of next hop on this route	{ ipv6RouteEntry 5 } */
773 	Ip6Address	ipv6RouteNextHop;
774 		/* other(1), discard(2), local(3), remote(4) */
775 		/* 					{ ipv6RouteEntry 6 } */
776 	int		ipv6RouteType;
777 		/* mechanism by which route was learned	{ ipv6RouteEntry 7 } */
778 		/*
779 		 * other(1), local(2), netmgmt(3), ndisc(4), rip(5), ospf(6),
780 		 * bgp(7), idrp(8), igrp(9)
781 		 */
782 	int		ipv6RouteProtocol;
783 		/* policy hook or traffic class		{ ipv6RouteEntry 8 } */
784 	unsigned	ipv6RoutePolicy;
785 		/* sec's since last update of route	{ ipv6RouteEntry 9} */
786 	int		ipv6RouteAge;
787 		/* Routing domain ID of the next hop	{ ipv6RouteEntry 10 } */
788 	unsigned	ipv6RouteNextHopRDI;
789 		/* route metric				{ ipv6RouteEntry 11 } */
790 	unsigned	ipv6RouteMetric;
791 		/* preference (impl specific)		{ ipv6RouteEntry 12 } */
792 	unsigned	ipv6RouteWeight;
793 		/* additional info from ire's		{ } */
794 	struct ipv6RouteInfo_s {
795 		Gauge		re_max_frag;
796 		Gauge		re_rtt;
797 		Counter		re_ref;
798 		int		re_frag_flag;
799 		Ip6Address	re_src_addr;
800 		int		re_ire_type;
801 		Counter		re_obpkt;
802 		Counter		re_ibpkt;
803 		int		re_flags;
804 	} 		ipv6RouteInfo;
805 } mib2_ipv6RouteEntry_t;
806 
807 /*
808  * The IPv4 and IPv6 routing table entries on a trusted system also have
809  * security attributes in the form of label ranges.  This experimental
810  * interface provides information about these labels.
811  *
812  * Each entry in this table contains a label range and an index that refers
813  * back to the entry in the routing table to which it applies.  There may be 0,
814  * 1, or many label ranges for each routing table entry.
815  *
816  * (opthdr.level is set to MIB2_IP for IPv4 entries and MIB2_IP6 for IPv6.
817  * opthdr.name is set to EXPER_IP_GWATTR.)
818  *
819  *	ipRouteAttributeTable OBJECT-TYPE
820  *		SYNTAX  SEQUENCE OF IpAttributeEntry
821  *		ACCESS  not-accessible
822  *		STATUS  current
823  *		DESCRIPTION
824  *			"IPv4 routing attributes table.  This table contains
825  *			an entry for each valid trusted label attached to a
826  *			route in the system."
827  *		::= { ip 102 }
828  *
829  *	ipv6RouteAttributeTable OBJECT-TYPE
830  *		SYNTAX  SEQUENCE OF IpAttributeEntry
831  *		ACCESS  not-accessible
832  *		STATUS  current
833  *		DESCRIPTION
834  *			"IPv6 routing attributes table.  This table contains
835  *			an entry for each valid trusted label attached to a
836  *			route in the system."
837  *		::= { ip6 102 }
838  */
839 
840 typedef struct mib2_ipAttributeEntry {
841 	uint_t		iae_routeidx;
842 	int		iae_doi;
843 	brange_t	iae_slrange;
844 } mib2_ipAttributeEntry_t;
845 
846 /*
847  * The IP address translation table contain the IpAddress to
848  * `physical' address equivalences.  Some interfaces do not
849  * use translation tables for determining address
850  * equivalences (e.g., DDN-X.25 has an algorithmic method);
851  * if all interfaces are of this type, then the Address
852  * Translation table is empty, i.e., has zero entries.
853  *
854  *	ipNetToMediaTable OBJECT-TYPE
855  *		SYNTAX  SEQUENCE OF IpNetToMediaEntry
856  *		ACCESS  not-accessible
857  *		STATUS  mandatory
858  *		DESCRIPTION
859  *			"The IP Address Translation table used for mapping
860  *			from IP addresses to physical addresses."
861  *		::= { ip 22 }
862  */
863 
864 typedef struct mib2_ipNetToMediaEntry {
865 	/* Unique interface index		{ ipNetToMediaEntry 1 } RW */
866 	DeviceName	ipNetToMediaIfIndex;
867 	/* Media dependent physical addr	{ ipNetToMediaEntry 2 } RW */
868 	PhysAddress	ipNetToMediaPhysAddress;
869 	/* ip addr for this physical addr	{ ipNetToMediaEntry 3 } RW */
870 	IpAddress	ipNetToMediaNetAddress;
871 	/* other(1), inval(2), dyn(3), stat(4)	{ ipNetToMediaEntry 4 } RW */
872 	int		ipNetToMediaType;
873 	struct ipNetToMediaInfo_s {
874 		PhysAddress	ntm_mask;	/* subnet mask for entry */
875 		int		ntm_flags;	/* ACE_F_* flags in arp.h */
876 	}		ipNetToMediaInfo;
877 } mib2_ipNetToMediaEntry_t;
878 
879 /*
880  *	ipv6NetToMediaTable OBJECT-TYPE
881  *		 SYNTAX      SEQUENCE OF Ipv6NetToMediaEntry
882  *		 MAX-ACCESS  not-accessible
883  *		 STATUS      current
884  *		 DESCRIPTION
885  *			"The IPv6 Address Translation table used for
886  *			mapping from IPv6 addresses to physical addresses.
887  *
888  *			The IPv6 address translation table contain the
889  *			Ipv6Address to `physical' address equivalencies.
890  *			Some interfaces do not use translation tables
891  *			for determining address equivalencies; if all
892  *			interfaces are of this type, then the Address
893  *			Translation table is empty, i.e., has zero
894  *			entries."
895  *		::= { ipv6MIBObjects 12 }
896  */
897 
898 typedef struct mib2_ipv6NetToMediaEntry {
899 	/* Unique interface index		{ Part of INDEX } */
900 	DeviceIndex	ipv6NetToMediaIfIndex;
901 
902 	/* ip addr for this physical addr	{ ipv6NetToMediaEntry 1 } */
903 	Ip6Address	ipv6NetToMediaNetAddress;
904 	/* Media dependent physical addr	{ ipv6NetToMediaEntry 2 } */
905 	PhysAddress	ipv6NetToMediaPhysAddress;
906 	/*
907 	 * Type of mapping
908 	 * other(1), dynamic(2), static(3), local(4)
909 	 *					{ ipv6NetToMediaEntry 3 }
910 	 */
911 	int		ipv6NetToMediaType;
912 	/*
913 	 * NUD state
914 	 * reachable(1), stale(2), delay(3), probe(4), invalid(5), unknown(6)
915 	 * Note: The kernel returns ND_* states.
916 	 *					{ ipv6NetToMediaEntry 4 }
917 	 */
918 	int		ipv6NetToMediaState;
919 	/* sysUpTime last time entry was updated { ipv6NetToMediaEntry 5 } */
920 	int		ipv6NetToMediaLastUpdated;
921 } mib2_ipv6NetToMediaEntry_t;
922 
923 
924 /*
925  * List of group members per interface
926  */
927 typedef struct ip_member {
928 	/* Interface index */
929 	DeviceName	ipGroupMemberIfIndex;
930 	/* IP Multicast address */
931 	IpAddress	ipGroupMemberAddress;
932 	/* Number of member sockets */
933 	Counter		ipGroupMemberRefCnt;
934 	/* Filter mode: 1 => include, 2 => exclude */
935 	int		ipGroupMemberFilterMode;
936 } ip_member_t;
937 
938 
939 /*
940  * List of IPv6 group members per interface
941  */
942 typedef struct ipv6_member {
943 	/* Interface index */
944 	DeviceIndex	ipv6GroupMemberIfIndex;
945 	/* IP Multicast address */
946 	Ip6Address	ipv6GroupMemberAddress;
947 	/* Number of member sockets */
948 	Counter		ipv6GroupMemberRefCnt;
949 	/* Filter mode: 1 => include, 2 => exclude */
950 	int		ipv6GroupMemberFilterMode;
951 } ipv6_member_t;
952 
953 /*
954  * This is used to mark transport layer entities (e.g., TCP connections) that
955  * are capable of receiving packets from a range of labels.  'level' is set to
956  * the protocol of interest (e.g., MIB2_TCP), and 'name' is set to
957  * EXPER_XPORT_MLP.  The tme_connidx refers back to the entry in MIB2_TCP_CONN,
958  * MIB2_TCP6_CONN, or MIB2_SCTP_CONN.
959  *
960  * It is also used to report connections that receive packets at a single label
961  * that's other than the zone's label.  This is the case when a TCP connection
962  * is accepted from a particular peer using an MLP listener.
963  */
964 typedef struct mib2_transportMLPEntry {
965 	uint_t		tme_connidx;
966 	uint_t		tme_flags;
967 	int		tme_doi;
968 	bslabel_t	tme_label;
969 } mib2_transportMLPEntry_t;
970 
971 #define	MIB2_TMEF_PRIVATE	0x00000001	/* MLP on private addresses */
972 #define	MIB2_TMEF_SHARED	0x00000002	/* MLP on shared addresses */
973 #define	MIB2_TMEF_ANONMLP	0x00000004	/* Anonymous MLP port */
974 #define	MIB2_TMEF_MACEXEMPT	0x00000008	/* MAC-Exempt port */
975 #define	MIB2_TMEF_IS_LABELED	0x00000010	/* tme_doi & tme_label exists */
976 #define	MIB2_TMEF_MACIMPLICIT	0x00000020	/* MAC-Implicit */
977 /*
978  * List of IPv4 source addresses being filtered per interface
979  */
980 typedef struct ip_grpsrc {
981 	/* Interface index */
982 	DeviceName	ipGroupSourceIfIndex;
983 	/* IP Multicast address */
984 	IpAddress	ipGroupSourceGroup;
985 	/* IP Source address */
986 	IpAddress	ipGroupSourceAddress;
987 } ip_grpsrc_t;
988 
989 
990 /*
991  * List of IPv6 source addresses being filtered per interface
992  */
993 typedef struct ipv6_grpsrc {
994 	/* Interface index */
995 	DeviceIndex	ipv6GroupSourceIfIndex;
996 	/* IP Multicast address */
997 	Ip6Address	ipv6GroupSourceGroup;
998 	/* IP Source address */
999 	Ip6Address	ipv6GroupSourceAddress;
1000 } ipv6_grpsrc_t;
1001 
1002 
1003 /*
1004  * List of destination cache entries
1005  */
1006 typedef struct dest_cache_entry {
1007 	/* IP Multicast address */
1008 	IpAddress	DestIpv4Address;
1009 	Ip6Address	DestIpv6Address;
1010 	uint_t		DestFlags;	/* DCEF_* */
1011 	uint32_t	DestPmtu;	/* Path MTU if DCEF_PMTU */
1012 	uint32_t	DestIdent;	/* Per destination IP ident. */
1013 	DeviceIndex	DestIfindex;	/* For IPv6 link-locals */
1014 	uint32_t	DestAge;	/* Age of MTU info in seconds */
1015 } dest_cache_entry_t;
1016 
1017 
1018 /*
1019  * ICMP Group
1020  */
1021 typedef struct mib2_icmp {
1022 	/* total # of recv'd ICMP msgs			{ icmp 1 } */
1023 	Counter	icmpInMsgs;
1024 	/* recv'd ICMP msgs with errors			{ icmp 2 } */
1025 	Counter	icmpInErrors;
1026 	/* recv'd "dest unreachable" msg's		{ icmp 3 } */
1027 	Counter	icmpInDestUnreachs;
1028 	/* recv'd "time exceeded" msg's			{ icmp 4 } */
1029 	Counter	icmpInTimeExcds;
1030 	/* recv'd "parameter problem" msg's		{ icmp 5 } */
1031 	Counter	icmpInParmProbs;
1032 	/* recv'd "source quench" msg's			{ icmp 6 } */
1033 	Counter	icmpInSrcQuenchs;
1034 	/* recv'd "ICMP redirect" msg's			{ icmp 7 } */
1035 	Counter	icmpInRedirects;
1036 	/* recv'd "echo request" msg's			{ icmp 8 } */
1037 	Counter	icmpInEchos;
1038 	/* recv'd "echo reply" msg's			{ icmp 9 } */
1039 	Counter	icmpInEchoReps;
1040 	/* recv'd "timestamp" msg's			{ icmp 10 } */
1041 	Counter	icmpInTimestamps;
1042 	/* recv'd "timestamp reply" msg's		{ icmp 11 } */
1043 	Counter	icmpInTimestampReps;
1044 	/* recv'd "address mask request" msg's		{ icmp 12 } */
1045 	Counter	icmpInAddrMasks;
1046 	/* recv'd "address mask reply" msg's		{ icmp 13 } */
1047 	Counter	icmpInAddrMaskReps;
1048 	/* total # of sent ICMP msg's			{ icmp 14 } */
1049 	Counter	icmpOutMsgs;
1050 	/* # of msg's not sent for internal icmp errors	{ icmp 15 } */
1051 	Counter	icmpOutErrors;
1052 	/* # of "dest unreachable" msg's sent		{ icmp 16 } */
1053 	Counter	icmpOutDestUnreachs;
1054 	/* # of "time exceeded" msg's sent		{ icmp 17 } */
1055 	Counter	icmpOutTimeExcds;
1056 	/* # of "parameter problme" msg's sent		{ icmp 18 } */
1057 	Counter	icmpOutParmProbs;
1058 	/* # of "source quench" msg's sent		{ icmp 19 } */
1059 	Counter	icmpOutSrcQuenchs;
1060 	/* # of "ICMP redirect" msg's sent		{ icmp 20 } */
1061 	Counter	icmpOutRedirects;
1062 	/* # of "Echo request" msg's sent		{ icmp 21 } */
1063 	Counter	icmpOutEchos;
1064 	/* # of "Echo reply" msg's sent			{ icmp 22 } */
1065 	Counter	icmpOutEchoReps;
1066 	/* # of "timestamp request" msg's sent		{ icmp 23 } */
1067 	Counter	icmpOutTimestamps;
1068 	/* # of "timestamp reply" msg's sent		{ icmp 24 } */
1069 	Counter	icmpOutTimestampReps;
1070 	/* # of "address mask request" msg's sent	{ icmp 25 } */
1071 	Counter	icmpOutAddrMasks;
1072 	/* # of "address mask reply" msg's sent		{ icmp 26 } */
1073 	Counter	icmpOutAddrMaskReps;
1074 /*
1075  * In addition to MIB-II
1076  */
1077 	/* # of received packets with checksum errors */
1078 	Counter	icmpInCksumErrs;
1079 	/* # of received packets with unknow codes */
1080 	Counter	icmpInUnknowns;
1081 	/* # of received unreachables with "fragmentation needed" */
1082 	Counter	icmpInFragNeeded;
1083 	/* # of sent unreachables with "fragmentation needed" */
1084 	Counter	icmpOutFragNeeded;
1085 	/*
1086 	 * # of msg's not sent since original packet was broadcast/multicast
1087 	 * or an ICMP error packet
1088 	 */
1089 	Counter	icmpOutDrops;
1090 	/* # of ICMP packets droped due to queue overflow */
1091 	Counter icmpInOverflows;
1092 	/* recv'd "ICMP redirect" msg's	that are bad thus ignored */
1093 	Counter	icmpInBadRedirects;
1094 } mib2_icmp_t;
1095 
1096 
1097 /*
1098  *	ipv6IfIcmpEntry OBJECT-TYPE
1099  *		SYNTAX      Ipv6IfIcmpEntry
1100  *		MAX-ACCESS  not-accessible
1101  *		STATUS      current
1102  *		DESCRIPTION
1103  *			"An ICMPv6 statistics entry containing
1104  *			objects at a particular IPv6 interface.
1105  *
1106  *			Note that a receiving interface is
1107  *			the interface to which a given ICMPv6 message
1108  *			is addressed which may not be necessarily
1109  *			the input interface for the message.
1110  *
1111  *			Similarly, the sending interface is
1112  *			the interface that sources a given
1113  *			ICMP message which is usually but not
1114  *			necessarily the output interface for the message."
1115  *		AUGMENTS { ipv6IfEntry }
1116  *		::= { ipv6IfIcmpTable 1 }
1117  *
1118  * Per-interface ICMPv6 statistics table
1119  */
1120 
1121 typedef struct mib2_ipv6IfIcmpEntry {
1122 	/* Local ifindex to identify the interface */
1123 	DeviceIndex	ipv6IfIcmpIfIndex;
1124 
1125 	int		ipv6IfIcmpEntrySize;	/* Size of ipv6IfIcmpEntry */
1126 
1127 	/* The total # ICMP msgs rcvd includes ipv6IfIcmpInErrors */
1128 	Counter32	ipv6IfIcmpInMsgs;
1129 	/* # ICMP with ICMP-specific errors (bad checkum, length, etc) */
1130 	Counter32	ipv6IfIcmpInErrors;
1131 	/* # ICMP Destination Unreachable */
1132 	Counter32	ipv6IfIcmpInDestUnreachs;
1133 	/* # ICMP destination unreachable/communication admin prohibited */
1134 	Counter32	ipv6IfIcmpInAdminProhibs;
1135 	Counter32	ipv6IfIcmpInTimeExcds;
1136 	Counter32	ipv6IfIcmpInParmProblems;
1137 	Counter32	ipv6IfIcmpInPktTooBigs;
1138 	Counter32	ipv6IfIcmpInEchos;
1139 	Counter32	ipv6IfIcmpInEchoReplies;
1140 	Counter32	ipv6IfIcmpInRouterSolicits;
1141 	Counter32	ipv6IfIcmpInRouterAdvertisements;
1142 	Counter32	ipv6IfIcmpInNeighborSolicits;
1143 	Counter32	ipv6IfIcmpInNeighborAdvertisements;
1144 	Counter32	ipv6IfIcmpInRedirects;
1145 	Counter32	ipv6IfIcmpInGroupMembQueries;
1146 	Counter32	ipv6IfIcmpInGroupMembResponses;
1147 	Counter32	ipv6IfIcmpInGroupMembReductions;
1148 	/* Total # ICMP messages attempted to send (includes OutErrors) */
1149 	Counter32	ipv6IfIcmpOutMsgs;
1150 	/* # ICMP messages not sent due to ICMP problems (e.g. no buffers) */
1151 	Counter32	ipv6IfIcmpOutErrors;
1152 	Counter32	ipv6IfIcmpOutDestUnreachs;
1153 	Counter32	ipv6IfIcmpOutAdminProhibs;
1154 	Counter32	ipv6IfIcmpOutTimeExcds;
1155 	Counter32	ipv6IfIcmpOutParmProblems;
1156 	Counter32	ipv6IfIcmpOutPktTooBigs;
1157 	Counter32	ipv6IfIcmpOutEchos;
1158 	Counter32	ipv6IfIcmpOutEchoReplies;
1159 	Counter32	ipv6IfIcmpOutRouterSolicits;
1160 	Counter32	ipv6IfIcmpOutRouterAdvertisements;
1161 	Counter32	ipv6IfIcmpOutNeighborSolicits;
1162 	Counter32	ipv6IfIcmpOutNeighborAdvertisements;
1163 	Counter32	ipv6IfIcmpOutRedirects;
1164 	Counter32	ipv6IfIcmpOutGroupMembQueries;
1165 	Counter32	ipv6IfIcmpOutGroupMembResponses;
1166 	Counter32	ipv6IfIcmpOutGroupMembReductions;
1167 /* Additions beyond the MIB */
1168 	Counter32	ipv6IfIcmpInOverflows;
1169 	/* recv'd "ICMPv6 redirect" msg's that are bad thus ignored */
1170 	Counter32	ipv6IfIcmpBadHoplimit;
1171 	Counter32	ipv6IfIcmpInBadNeighborAdvertisements;
1172 	Counter32	ipv6IfIcmpInBadNeighborSolicitations;
1173 	Counter32	ipv6IfIcmpInBadRedirects;
1174 	Counter32	ipv6IfIcmpInGroupMembTotal;
1175 	Counter32	ipv6IfIcmpInGroupMembBadQueries;
1176 	Counter32	ipv6IfIcmpInGroupMembBadReports;
1177 	Counter32	ipv6IfIcmpInGroupMembOurReports;
1178 } mib2_ipv6IfIcmpEntry_t;
1179 
1180 /*
1181  * the TCP group
1182  *
1183  * Note that instances of object types that represent
1184  * information about a particular TCP connection are
1185  * transient; they persist only as long as the connection
1186  * in question.
1187  */
1188 #define	MIB2_TCP_CONN	13	/* tcpConnEntry */
1189 #define	MIB2_TCP6_CONN	14	/* tcp6ConnEntry */
1190 
1191 /* Old name retained for compatibility */
1192 #define	MIB2_TCP_13	MIB2_TCP_CONN
1193 
1194 /* Pack data in mib2_tcp to make struct size the same for 32- and 64-bits */
1195 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1196 #pragma pack(4)
1197 #endif
1198 typedef struct mib2_tcp {
1199 		/* algorithm used for transmit timeout value	{ tcp 1 } */
1200 	int	tcpRtoAlgorithm;
1201 		/* minimum retransmit timeout (ms)		{ tcp 2 } */
1202 	int	tcpRtoMin;
1203 		/* maximum retransmit timeout (ms)		{ tcp 3 } */
1204 	int	tcpRtoMax;
1205 		/* maximum # of connections supported		{ tcp 4 } */
1206 	int	tcpMaxConn;
1207 		/* # of direct transitions CLOSED -> SYN-SENT	{ tcp 5 } */
1208 	Counter	tcpActiveOpens;
1209 		/* # of direct transitions LISTEN -> SYN-RCVD	{ tcp 6 } */
1210 	Counter	tcpPassiveOpens;
1211 		/* # of direct SIN-SENT/RCVD -> CLOSED/LISTEN	{ tcp 7 } */
1212 	Counter	tcpAttemptFails;
1213 		/* # of direct ESTABLISHED/CLOSE-WAIT -> CLOSED	{ tcp 8 } */
1214 	Counter	tcpEstabResets;
1215 		/* # of connections ESTABLISHED or CLOSE-WAIT	{ tcp 9 } */
1216 	Gauge	tcpCurrEstab;
1217 		/* total # of segments recv'd			{ tcp 10 } */
1218 	Counter	tcpInSegs;
1219 		/* total # of segments sent			{ tcp 11 } */
1220 	Counter	tcpOutSegs;
1221 		/* total # of segments retransmitted		{ tcp 12 } */
1222 	Counter	tcpRetransSegs;
1223 		/* {tcp 13} */
1224 	int	tcpConnTableSize;	/* Size of tcpConnEntry_t */
1225 	/* in ip				{tcp 14} */
1226 		/* # of segments sent with RST flag		{ tcp 15 } */
1227 	Counter	tcpOutRsts;
1228 /* In addition to MIB-II */
1229 /* Sender */
1230 	/* total # of data segments sent */
1231 	Counter tcpOutDataSegs;
1232 	/* total # of bytes in data segments sent */
1233 	Counter tcpOutDataBytes;
1234 	/* total # of bytes in segments retransmitted */
1235 	Counter tcpRetransBytes;
1236 	/* total # of acks sent */
1237 	Counter tcpOutAck;
1238 	/* total # of delayed acks sent */
1239 	Counter tcpOutAckDelayed;
1240 	/* total # of segments sent with the urg flag on */
1241 	Counter tcpOutUrg;
1242 	/* total # of window updates sent */
1243 	Counter tcpOutWinUpdate;
1244 	/* total # of zero window probes sent */
1245 	Counter tcpOutWinProbe;
1246 	/* total # of control segments sent (syn, fin, rst) */
1247 	Counter tcpOutControl;
1248 	/* total # of segments sent due to "fast retransmit" */
1249 	Counter tcpOutFastRetrans;
1250 /* Receiver */
1251 	/* total # of ack segments received */
1252 	Counter tcpInAckSegs;
1253 	/* total # of bytes acked */
1254 	Counter tcpInAckBytes;
1255 	/* total # of duplicate acks */
1256 	Counter tcpInDupAck;
1257 	/* total # of acks acking unsent data */
1258 	Counter tcpInAckUnsent;
1259 	/* total # of data segments received in order */
1260 	Counter tcpInDataInorderSegs;
1261 	/* total # of data bytes received in order */
1262 	Counter tcpInDataInorderBytes;
1263 	/* total # of data segments received out of order */
1264 	Counter tcpInDataUnorderSegs;
1265 	/* total # of data bytes received out of order */
1266 	Counter tcpInDataUnorderBytes;
1267 	/* total # of complete duplicate data segments received */
1268 	Counter tcpInDataDupSegs;
1269 	/* total # of bytes in the complete duplicate data segments received */
1270 	Counter tcpInDataDupBytes;
1271 	/* total # of partial duplicate data segments received */
1272 	Counter tcpInDataPartDupSegs;
1273 	/* total # of bytes in the partial duplicate data segments received */
1274 	Counter tcpInDataPartDupBytes;
1275 	/* total # of data segments received past the window */
1276 	Counter tcpInDataPastWinSegs;
1277 	/* total # of data bytes received part the window */
1278 	Counter tcpInDataPastWinBytes;
1279 	/* total # of zero window probes received */
1280 	Counter tcpInWinProbe;
1281 	/* total # of window updates received */
1282 	Counter tcpInWinUpdate;
1283 	/* total # of data segments received after the connection has closed */
1284 	Counter tcpInClosed;
1285 /* Others */
1286 	/* total # of failed attempts to update the rtt estimate */
1287 	Counter tcpRttNoUpdate;
1288 	/* total # of successful attempts to update the rtt estimate */
1289 	Counter tcpRttUpdate;
1290 	/* total # of retransmit timeouts */
1291 	Counter tcpTimRetrans;
1292 	/* total # of retransmit timeouts dropping the connection */
1293 	Counter tcpTimRetransDrop;
1294 	/* total # of keepalive timeouts */
1295 	Counter tcpTimKeepalive;
1296 	/* total # of keepalive timeouts sending a probe */
1297 	Counter tcpTimKeepaliveProbe;
1298 	/* total # of keepalive timeouts dropping the connection */
1299 	Counter tcpTimKeepaliveDrop;
1300 	/* total # of connections refused due to backlog full on listen */
1301 	Counter tcpListenDrop;
1302 	/* total # of connections refused due to half-open queue (q0) full */
1303 	Counter tcpListenDropQ0;
1304 	/* total # of connections dropped from a full half-open queue (q0) */
1305 	Counter tcpHalfOpenDrop;
1306 	/* total # of retransmitted segments by SACK retransmission */
1307 	Counter	tcpOutSackRetransSegs;
1308 
1309 	int	tcp6ConnTableSize;	/* Size of tcp6ConnEntry_t */
1310 
1311 	/*
1312 	 * fields from RFC 4022
1313 	 */
1314 
1315 	/* total # of segments recv'd				{ tcp 17 } */
1316 	Counter64	tcpHCInSegs;
1317 	/* total # of segments sent				{ tcp 18 } */
1318 	Counter64	tcpHCOutSegs;
1319 } mib2_tcp_t;
1320 #define	MIB_FIRST_NEW_ELM_mib2_tcp_t	tcpHCInSegs
1321 
1322 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1323 #pragma pack()
1324 #endif
1325 
1326 /*
1327  * The TCP/IPv4 connection table {tcp 13} contains information about this
1328  * entity's existing TCP connections over IPv4.
1329  */
1330 /* For tcpConnState and tcp6ConnState */
1331 #define	MIB2_TCP_closed		1
1332 #define	MIB2_TCP_listen		2
1333 #define	MIB2_TCP_synSent	3
1334 #define	MIB2_TCP_synReceived	4
1335 #define	MIB2_TCP_established	5
1336 #define	MIB2_TCP_finWait1	6
1337 #define	MIB2_TCP_finWait2	7
1338 #define	MIB2_TCP_closeWait	8
1339 #define	MIB2_TCP_lastAck	9
1340 #define	MIB2_TCP_closing	10
1341 #define	MIB2_TCP_timeWait	11
1342 #define	MIB2_TCP_deleteTCB	12		/* only writeable value */
1343 
1344 /* Pack data to make struct size the same for 32- and 64-bits */
1345 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1346 #pragma pack(4)
1347 #endif
1348 typedef struct mib2_tcpConnEntry {
1349 		/* state of tcp connection		{ tcpConnEntry 1} RW */
1350 	int		tcpConnState;
1351 		/* local ip addr for this connection	{ tcpConnEntry 2 } */
1352 	IpAddress	tcpConnLocalAddress;
1353 		/* local port for this connection	{ tcpConnEntry 3 } */
1354 	int		tcpConnLocalPort;	/* In host byte order */
1355 		/* remote ip addr for this connection	{ tcpConnEntry 4 } */
1356 	IpAddress	tcpConnRemAddress;
1357 		/* remote port for this connection	{ tcpConnEntry 5 } */
1358 	int		tcpConnRemPort;		/* In host byte order */
1359 	struct tcpConnEntryInfo_s {
1360 		Counter64	ce_in_data_inorder_bytes;
1361 		Counter64	ce_in_data_inorder_segs;
1362 		Counter64	ce_in_data_unorder_bytes;
1363 		Counter64	ce_in_data_unorder_segs;
1364 		Counter64	ce_in_zwnd_probes;
1365 
1366 		Counter64	ce_out_data_bytes;
1367 		Counter64	ce_out_data_segs;
1368 		Counter64	ce_out_retrans_bytes;
1369 		Counter64	ce_out_retrans_segs;
1370 		Counter64	ce_out_zwnd_probes;
1371 		Counter64	ce_rtt_sum;
1372 
1373 				/* seq # of next segment to send */
1374 		Gauge		ce_snxt;
1375 				/* seq # of of last segment unacknowledged */
1376 		Gauge		ce_suna;
1377 				/* current send window size */
1378 		Gauge		ce_swnd;
1379 				/* current congestion window size */
1380 		Gauge		ce_cwnd;
1381 				/* seq # of next expected segment */
1382 		Gauge		ce_rnxt;
1383 				/* seq # of last ack'd segment */
1384 		Gauge		ce_rack;
1385 				/* # of unsent bytes in the xmit queue */
1386 		Gauge		ce_unsent;
1387 				/* current receive window size */
1388 		Gauge		ce_rwnd;
1389 				/* round-trip time smoothed average (us) */
1390 		Gauge		ce_rtt_sa;
1391 				/* current rto (retransmit timeout) */
1392 		Gauge		ce_rto;
1393 				/* round-trip time count */
1394 		Gauge		ce_rtt_cnt;
1395 				/* current max segment size */
1396 		Gauge		ce_mss;
1397 				/* actual internal state */
1398 		int		ce_state;
1399 	}		tcpConnEntryInfo;
1400 
1401 	/* pid of the processes that created this connection */
1402 	uint32_t	tcpConnCreationProcess;
1403 	/* system uptime when the connection was created */
1404 	uint64_t	tcpConnCreationTime;
1405 } mib2_tcpConnEntry_t;
1406 #define	MIB_FIRST_NEW_ELM_mib2_tcpConnEntry_t	tcpConnCreationProcess
1407 
1408 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1409 #pragma pack()
1410 #endif
1411 
1412 
1413 /*
1414  * The TCP/IPv6 connection table {tcp 14} contains information about this
1415  * entity's existing TCP connections over IPv6.
1416  */
1417 
1418 /* Pack data to make struct size the same for 32- and 64-bits */
1419 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1420 #pragma pack(4)
1421 #endif
1422 typedef struct mib2_tcp6ConnEntry {
1423 	/* local ip addr for this connection	{ ipv6TcpConnEntry 1 } */
1424 	Ip6Address	tcp6ConnLocalAddress;
1425 	/* local port for this connection	{ ipv6TcpConnEntry 2 } */
1426 	int		tcp6ConnLocalPort;
1427 	/* remote ip addr for this connection	{ ipv6TcpConnEntry 3 } */
1428 	Ip6Address	tcp6ConnRemAddress;
1429 	/* remote port for this connection	{ ipv6TcpConnEntry 4 } */
1430 	int		tcp6ConnRemPort;
1431 	/* interface index or zero		{ ipv6TcpConnEntry 5 } */
1432 	DeviceIndex	tcp6ConnIfIndex;
1433 	/* state of tcp6 connection		{ ipv6TcpConnEntry 6 } RW */
1434 	int		tcp6ConnState;
1435 	struct tcpConnEntryInfo_s tcp6ConnEntryInfo;
1436 
1437 	/* pid of the processes that created this connection */
1438 	uint32_t	tcp6ConnCreationProcess;
1439 	/* system uptime when the connection was created */
1440 	uint64_t	tcp6ConnCreationTime;
1441 } mib2_tcp6ConnEntry_t;
1442 #define	MIB_FIRST_NEW_ELM_mib2_tcp6ConnEntry_t	tcp6ConnCreationProcess
1443 
1444 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1445 #pragma pack()
1446 #endif
1447 
1448 /*
1449  * the UDP group
1450  */
1451 #define	MIB2_UDP_ENTRY	5	/* udpEntry */
1452 #define	MIB2_UDP6_ENTRY	6	/* udp6Entry */
1453 
1454 /* Old name retained for compatibility */
1455 #define	MIB2_UDP_5	MIB2_UDP_ENTRY
1456 
1457 /* Pack data to make struct size the same for 32- and 64-bits */
1458 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1459 #pragma pack(4)
1460 #endif
1461 typedef struct mib2_udp {
1462 		/* total # of UDP datagrams sent upstream	{ udp 1 } */
1463 	Counter	udpInDatagrams;
1464 	/* in ip				{ udp 2 } */
1465 		/* # of recv'd dg's not deliverable (other)	{ udp 3 }  */
1466 	Counter	udpInErrors;
1467 		/* total # of dg's sent				{ udp 4 } */
1468 	Counter	udpOutDatagrams;
1469 		/* { udp 5 } */
1470 	int	udpEntrySize;			/* Size of udpEntry_t */
1471 	int	udp6EntrySize;			/* Size of udp6Entry_t */
1472 	Counter	udpOutErrors;
1473 
1474 	/*
1475 	 * fields from RFC 4113
1476 	 */
1477 
1478 	/* total # of UDP datagrams sent upstream		{ udp 8 } */
1479 	Counter64	udpHCInDatagrams;
1480 	/* total # of dg's sent					{ udp 9 } */
1481 	Counter64	udpHCOutDatagrams;
1482 } mib2_udp_t;
1483 #define	MIB_FIRST_NEW_ELM_mib2_udp_t	udpHCInDatagrams
1484 
1485 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1486 #pragma pack()
1487 #endif
1488 
1489 /*
1490  * The UDP listener table contains information about this entity's UDP
1491  * end-points on which a local application is currently accepting datagrams.
1492  */
1493 
1494 /* For both IPv4 and IPv6 ue_state: */
1495 #define	MIB2_UDP_unbound	1
1496 #define	MIB2_UDP_idle		2
1497 #define	MIB2_UDP_connected	3
1498 #define	MIB2_UDP_unknown	4
1499 
1500 /* Pack data to make struct size the same for 32- and 64-bits */
1501 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1502 #pragma pack(4)
1503 #endif
1504 typedef struct mib2_udpEntry {
1505 		/* local ip addr of listener		{ udpEntry 1 } */
1506 	IpAddress	udpLocalAddress;
1507 		/* local port of listener		{ udpEntry 2 } */
1508 	int		udpLocalPort;		/* In host byte order */
1509 	struct udpEntryInfo_s {
1510 		int		ue_state;
1511 		IpAddress	ue_RemoteAddress;
1512 		int		ue_RemotePort;	/* In host byte order */
1513 	}		udpEntryInfo;
1514 
1515 	/*
1516 	 * RFC 4113
1517 	 */
1518 
1519 	/* Unique id for this 4-tuple		{ udpEndpointEntry 7 } */
1520 	uint32_t	udpInstance;
1521 	/* pid of the processes that created this endpoint */
1522 	uint32_t	udpCreationProcess;
1523 	/* system uptime when the endpoint was created */
1524 	uint64_t	udpCreationTime;
1525 } mib2_udpEntry_t;
1526 #define	MIB_FIRST_NEW_ELM_mib2_udpEntry_t	udpInstance
1527 
1528 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1529 #pragma pack()
1530 #endif
1531 
1532 /*
1533  * The UDP (for IPv6) listener table contains information about this
1534  * entity's UDP end-points on which a local application is
1535  * currently accepting datagrams.
1536  */
1537 
1538 /* Pack data to make struct size the same for 32- and 64-bits */
1539 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1540 #pragma pack(4)
1541 #endif
1542 typedef	struct mib2_udp6Entry {
1543 		/* local ip addr of listener		{ ipv6UdpEntry 1 } */
1544 	Ip6Address	udp6LocalAddress;
1545 		/* local port of listener		{ ipv6UdpEntry 2 } */
1546 	int		udp6LocalPort;		/* In host byte order */
1547 		/* interface index or zero 		{ ipv6UdpEntry 3 } */
1548 	DeviceIndex	udp6IfIndex;
1549 	struct udp6EntryInfo_s {
1550 		int	ue_state;
1551 		Ip6Address	ue_RemoteAddress;
1552 		int		ue_RemotePort;	/* In host byte order */
1553 	}		udp6EntryInfo;
1554 
1555 	/*
1556 	 * RFC 4113
1557 	 */
1558 
1559 	/* Unique id for this 4-tuple		{ udpEndpointEntry 7 } */
1560 	uint32_t	udp6Instance;
1561 	/* pid of the processes that created this endpoint */
1562 	uint32_t	udp6CreationProcess;
1563 	/* system uptime when the endpoint was created */
1564 	uint64_t	udp6CreationTime;
1565 } mib2_udp6Entry_t;
1566 #define	MIB_FIRST_NEW_ELM_mib2_udp6Entry_t	udp6Instance
1567 
1568 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1569 #pragma pack()
1570 #endif
1571 
1572 /*
1573  * the RAWIP group
1574  */
1575 typedef struct mib2_rawip {
1576 		/* total # of RAWIP datagrams sent upstream */
1577 	Counter	rawipInDatagrams;
1578 		/* # of RAWIP packets with bad IPV6_CHECKSUM checksums */
1579 	Counter rawipInCksumErrs;
1580 		/* # of recv'd dg's not deliverable (other) */
1581 	Counter	rawipInErrors;
1582 		/* total # of dg's sent */
1583 	Counter	rawipOutDatagrams;
1584 		/* total # of dg's not sent (e.g. no memory) */
1585 	Counter	rawipOutErrors;
1586 } mib2_rawip_t;
1587 
1588 /* DVMRP group */
1589 #define	EXPER_DVMRP_VIF		1
1590 #define	EXPER_DVMRP_MRT		2
1591 
1592 
1593 /*
1594  * The SCTP group
1595  */
1596 #define	MIB2_SCTP_CONN			15
1597 #define	MIB2_SCTP_CONN_LOCAL		16
1598 #define	MIB2_SCTP_CONN_REMOTE		17
1599 
1600 #define	MIB2_SCTP_closed		1
1601 #define	MIB2_SCTP_cookieWait		2
1602 #define	MIB2_SCTP_cookieEchoed		3
1603 #define	MIB2_SCTP_established		4
1604 #define	MIB2_SCTP_shutdownPending	5
1605 #define	MIB2_SCTP_shutdownSent		6
1606 #define	MIB2_SCTP_shutdownReceived	7
1607 #define	MIB2_SCTP_shutdownAckSent	8
1608 #define	MIB2_SCTP_deleteTCB		9
1609 #define	MIB2_SCTP_listen		10	/* Not in the MIB */
1610 
1611 #define	MIB2_SCTP_ACTIVE		1
1612 #define	MIB2_SCTP_INACTIVE		2
1613 
1614 #define	MIB2_SCTP_ADDR_V4		1
1615 #define	MIB2_SCTP_ADDR_V6		2
1616 
1617 #define	MIB2_SCTP_RTOALGO_OTHER		1
1618 #define	MIB2_SCTP_RTOALGO_VANJ		2
1619 
1620 typedef struct mib2_sctpConnEntry {
1621 		/* connection identifier	{ sctpAssocEntry 1 } */
1622 	uint32_t	sctpAssocId;
1623 		/* remote hostname (not used)	{ sctpAssocEntry 2 } */
1624 	Octet_t		sctpAssocRemHostName;
1625 		/* local port number		{ sctpAssocEntry 3 } */
1626 	uint32_t	sctpAssocLocalPort;
1627 		/* remote port number		{ sctpAssocEntry 4 } */
1628 	uint32_t	sctpAssocRemPort;
1629 		/* type of primary remote addr	{ sctpAssocEntry 5 } */
1630 	int		sctpAssocRemPrimAddrType;
1631 		/* primary remote address	{ sctpAssocEntry 6 } */
1632 	Ip6Address	sctpAssocRemPrimAddr;
1633 		/* local address */
1634 	Ip6Address	sctpAssocLocPrimAddr;
1635 		/* current heartbeat interval	{ sctpAssocEntry 7 } */
1636 	uint32_t	sctpAssocHeartBeatInterval;
1637 		/* state of this association	{ sctpAssocEntry 8 } */
1638 	int		sctpAssocState;
1639 		/* # of inbound streams		{ sctpAssocEntry 9 } */
1640 	uint32_t	sctpAssocInStreams;
1641 		/* # of outbound streams	{ sctpAssocEntry 10 } */
1642 	uint32_t	sctpAssocOutStreams;
1643 		/* max # of data retans		{ sctpAssocEntry 11 } */
1644 	uint32_t	sctpAssocMaxRetr;
1645 		/* sysId for assoc owner	{ sctpAssocEntry 12 } */
1646 	uint32_t	sctpAssocPrimProcess;
1647 		/* # of rxmit timeouts during hanshake */
1648 	Counter32	sctpAssocT1expired;	/* { sctpAssocEntry 13 } */
1649 		/* # of rxmit timeouts during shutdown */
1650 	Counter32	sctpAssocT2expired;	/* { sctpAssocEntry 14 } */
1651 		/* # of rxmit timeouts during data transfer */
1652 	Counter32	sctpAssocRtxChunks;	/* { sctpAssocEntry 15 } */
1653 		/* assoc start-up time		{ sctpAssocEntry 16 } */
1654 	uint32_t	sctpAssocStartTime;
1655 	struct sctpConnEntryInfo_s {
1656 				/* amount of data in send Q */
1657 		Gauge		ce_sendq;
1658 				/* amount of data in recv Q */
1659 		Gauge		ce_recvq;
1660 				/* currect send window size */
1661 		Gauge		ce_swnd;
1662 				/* currenct receive window size */
1663 		Gauge		ce_rwnd;
1664 				/* current max segment size */
1665 		Gauge		ce_mss;
1666 	} sctpConnEntryInfo;
1667 } mib2_sctpConnEntry_t;
1668 
1669 typedef struct mib2_sctpConnLocalAddrEntry {
1670 		/* connection identifier */
1671 	uint32_t	sctpAssocId;
1672 		/* type of local addr		{ sctpAssocLocalEntry 1 } */
1673 	int		sctpAssocLocalAddrType;
1674 		/* local address		{ sctpAssocLocalEntry 2 } */
1675 	Ip6Address	sctpAssocLocalAddr;
1676 } mib2_sctpConnLocalEntry_t;
1677 
1678 typedef struct mib2_sctpConnRemoteAddrEntry {
1679 		/* connection identier */
1680 	uint32_t	sctpAssocId;
1681 		/* remote addr type		{ sctpAssocRemEntry 1 } */
1682 	int		sctpAssocRemAddrType;
1683 		/* remote address		{ sctpAssocRemEntry 2 } */
1684 	Ip6Address	sctpAssocRemAddr;
1685 		/* is the address active	{ sctpAssocRemEntry 3 } */
1686 	int		sctpAssocRemAddrActive;
1687 		/* whether hearbeat is active	{ sctpAssocRemEntry 4 } */
1688 	int		sctpAssocRemAddrHBActive;
1689 		/* current RTO			{ sctpAssocRemEntry 5 } */
1690 	uint32_t	sctpAssocRemAddrRTO;
1691 		/* max # of rexmits before becoming inactive */
1692 	uint32_t	sctpAssocRemAddrMaxPathRtx; /* {sctpAssocRemEntry 6} */
1693 		/* # of rexmits to this dest	{ sctpAssocRemEntry 7 } */
1694 	uint32_t	sctpAssocRemAddrRtx;
1695 } mib2_sctpConnRemoteEntry_t;
1696 
1697 
1698 
1699 /* Pack data in mib2_sctp to make struct size the same for 32- and 64-bits */
1700 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1701 #pragma pack(4)
1702 #endif
1703 
1704 typedef struct mib2_sctp {
1705 		/* algorithm used to determine rto	{ sctpParams 1 } */
1706 	int		sctpRtoAlgorithm;
1707 		/* min RTO in msecs			{ sctpParams 2 } */
1708 	uint32_t	sctpRtoMin;
1709 		/* max RTO in msecs			{ sctpParams 3 } */
1710 	uint32_t	sctpRtoMax;
1711 		/* initial RTO in msecs			{ sctpParams 4 } */
1712 	uint32_t	sctpRtoInitial;
1713 		/* max # of assocs			{ sctpParams 5 } */
1714 	int32_t		sctpMaxAssocs;
1715 		/* cookie lifetime in msecs		{ sctpParams 6 } */
1716 	uint32_t	sctpValCookieLife;
1717 		/* max # of retrans in startup		{ sctpParams 7 } */
1718 	uint32_t	sctpMaxInitRetr;
1719 	/* # of conns ESTABLISHED, SHUTDOWN-RECEIVED or SHUTDOWN-PENDING */
1720 	Counter32	sctpCurrEstab;		/* { sctpStats 1 } */
1721 		/* # of active opens			{ sctpStats 2 } */
1722 	Counter32	sctpActiveEstab;
1723 		/* # of passive opens			{ sctpStats 3 } */
1724 	Counter32	sctpPassiveEstab;
1725 		/* # of aborted conns			{ sctpStats 4 } */
1726 	Counter32	sctpAborted;
1727 		/* # of graceful shutdowns		{ sctpStats 5 } */
1728 	Counter32	sctpShutdowns;
1729 		/* # of OOB packets			{ sctpStats 6 } */
1730 	Counter32	sctpOutOfBlue;
1731 		/* # of packets discarded due to cksum	{ sctpStats 7 } */
1732 	Counter32	sctpChecksumError;
1733 		/* # of control chunks sent		{ sctpStats 8 } */
1734 	Counter64	sctpOutCtrlChunks;
1735 		/* # of ordered data chunks sent	{ sctpStats 9 } */
1736 	Counter64	sctpOutOrderChunks;
1737 		/* # of unordered data chunks sent	{ sctpStats 10 } */
1738 	Counter64	sctpOutUnorderChunks;
1739 		/* # of retransmitted data chunks */
1740 	Counter64	sctpRetransChunks;
1741 		/* # of SACK chunks sent */
1742 	Counter		sctpOutAck;
1743 		/* # of delayed ACK timeouts */
1744 	Counter		sctpOutAckDelayed;
1745 		/* # of SACK chunks sent to update window */
1746 	Counter		sctpOutWinUpdate;
1747 		/* # of fast retransmits */
1748 	Counter		sctpOutFastRetrans;
1749 		/* # of window probes sent */
1750 	Counter		sctpOutWinProbe;
1751 		/* # of control chunks received		{ sctpStats 11 } */
1752 	Counter64	sctpInCtrlChunks;
1753 		/* # of ordered data chunks rcvd	{ sctpStats 12 } */
1754 	Counter64	sctpInOrderChunks;
1755 		/* # of unord data chunks rcvd		{ sctpStats 13 } */
1756 	Counter64	sctpInUnorderChunks;
1757 		/* # of received SACK chunks */
1758 	Counter		sctpInAck;
1759 		/* # of received SACK chunks with duplicate TSN */
1760 	Counter		sctpInDupAck;
1761 		/* # of SACK chunks acking unsent data */
1762 	Counter 	sctpInAckUnsent;
1763 		/* # of Fragmented User Messages	{ sctpStats 14 } */
1764 	Counter64	sctpFragUsrMsgs;
1765 		/* # of Reassembled User Messages	{ sctpStats 15 } */
1766 	Counter64	sctpReasmUsrMsgs;
1767 		/* # of Sent SCTP Packets		{ sctpStats 16 } */
1768 	Counter64	sctpOutSCTPPkts;
1769 		/* # of Received SCTP Packets		{ sctpStats 17 } */
1770 	Counter64	sctpInSCTPPkts;
1771 		/* # of invalid cookies received */
1772 	Counter		sctpInInvalidCookie;
1773 		/* total # of retransmit timeouts */
1774 	Counter		sctpTimRetrans;
1775 		/* total # of retransmit timeouts dropping the connection */
1776 	Counter		sctpTimRetransDrop;
1777 		/* total # of heartbeat probes */
1778 	Counter		sctpTimHeartBeatProbe;
1779 		/* total # of heartbeat timeouts dropping the connection */
1780 	Counter		sctpTimHeartBeatDrop;
1781 		/* total # of conns refused due to backlog full on listen */
1782 	Counter		sctpListenDrop;
1783 		/* total # of pkts received after the association has closed */
1784 	Counter		sctpInClosed;
1785 	int		sctpEntrySize;
1786 	int		sctpLocalEntrySize;
1787 	int		sctpRemoteEntrySize;
1788 } mib2_sctp_t;
1789 
1790 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
1791 #pragma pack()
1792 #endif
1793 
1794 
1795 #ifdef	__cplusplus
1796 }
1797 #endif
1798 
1799 #endif	/* _INET_MIB2_H */
1800