Home | History | Annotate | Download | only in ip
      1      0      stevel /*
      2      0      stevel  * CDDL HEADER START
      3      0      stevel  *
      4      0      stevel  * The contents of this file are subject to the terms of the
      5   1663    priyanka  * Common Development and Distribution License (the "License").
      6   1663    priyanka  * You may not use this file except in compliance with the License.
      7      0      stevel  *
      8      0      stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9      0      stevel  * or http://www.opensolaris.org/os/licensing.
     10      0      stevel  * See the License for the specific language governing permissions
     11      0      stevel  * and limitations under the License.
     12      0      stevel  *
     13      0      stevel  * When distributing Covered Code, include this CDDL HEADER in each
     14      0      stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15      0      stevel  * If applicable, add the following below this CDDL HEADER, with the
     16      0      stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     17      0      stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     18      0      stevel  *
     19      0      stevel  * CDDL HEADER END
     20      0      stevel  */
     21      0      stevel /*
     22   8485       Peter  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     23      0      stevel  * Use is subject to license terms.
     24      0      stevel  */
     25      0      stevel 
     26      0      stevel #include <sys/types.h>
     27      0      stevel #include <sys/stream.h>
     28      0      stevel #define	_SUN_TPI_VERSION 2
     29      0      stevel #include <sys/tihdr.h>
     30      0      stevel #include <sys/socket.h>
     31      0      stevel #include <sys/xti_xtiopt.h>
     32      0      stevel #include <sys/xti_inet.h>
     33      0      stevel 
     34      0      stevel #include <netinet/in.h>
     35      0      stevel #include <netinet/icmp6.h>
     36      0      stevel #include <inet/common.h>
     37      0      stevel #include <netinet/ip6.h>
     38      0      stevel #include <inet/ip.h>
     39      0      stevel 
     40      0      stevel #include <netinet/tcp.h>
     41      0      stevel #include <netinet/ip_mroute.h>
     42      0      stevel #include <inet/optcom.h>
     43  11042        Erik #include <inet/rawip_impl.h>
     44      0      stevel 
     45      0      stevel /*
     46      0      stevel  * Table of all known options handled on a ICMP protocol stack.
     47      0      stevel  *
     48      0      stevel  * Note: This table contains options processed by both ICMP and IP levels
     49      0      stevel  *       and is the superset of options that can be performed on a ICMP over IP
     50      0      stevel  *       stack.
     51      0      stevel  */
     52      0      stevel opdes_t	icmp_opt_arr[] = {
     53      0      stevel 
     54  11042        Erik { SO_DEBUG,	SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 },
     55  11042        Erik { SO_DONTROUTE,	SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 },
     56  11042        Erik { SO_USELOOPBACK, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0
     57      0      stevel 	},
     58  11042        Erik { SO_BROADCAST,	SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 },
     59  11042        Erik { SO_REUSEADDR, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 },
     60      0      stevel 
     61      0      stevel #ifdef	SO_PROTOTYPE
     62      0      stevel 	/*
     63      0      stevel 	 * icmp will only allow IPPROTO_ICMP for non-privileged streams
     64      0      stevel 	 * that check is made on an adhoc basis.
     65      0      stevel 	 */
     66  11042        Erik { SO_PROTOTYPE, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 },
     67      0      stevel #endif
     68      0      stevel 
     69  11042        Erik { SO_TYPE,	SOL_SOCKET, OA_R, OA_R, OP_NP, 0, sizeof (int), 0 },
     70  11042        Erik { SO_SNDBUF,	SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 },
     71  11042        Erik { SO_RCVBUF,	SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 },
     72  11042        Erik { SO_SNDTIMEO,	SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0,
     73   8612      Anders 	sizeof (struct timeval), 0 },
     74  11042        Erik { SO_RCVTIMEO,	SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0,
     75   8612      Anders 	sizeof (struct timeval), 0 },
     76  11042        Erik { SO_DGRAM_ERRIND, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int),
     77      0      stevel 	0 },
     78  11042        Erik { SO_TIMESTAMP, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0
     79   1673    gt145670 	},
     80  11042        Erik { SO_MAC_EXEMPT, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int),
     81  10934  sommerfeld 	0 },
     82  11042        Erik { SO_MAC_IMPLICIT, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int),
     83   2263    sommerfe 	0 },
     84   2263    sommerfe 
     85  11042        Erik { SO_ALLZONES, SOL_SOCKET, OA_R, OA_RW, OP_CONFIG, 0, sizeof (int),
     86   2263    sommerfe 	0 },
     87  11042        Erik { SO_DOMAIN,	SOL_SOCKET, OA_R, OA_R, OP_NP, 0, sizeof (int), 0 },
     88      0      stevel 
     89      0      stevel { IP_OPTIONS,	IPPROTO_IP, OA_RW, OA_RW, OP_NP,
     90  11042        Erik 	(OP_VARLEN|OP_NODEFAULT),
     91   8348        Eric 	IP_MAX_OPT_LENGTH + IP_ADDR_LEN, -1 /* not initialized */ },
     92      0      stevel { T_IP_OPTIONS,	IPPROTO_IP, OA_RW, OA_RW, OP_NP,
     93  11042        Erik 	(OP_VARLEN|OP_NODEFAULT),
     94   8348        Eric 	IP_MAX_OPT_LENGTH + IP_ADDR_LEN, -1 /* not initialized */ },
     95      0      stevel 
     96  11042        Erik { IP_HDRINCL,	IPPROTO_IP, OA_R,  OA_RW, OP_RAW, 0,
     97      0      stevel 	sizeof (int), 0 },
     98  11042        Erik { IP_TOS,	IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 },
     99  11042        Erik { T_IP_TOS,	IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 },
    100  11042        Erik { IP_TTL,	IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 },
    101      0      stevel 
    102  11042        Erik { IP_MULTICAST_IF, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0,
    103      0      stevel 	sizeof (struct in_addr), 0 /* INADDR_ANY */ },
    104      0      stevel 
    105  11042        Erik { IP_MULTICAST_LOOP, IPPROTO_IP, OA_RW, OA_RW, OP_NP, OP_DEF_FN,
    106      0      stevel 	sizeof (uchar_t), -1 /* not initialized */},
    107      0      stevel 
    108  11042        Erik { IP_MULTICAST_TTL, IPPROTO_IP, OA_RW, OA_RW, OP_NP, OP_DEF_FN,
    109      0      stevel 	sizeof (uchar_t), -1 /* not initialized */ },
    110      0      stevel 
    111  11042        Erik { IP_ADD_MEMBERSHIP, IPPROTO_IP, OA_X, OA_X, OP_NP, OP_NODEFAULT,
    112      0      stevel 	sizeof (struct ip_mreq), -1 /* not initialized */ },
    113      0      stevel 
    114  11042        Erik { IP_DROP_MEMBERSHIP, IPPROTO_IP, OA_X, OA_X, OP_NP, OP_NODEFAULT,
    115      0      stevel 	sizeof (struct ip_mreq), 0 },
    116      0      stevel 
    117  11042        Erik { IP_BLOCK_SOURCE, IPPROTO_IP, OA_X, OA_X, OP_NP, OP_NODEFAULT,
    118      0      stevel 	sizeof (struct ip_mreq_source), -1 },
    119      0      stevel 
    120  11042        Erik { IP_UNBLOCK_SOURCE, IPPROTO_IP, OA_X, OA_X, OP_NP, OP_NODEFAULT,
    121      0      stevel 	sizeof (struct ip_mreq_source), -1 },
    122      0      stevel 
    123      0      stevel { IP_ADD_SOURCE_MEMBERSHIP, IPPROTO_IP, OA_X, OA_X, OP_NP,
    124  11042        Erik 	OP_NODEFAULT, sizeof (struct ip_mreq_source), -1 },
    125      0      stevel 
    126      0      stevel { IP_DROP_SOURCE_MEMBERSHIP, IPPROTO_IP, OA_X, OA_X, OP_NP,
    127  11042        Erik 	OP_NODEFAULT, sizeof (struct ip_mreq_source), -1 },
    128      0      stevel 
    129  11042        Erik { IP_SEC_OPT, IPPROTO_IP, OA_RW, OA_RW, OP_NP, OP_NODEFAULT,
    130      0      stevel 	sizeof (ipsec_req_t), -1 /* not initialized */ },
    131      0      stevel 
    132  11042        Erik { IP_BOUND_IF, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0,
    133      0      stevel 	sizeof (int),	0 /* no ifindex */ },
    134      0      stevel 
    135  11042        Erik { IP_UNSPEC_SRC, IPPROTO_IP, OA_R, OA_RW, OP_RAW, 0,
    136      0      stevel 	sizeof (int), 0 },
    137   5455        meem 
    138   5455        meem { IP_BROADCAST_TTL, IPPROTO_IP, OA_R, OA_RW, OP_RAW, 0, sizeof (uchar_t),
    139   5455        meem 	0 /* disabled */ },
    140      0      stevel 
    141  11042        Erik { IP_RECVIF, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 },
    142   1663    priyanka 
    143   3318     rshoaib { IP_PKTINFO, IPPROTO_IP, OA_RW, OA_RW, OP_NP,
    144  11042        Erik 	(OP_NODEFAULT|OP_VARLEN),
    145   3318     rshoaib 	sizeof (struct in_pktinfo), -1 /* not initialized */ },
    146   3318     rshoaib 
    147  11042        Erik { IP_DONTFRAG, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 },
    148  11042        Erik 
    149  11042        Erik { IP_NEXTHOP, IPPROTO_IP, OA_R, OA_RW, OP_CONFIG, 0,
    150   3318     rshoaib 	sizeof (in_addr_t), -1 /* not initialized */ },
    151      0      stevel 
    152      0      stevel { MRT_INIT, IPPROTO_IP, 0, OA_X, OP_CONFIG,
    153  11042        Erik 	OP_NODEFAULT, sizeof (int),
    154      0      stevel 	-1 /* not initialized */ },
    155      0      stevel 
    156      0      stevel { MRT_DONE, IPPROTO_IP, 0, OA_X, OP_CONFIG,
    157  11042        Erik 	OP_NODEFAULT, 0, -1 /* not initialized */ },
    158      0      stevel 
    159  11042        Erik { MRT_ADD_VIF, IPPROTO_IP, 0, OA_X, OP_CONFIG, OP_NODEFAULT,
    160      0      stevel 	sizeof (struct vifctl), -1 /* not initialized */ },
    161      0      stevel 
    162  11042        Erik { MRT_DEL_VIF, 	IPPROTO_IP, 0, OA_X, OP_CONFIG, OP_NODEFAULT,
    163      0      stevel 	sizeof (vifi_t), -1 /* not initialized */ },
    164      0      stevel 
    165  11042        Erik { MRT_ADD_MFC, 	IPPROTO_IP, 0, OA_X, OP_CONFIG, OP_NODEFAULT,
    166      0      stevel 	sizeof (struct mfcctl), -1 /* not initialized */ },
    167      0      stevel 
    168  11042        Erik { MRT_DEL_MFC, 	IPPROTO_IP, 0, OA_X, OP_CONFIG, OP_NODEFAULT,
    169      0      stevel 	sizeof (struct mfcctl), -1 /* not initialized */ },
    170      0      stevel 
    171  11042        Erik { MRT_VERSION, 	IPPROTO_IP, OA_R, OA_R, OP_NP, OP_NODEFAULT,
    172      0      stevel 	sizeof (int), -1 /* not initialized */ },
    173      0      stevel 
    174      0      stevel { MRT_ASSERT, 	IPPROTO_IP, 0, OA_RW, OP_CONFIG,
    175  11042        Erik 	OP_NODEFAULT,
    176      0      stevel 	sizeof (int), -1 /* not initialized */ },
    177      0      stevel 
    178      0      stevel { MCAST_JOIN_GROUP, IPPROTO_IP, OA_X, OA_X, OP_NP,
    179  11042        Erik 	OP_NODEFAULT, sizeof (struct group_req),
    180      0      stevel 	-1 /* not initialized */ },
    181      0      stevel { MCAST_LEAVE_GROUP, IPPROTO_IP, OA_X, OA_X, OP_NP,
    182  11042        Erik 	OP_NODEFAULT, sizeof (struct group_req),
    183      0      stevel 	-1 /* not initialized */ },
    184      0      stevel { MCAST_BLOCK_SOURCE, IPPROTO_IP, OA_X, OA_X, OP_NP,
    185  11042        Erik 	OP_NODEFAULT, sizeof (struct group_source_req),
    186      0      stevel 	-1 /* not initialized */ },
    187      0      stevel { MCAST_UNBLOCK_SOURCE, IPPROTO_IP, OA_X, OA_X, OP_NP,
    188  11042        Erik 	OP_NODEFAULT, sizeof (struct group_source_req),
    189      0      stevel 	-1 /* not initialized */ },
    190      0      stevel { MCAST_JOIN_SOURCE_GROUP, IPPROTO_IP, OA_X, OA_X, OP_NP,
    191  11042        Erik 	OP_NODEFAULT, sizeof (struct group_source_req),
    192      0      stevel 	-1 /* not initialized */ },
    193      0      stevel { MCAST_LEAVE_SOURCE_GROUP, IPPROTO_IP, OA_X, OA_X, OP_NP,
    194  11042        Erik 	OP_NODEFAULT, sizeof (struct group_source_req),
    195      0      stevel 	-1 /* not initialized */ },
    196      0      stevel 
    197  11042        Erik { IPV6_MULTICAST_IF, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    198      0      stevel 	sizeof (int), 0 },
    199      0      stevel 
    200      0      stevel { IPV6_MULTICAST_HOPS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP,
    201  11042        Erik 	OP_DEF_FN, sizeof (int), -1 /* not initialized */ },
    202      0      stevel 
    203      0      stevel { IPV6_MULTICAST_LOOP, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP,
    204  11042        Erik 	OP_DEF_FN, sizeof (int), -1 /* not initialized */},
    205      0      stevel 
    206  11042        Erik { IPV6_JOIN_GROUP, IPPROTO_IPV6, OA_X, OA_X, OP_NP, OP_NODEFAULT,
    207      0      stevel 	sizeof (struct ipv6_mreq), -1 /* not initialized */ },
    208      0      stevel 
    209  11042        Erik { IPV6_LEAVE_GROUP, IPPROTO_IPV6, OA_X, OA_X, OP_NP, OP_NODEFAULT,
    210      0      stevel 	sizeof (struct ipv6_mreq), -1 /* not initialized */ },
    211      0      stevel 
    212  11042        Erik { IPV6_UNICAST_HOPS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, OP_DEF_FN,
    213      0      stevel 	sizeof (int), -1 /* not initialized */ },
    214      0      stevel 
    215  11042        Erik { IPV6_BOUND_IF, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    216      0      stevel 	sizeof (int),	0 /* no ifindex */ },
    217      0      stevel 
    218  11042        Erik { IPV6_UNSPEC_SRC, IPPROTO_IPV6, OA_R, OA_RW, OP_RAW, 0,
    219      0      stevel 	sizeof (int), 0 },
    220      0      stevel 
    221  11042        Erik { IPV6_CHECKSUM, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, sizeof (int),
    222      0      stevel 	-1 },
    223      0      stevel 
    224      0      stevel { ICMP6_FILTER, IPPROTO_ICMPV6, OA_RW, OA_RW, OP_NP, OP_DEF_FN|OP_VARLEN,
    225      0      stevel 	sizeof (icmp6_filter_t), 0 },
    226      0      stevel { IPV6_PKTINFO, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP,
    227  11042        Erik 	(OP_NODEFAULT|OP_VARLEN),
    228      0      stevel 	sizeof (struct in6_pktinfo), -1 /* not initialized */ },
    229      0      stevel { IPV6_HOPLIMIT, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP,
    230  11042        Erik 	(OP_NODEFAULT|OP_VARLEN),
    231      0      stevel 	sizeof (int), -1 /* not initialized */ },
    232      0      stevel { IPV6_NEXTHOP, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP,
    233  11042        Erik 	(OP_NODEFAULT|OP_VARLEN),
    234      0      stevel 	sizeof (sin6_t), -1 /* not initialized */ },
    235      0      stevel { IPV6_HOPOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP,
    236  11042        Erik 	(OP_VARLEN|OP_NODEFAULT),
    237      0      stevel 	MAX_EHDR_LEN, -1 /* not initialized */ },
    238      0      stevel { IPV6_DSTOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP,
    239  11042        Erik 	(OP_VARLEN|OP_NODEFAULT),
    240      0      stevel 	MAX_EHDR_LEN, -1 /* not initialized */ },
    241      0      stevel { IPV6_RTHDRDSTOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP,
    242  11042        Erik 	(OP_VARLEN|OP_NODEFAULT),
    243      0      stevel 	MAX_EHDR_LEN, -1 /* not initialized */ },
    244      0      stevel { IPV6_RTHDR, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP,
    245  11042        Erik 	(OP_VARLEN|OP_NODEFAULT),
    246      0      stevel 	MAX_EHDR_LEN, -1 /* not initialized */ },
    247      0      stevel { IPV6_TCLASS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP,
    248  11042        Erik 	(OP_NODEFAULT|OP_VARLEN),
    249      0      stevel 	sizeof (int), -1 /* not initialized */ },
    250  11042        Erik { IPV6_PATHMTU, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    251      0      stevel 	sizeof (struct ip6_mtuinfo), -1 },
    252  11042        Erik { IPV6_DONTFRAG, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    253      0      stevel 	sizeof (int), 0 },
    254  11042        Erik { IPV6_USE_MIN_MTU, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    255      0      stevel 	sizeof (int), 0 },
    256  11042        Erik { IPV6_V6ONLY, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    257      0      stevel 	sizeof (int), 0 },
    258      0      stevel 
    259  11042        Erik { IPV6_RECVPKTINFO, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    260      0      stevel 	sizeof (int), 0 },
    261  11042        Erik { IPV6_RECVHOPLIMIT, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    262      0      stevel 	sizeof (int), 0 },
    263  11042        Erik { IPV6_RECVHOPOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    264      0      stevel 	sizeof (int), 0 },
    265  11042        Erik { _OLD_IPV6_RECVDSTOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    266      0      stevel 	sizeof (int), 0 },
    267  11042        Erik { IPV6_RECVDSTOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    268      0      stevel 	sizeof (int), 0 },
    269  11042        Erik { IPV6_RECVRTHDR, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    270      0      stevel 	sizeof (int), 0 },
    271  11042        Erik { IPV6_RECVRTHDRDSTOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    272      0      stevel 	sizeof (int), 0 },
    273  11042        Erik { IPV6_RECVPATHMTU, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    274      0      stevel 	sizeof (int), 0 },
    275  11042        Erik { IPV6_RECVTCLASS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    276      0      stevel 	sizeof (int), 0 },
    277      0      stevel 
    278  11042        Erik { IPV6_SEC_OPT, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, OP_NODEFAULT,
    279      0      stevel 	sizeof (ipsec_req_t), -1 /* not initialized */ },
    280  11042        Erik { IPV6_SRC_PREFERENCES, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0,
    281      0      stevel 	sizeof (uint32_t), IPV6_PREFER_SRC_DEFAULT },
    282      0      stevel 
    283      0      stevel { MCAST_JOIN_GROUP, IPPROTO_IPV6, OA_X, OA_X, OP_NP,
    284  11042        Erik 	OP_NODEFAULT, sizeof (struct group_req),
    285      0      stevel 	-1 /* not initialized */ },
    286      0      stevel { MCAST_LEAVE_GROUP, IPPROTO_IPV6, OA_X, OA_X, OP_NP,
    287  11042        Erik 	OP_NODEFAULT, sizeof (struct group_req),
    288      0      stevel 	-1 /* not initialized */ },
    289      0      stevel { MCAST_BLOCK_SOURCE, IPPROTO_IPV6, OA_X, OA_X, OP_NP,
    290  11042        Erik 	OP_NODEFAULT, sizeof (struct group_source_req),
    291      0      stevel 	-1 /* not initialized */ },
    292      0      stevel { MCAST_UNBLOCK_SOURCE, IPPROTO_IPV6, OA_X, OA_X, OP_NP,
    293  11042        Erik 	OP_NODEFAULT, sizeof (struct group_source_req),
    294      0      stevel 	-1 /* not initialized */ },
    295      0      stevel { MCAST_JOIN_SOURCE_GROUP, IPPROTO_IPV6, OA_X, OA_X, OP_NP,
    296  11042        Erik 	OP_NODEFAULT, sizeof (struct group_source_req),
    297      0      stevel 	-1 /* not initialized */ },
    298      0      stevel { MCAST_LEAVE_SOURCE_GROUP, IPPROTO_IPV6, OA_X, OA_X, OP_NP,
    299  11042        Erik 	OP_NODEFAULT, sizeof (struct group_source_req),
    300      0      stevel 	-1 /* not initialized */ },
    301      0      stevel };
    302      0      stevel 
    303      0      stevel /*
    304      0      stevel  * Table of all supported levels
    305      0      stevel  * Note: Some levels (e.g. XTI_GENERIC) may be valid but may not have
    306      0      stevel  * any supported options so we need this info separately.
    307      0      stevel  *
    308      0      stevel  * This is needed only for topmost tpi providers and is used only by
    309      0      stevel  * XTI interfaces.
    310      0      stevel  */
    311      0      stevel optlevel_t	icmp_valid_levels_arr[] = {
    312      0      stevel 	XTI_GENERIC,
    313      0      stevel 	SOL_SOCKET,
    314      0      stevel 	IPPROTO_ICMP,
    315      0      stevel 	IPPROTO_IP,
    316      0      stevel 	IPPROTO_IPV6,
    317      0      stevel 	IPPROTO_ICMPV6
    318      0      stevel };
    319      0      stevel 
    320      0      stevel #define	ICMP_VALID_LEVELS_CNT	A_CNT(icmp_valid_levels_arr)
    321      0      stevel #define	ICMP_OPT_ARR_CNT		A_CNT(icmp_opt_arr)
    322      0      stevel 
    323      0      stevel uint_t	icmp_max_optsize; /* initialized when ICMP driver is loaded */
    324      0      stevel 
    325      0      stevel /*
    326      0      stevel  * Initialize option database object for ICMP
    327      0      stevel  *
    328      0      stevel  * This object represents database of options to search passed to
    329      0      stevel  * {sock,tpi}optcom_req() interface routine to take care of option
    330      0      stevel  * management and associated methods.
    331      0      stevel  */
    332      0      stevel 
    333      0      stevel optdb_obj_t icmp_opt_obj = {
    334      0      stevel 	icmp_opt_default,	/* ICMP default value function pointer */
    335  11042        Erik 	icmp_tpi_opt_get,	/* ICMP get function pointer */
    336  11042        Erik 	icmp_tpi_opt_set,	/* ICMP set function pointer */
    337      0      stevel 	ICMP_OPT_ARR_CNT,	/* ICMP option database count of entries */
    338      0      stevel 	icmp_opt_arr,		/* ICMP option database */
    339      0      stevel 	ICMP_VALID_LEVELS_CNT,	/* ICMP valid level count of entries */
    340      0      stevel 	icmp_valid_levels_arr	/* ICMP valid level array */
    341      0      stevel };
    342