10Sstevel@tonic-gate /* 20Sstevel@tonic-gate * CDDL HEADER START 30Sstevel@tonic-gate * 40Sstevel@tonic-gate * The contents of this file are subject to the terms of the 51663Spriyanka * Common Development and Distribution License (the "License"). 61663Spriyanka * You may not use this file except in compliance with the License. 70Sstevel@tonic-gate * 80Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 90Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 100Sstevel@tonic-gate * See the License for the specific language governing permissions 110Sstevel@tonic-gate * and limitations under the License. 120Sstevel@tonic-gate * 130Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 140Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 150Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 160Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 170Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 180Sstevel@tonic-gate * 190Sstevel@tonic-gate * CDDL HEADER END 200Sstevel@tonic-gate */ 210Sstevel@tonic-gate /* 228485SPeter.Memishian@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 230Sstevel@tonic-gate * Use is subject to license terms. 240Sstevel@tonic-gate */ 250Sstevel@tonic-gate 260Sstevel@tonic-gate #include <sys/types.h> 270Sstevel@tonic-gate #include <sys/stream.h> 280Sstevel@tonic-gate #define _SUN_TPI_VERSION 2 290Sstevel@tonic-gate #include <sys/tihdr.h> 300Sstevel@tonic-gate #include <sys/socket.h> 310Sstevel@tonic-gate #include <sys/xti_xtiopt.h> 320Sstevel@tonic-gate #include <sys/xti_inet.h> 330Sstevel@tonic-gate 340Sstevel@tonic-gate #include <netinet/in.h> 350Sstevel@tonic-gate #include <netinet/icmp6.h> 360Sstevel@tonic-gate #include <inet/common.h> 370Sstevel@tonic-gate #include <netinet/ip6.h> 380Sstevel@tonic-gate #include <inet/ip.h> 390Sstevel@tonic-gate 400Sstevel@tonic-gate #include <netinet/tcp.h> 410Sstevel@tonic-gate #include <netinet/ip_mroute.h> 420Sstevel@tonic-gate #include <inet/optcom.h> 43*11042SErik.Nordmark@Sun.COM #include <inet/rawip_impl.h> 440Sstevel@tonic-gate 450Sstevel@tonic-gate /* 460Sstevel@tonic-gate * Table of all known options handled on a ICMP protocol stack. 470Sstevel@tonic-gate * 480Sstevel@tonic-gate * Note: This table contains options processed by both ICMP and IP levels 490Sstevel@tonic-gate * and is the superset of options that can be performed on a ICMP over IP 500Sstevel@tonic-gate * stack. 510Sstevel@tonic-gate */ 520Sstevel@tonic-gate opdes_t icmp_opt_arr[] = { 530Sstevel@tonic-gate 54*11042SErik.Nordmark@Sun.COM { SO_DEBUG, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 }, 55*11042SErik.Nordmark@Sun.COM { SO_DONTROUTE, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 }, 56*11042SErik.Nordmark@Sun.COM { SO_USELOOPBACK, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 570Sstevel@tonic-gate }, 58*11042SErik.Nordmark@Sun.COM { SO_BROADCAST, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 }, 59*11042SErik.Nordmark@Sun.COM { SO_REUSEADDR, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 }, 600Sstevel@tonic-gate 610Sstevel@tonic-gate #ifdef SO_PROTOTYPE 620Sstevel@tonic-gate /* 630Sstevel@tonic-gate * icmp will only allow IPPROTO_ICMP for non-privileged streams 640Sstevel@tonic-gate * that check is made on an adhoc basis. 650Sstevel@tonic-gate */ 66*11042SErik.Nordmark@Sun.COM { SO_PROTOTYPE, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 }, 670Sstevel@tonic-gate #endif 680Sstevel@tonic-gate 69*11042SErik.Nordmark@Sun.COM { SO_TYPE, SOL_SOCKET, OA_R, OA_R, OP_NP, 0, sizeof (int), 0 }, 70*11042SErik.Nordmark@Sun.COM { SO_SNDBUF, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 }, 71*11042SErik.Nordmark@Sun.COM { SO_RCVBUF, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 }, 72*11042SErik.Nordmark@Sun.COM { SO_SNDTIMEO, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, 738612SAnders.Persson@Sun.COM sizeof (struct timeval), 0 }, 74*11042SErik.Nordmark@Sun.COM { SO_RCVTIMEO, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, 758612SAnders.Persson@Sun.COM sizeof (struct timeval), 0 }, 76*11042SErik.Nordmark@Sun.COM { SO_DGRAM_ERRIND, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 770Sstevel@tonic-gate 0 }, 78*11042SErik.Nordmark@Sun.COM { SO_TIMESTAMP, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 791673Sgt145670 }, 80*11042SErik.Nordmark@Sun.COM { SO_MAC_EXEMPT, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 812263Ssommerfe 0 }, 82*11042SErik.Nordmark@Sun.COM { SO_MAC_IMPLICIT, SOL_SOCKET, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 8310934Ssommerfeld@sun.com 0 }, 842263Ssommerfe 85*11042SErik.Nordmark@Sun.COM { SO_ALLZONES, SOL_SOCKET, OA_R, OA_RW, OP_CONFIG, 0, sizeof (int), 862263Ssommerfe 0 }, 87*11042SErik.Nordmark@Sun.COM { SO_DOMAIN, SOL_SOCKET, OA_R, OA_R, OP_NP, 0, sizeof (int), 0 }, 880Sstevel@tonic-gate 890Sstevel@tonic-gate { IP_OPTIONS, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 90*11042SErik.Nordmark@Sun.COM (OP_VARLEN|OP_NODEFAULT), 918348SEric.Yu@Sun.COM IP_MAX_OPT_LENGTH + IP_ADDR_LEN, -1 /* not initialized */ }, 920Sstevel@tonic-gate { T_IP_OPTIONS, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 93*11042SErik.Nordmark@Sun.COM (OP_VARLEN|OP_NODEFAULT), 948348SEric.Yu@Sun.COM IP_MAX_OPT_LENGTH + IP_ADDR_LEN, -1 /* not initialized */ }, 950Sstevel@tonic-gate 96*11042SErik.Nordmark@Sun.COM { IP_HDRINCL, IPPROTO_IP, OA_R, OA_RW, OP_RAW, 0, 970Sstevel@tonic-gate sizeof (int), 0 }, 98*11042SErik.Nordmark@Sun.COM { IP_TOS, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 }, 99*11042SErik.Nordmark@Sun.COM { T_IP_TOS, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 }, 100*11042SErik.Nordmark@Sun.COM { IP_TTL, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 }, 1010Sstevel@tonic-gate 102*11042SErik.Nordmark@Sun.COM { IP_MULTICAST_IF, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0, 1030Sstevel@tonic-gate sizeof (struct in_addr), 0 /* INADDR_ANY */ }, 1040Sstevel@tonic-gate 105*11042SErik.Nordmark@Sun.COM { IP_MULTICAST_LOOP, IPPROTO_IP, OA_RW, OA_RW, OP_NP, OP_DEF_FN, 1060Sstevel@tonic-gate sizeof (uchar_t), -1 /* not initialized */}, 1070Sstevel@tonic-gate 108*11042SErik.Nordmark@Sun.COM { IP_MULTICAST_TTL, IPPROTO_IP, OA_RW, OA_RW, OP_NP, OP_DEF_FN, 1090Sstevel@tonic-gate sizeof (uchar_t), -1 /* not initialized */ }, 1100Sstevel@tonic-gate 111*11042SErik.Nordmark@Sun.COM { IP_ADD_MEMBERSHIP, IPPROTO_IP, OA_X, OA_X, OP_NP, OP_NODEFAULT, 1120Sstevel@tonic-gate sizeof (struct ip_mreq), -1 /* not initialized */ }, 1130Sstevel@tonic-gate 114*11042SErik.Nordmark@Sun.COM { IP_DROP_MEMBERSHIP, IPPROTO_IP, OA_X, OA_X, OP_NP, OP_NODEFAULT, 1150Sstevel@tonic-gate sizeof (struct ip_mreq), 0 }, 1160Sstevel@tonic-gate 117*11042SErik.Nordmark@Sun.COM { IP_BLOCK_SOURCE, IPPROTO_IP, OA_X, OA_X, OP_NP, OP_NODEFAULT, 1180Sstevel@tonic-gate sizeof (struct ip_mreq_source), -1 }, 1190Sstevel@tonic-gate 120*11042SErik.Nordmark@Sun.COM { IP_UNBLOCK_SOURCE, IPPROTO_IP, OA_X, OA_X, OP_NP, OP_NODEFAULT, 1210Sstevel@tonic-gate sizeof (struct ip_mreq_source), -1 }, 1220Sstevel@tonic-gate 1230Sstevel@tonic-gate { IP_ADD_SOURCE_MEMBERSHIP, IPPROTO_IP, OA_X, OA_X, OP_NP, 124*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct ip_mreq_source), -1 }, 1250Sstevel@tonic-gate 1260Sstevel@tonic-gate { IP_DROP_SOURCE_MEMBERSHIP, IPPROTO_IP, OA_X, OA_X, OP_NP, 127*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct ip_mreq_source), -1 }, 1280Sstevel@tonic-gate 129*11042SErik.Nordmark@Sun.COM { IP_SEC_OPT, IPPROTO_IP, OA_RW, OA_RW, OP_NP, OP_NODEFAULT, 1300Sstevel@tonic-gate sizeof (ipsec_req_t), -1 /* not initialized */ }, 1310Sstevel@tonic-gate 132*11042SErik.Nordmark@Sun.COM { IP_BOUND_IF, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0, 1330Sstevel@tonic-gate sizeof (int), 0 /* no ifindex */ }, 1340Sstevel@tonic-gate 135*11042SErik.Nordmark@Sun.COM { IP_UNSPEC_SRC, IPPROTO_IP, OA_R, OA_RW, OP_RAW, 0, 1360Sstevel@tonic-gate sizeof (int), 0 }, 1370Sstevel@tonic-gate 1385455Smeem { IP_BROADCAST_TTL, IPPROTO_IP, OA_R, OA_RW, OP_RAW, 0, sizeof (uchar_t), 1395455Smeem 0 /* disabled */ }, 1405455Smeem 141*11042SErik.Nordmark@Sun.COM { IP_RECVIF, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 }, 1420Sstevel@tonic-gate 1433318Srshoaib { IP_PKTINFO, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 144*11042SErik.Nordmark@Sun.COM (OP_NODEFAULT|OP_VARLEN), 1453318Srshoaib sizeof (struct in_pktinfo), -1 /* not initialized */ }, 1463318Srshoaib 147*11042SErik.Nordmark@Sun.COM { IP_DONTFRAG, IPPROTO_IP, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 0 }, 148*11042SErik.Nordmark@Sun.COM 149*11042SErik.Nordmark@Sun.COM { IP_NEXTHOP, IPPROTO_IP, OA_R, OA_RW, OP_CONFIG, 0, 1503318Srshoaib sizeof (in_addr_t), -1 /* not initialized */ }, 1511663Spriyanka 1520Sstevel@tonic-gate { MRT_INIT, IPPROTO_IP, 0, OA_X, OP_CONFIG, 153*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (int), 1540Sstevel@tonic-gate -1 /* not initialized */ }, 1550Sstevel@tonic-gate 1560Sstevel@tonic-gate { MRT_DONE, IPPROTO_IP, 0, OA_X, OP_CONFIG, 157*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, 0, -1 /* not initialized */ }, 1580Sstevel@tonic-gate 159*11042SErik.Nordmark@Sun.COM { MRT_ADD_VIF, IPPROTO_IP, 0, OA_X, OP_CONFIG, OP_NODEFAULT, 1600Sstevel@tonic-gate sizeof (struct vifctl), -1 /* not initialized */ }, 1610Sstevel@tonic-gate 162*11042SErik.Nordmark@Sun.COM { MRT_DEL_VIF, IPPROTO_IP, 0, OA_X, OP_CONFIG, OP_NODEFAULT, 1630Sstevel@tonic-gate sizeof (vifi_t), -1 /* not initialized */ }, 1640Sstevel@tonic-gate 165*11042SErik.Nordmark@Sun.COM { MRT_ADD_MFC, IPPROTO_IP, 0, OA_X, OP_CONFIG, OP_NODEFAULT, 1660Sstevel@tonic-gate sizeof (struct mfcctl), -1 /* not initialized */ }, 1670Sstevel@tonic-gate 168*11042SErik.Nordmark@Sun.COM { MRT_DEL_MFC, IPPROTO_IP, 0, OA_X, OP_CONFIG, OP_NODEFAULT, 1690Sstevel@tonic-gate sizeof (struct mfcctl), -1 /* not initialized */ }, 1700Sstevel@tonic-gate 171*11042SErik.Nordmark@Sun.COM { MRT_VERSION, IPPROTO_IP, OA_R, OA_R, OP_NP, OP_NODEFAULT, 1720Sstevel@tonic-gate sizeof (int), -1 /* not initialized */ }, 1730Sstevel@tonic-gate 1740Sstevel@tonic-gate { MRT_ASSERT, IPPROTO_IP, 0, OA_RW, OP_CONFIG, 175*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, 1760Sstevel@tonic-gate sizeof (int), -1 /* not initialized */ }, 1770Sstevel@tonic-gate 1780Sstevel@tonic-gate { MCAST_JOIN_GROUP, IPPROTO_IP, OA_X, OA_X, OP_NP, 179*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct group_req), 1800Sstevel@tonic-gate -1 /* not initialized */ }, 1810Sstevel@tonic-gate { MCAST_LEAVE_GROUP, IPPROTO_IP, OA_X, OA_X, OP_NP, 182*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct group_req), 1830Sstevel@tonic-gate -1 /* not initialized */ }, 1840Sstevel@tonic-gate { MCAST_BLOCK_SOURCE, IPPROTO_IP, OA_X, OA_X, OP_NP, 185*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct group_source_req), 1860Sstevel@tonic-gate -1 /* not initialized */ }, 1870Sstevel@tonic-gate { MCAST_UNBLOCK_SOURCE, IPPROTO_IP, OA_X, OA_X, OP_NP, 188*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct group_source_req), 1890Sstevel@tonic-gate -1 /* not initialized */ }, 1900Sstevel@tonic-gate { MCAST_JOIN_SOURCE_GROUP, IPPROTO_IP, OA_X, OA_X, OP_NP, 191*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct group_source_req), 1920Sstevel@tonic-gate -1 /* not initialized */ }, 1930Sstevel@tonic-gate { MCAST_LEAVE_SOURCE_GROUP, IPPROTO_IP, OA_X, OA_X, OP_NP, 194*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct group_source_req), 1950Sstevel@tonic-gate -1 /* not initialized */ }, 1960Sstevel@tonic-gate 197*11042SErik.Nordmark@Sun.COM { IPV6_MULTICAST_IF, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 1980Sstevel@tonic-gate sizeof (int), 0 }, 1990Sstevel@tonic-gate 2000Sstevel@tonic-gate { IPV6_MULTICAST_HOPS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 201*11042SErik.Nordmark@Sun.COM OP_DEF_FN, sizeof (int), -1 /* not initialized */ }, 2020Sstevel@tonic-gate 2030Sstevel@tonic-gate { IPV6_MULTICAST_LOOP, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 204*11042SErik.Nordmark@Sun.COM OP_DEF_FN, sizeof (int), -1 /* not initialized */}, 2050Sstevel@tonic-gate 206*11042SErik.Nordmark@Sun.COM { IPV6_JOIN_GROUP, IPPROTO_IPV6, OA_X, OA_X, OP_NP, OP_NODEFAULT, 2070Sstevel@tonic-gate sizeof (struct ipv6_mreq), -1 /* not initialized */ }, 2080Sstevel@tonic-gate 209*11042SErik.Nordmark@Sun.COM { IPV6_LEAVE_GROUP, IPPROTO_IPV6, OA_X, OA_X, OP_NP, OP_NODEFAULT, 2100Sstevel@tonic-gate sizeof (struct ipv6_mreq), -1 /* not initialized */ }, 2110Sstevel@tonic-gate 212*11042SErik.Nordmark@Sun.COM { IPV6_UNICAST_HOPS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, OP_DEF_FN, 2130Sstevel@tonic-gate sizeof (int), -1 /* not initialized */ }, 2140Sstevel@tonic-gate 215*11042SErik.Nordmark@Sun.COM { IPV6_BOUND_IF, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2160Sstevel@tonic-gate sizeof (int), 0 /* no ifindex */ }, 2170Sstevel@tonic-gate 218*11042SErik.Nordmark@Sun.COM { IPV6_UNSPEC_SRC, IPPROTO_IPV6, OA_R, OA_RW, OP_RAW, 0, 2190Sstevel@tonic-gate sizeof (int), 0 }, 2200Sstevel@tonic-gate 221*11042SErik.Nordmark@Sun.COM { IPV6_CHECKSUM, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, sizeof (int), 2220Sstevel@tonic-gate -1 }, 2230Sstevel@tonic-gate 2240Sstevel@tonic-gate { ICMP6_FILTER, IPPROTO_ICMPV6, OA_RW, OA_RW, OP_NP, OP_DEF_FN|OP_VARLEN, 2250Sstevel@tonic-gate sizeof (icmp6_filter_t), 0 }, 2260Sstevel@tonic-gate { IPV6_PKTINFO, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 227*11042SErik.Nordmark@Sun.COM (OP_NODEFAULT|OP_VARLEN), 2280Sstevel@tonic-gate sizeof (struct in6_pktinfo), -1 /* not initialized */ }, 2290Sstevel@tonic-gate { IPV6_HOPLIMIT, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 230*11042SErik.Nordmark@Sun.COM (OP_NODEFAULT|OP_VARLEN), 2310Sstevel@tonic-gate sizeof (int), -1 /* not initialized */ }, 2320Sstevel@tonic-gate { IPV6_NEXTHOP, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 233*11042SErik.Nordmark@Sun.COM (OP_NODEFAULT|OP_VARLEN), 2340Sstevel@tonic-gate sizeof (sin6_t), -1 /* not initialized */ }, 2350Sstevel@tonic-gate { IPV6_HOPOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 236*11042SErik.Nordmark@Sun.COM (OP_VARLEN|OP_NODEFAULT), 2370Sstevel@tonic-gate MAX_EHDR_LEN, -1 /* not initialized */ }, 2380Sstevel@tonic-gate { IPV6_DSTOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 239*11042SErik.Nordmark@Sun.COM (OP_VARLEN|OP_NODEFAULT), 2400Sstevel@tonic-gate MAX_EHDR_LEN, -1 /* not initialized */ }, 2410Sstevel@tonic-gate { IPV6_RTHDRDSTOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 242*11042SErik.Nordmark@Sun.COM (OP_VARLEN|OP_NODEFAULT), 2430Sstevel@tonic-gate MAX_EHDR_LEN, -1 /* not initialized */ }, 2440Sstevel@tonic-gate { IPV6_RTHDR, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 245*11042SErik.Nordmark@Sun.COM (OP_VARLEN|OP_NODEFAULT), 2460Sstevel@tonic-gate MAX_EHDR_LEN, -1 /* not initialized */ }, 2470Sstevel@tonic-gate { IPV6_TCLASS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 248*11042SErik.Nordmark@Sun.COM (OP_NODEFAULT|OP_VARLEN), 2490Sstevel@tonic-gate sizeof (int), -1 /* not initialized */ }, 250*11042SErik.Nordmark@Sun.COM { IPV6_PATHMTU, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2510Sstevel@tonic-gate sizeof (struct ip6_mtuinfo), -1 }, 252*11042SErik.Nordmark@Sun.COM { IPV6_DONTFRAG, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2530Sstevel@tonic-gate sizeof (int), 0 }, 254*11042SErik.Nordmark@Sun.COM { IPV6_USE_MIN_MTU, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2550Sstevel@tonic-gate sizeof (int), 0 }, 256*11042SErik.Nordmark@Sun.COM { IPV6_V6ONLY, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2570Sstevel@tonic-gate sizeof (int), 0 }, 2580Sstevel@tonic-gate 259*11042SErik.Nordmark@Sun.COM { IPV6_RECVPKTINFO, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2600Sstevel@tonic-gate sizeof (int), 0 }, 261*11042SErik.Nordmark@Sun.COM { IPV6_RECVHOPLIMIT, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2620Sstevel@tonic-gate sizeof (int), 0 }, 263*11042SErik.Nordmark@Sun.COM { IPV6_RECVHOPOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2640Sstevel@tonic-gate sizeof (int), 0 }, 265*11042SErik.Nordmark@Sun.COM { _OLD_IPV6_RECVDSTOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2660Sstevel@tonic-gate sizeof (int), 0 }, 267*11042SErik.Nordmark@Sun.COM { IPV6_RECVDSTOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2680Sstevel@tonic-gate sizeof (int), 0 }, 269*11042SErik.Nordmark@Sun.COM { IPV6_RECVRTHDR, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2700Sstevel@tonic-gate sizeof (int), 0 }, 271*11042SErik.Nordmark@Sun.COM { IPV6_RECVRTHDRDSTOPTS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2720Sstevel@tonic-gate sizeof (int), 0 }, 273*11042SErik.Nordmark@Sun.COM { IPV6_RECVPATHMTU, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2740Sstevel@tonic-gate sizeof (int), 0 }, 275*11042SErik.Nordmark@Sun.COM { IPV6_RECVTCLASS, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2760Sstevel@tonic-gate sizeof (int), 0 }, 2770Sstevel@tonic-gate 278*11042SErik.Nordmark@Sun.COM { IPV6_SEC_OPT, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, OP_NODEFAULT, 2790Sstevel@tonic-gate sizeof (ipsec_req_t), -1 /* not initialized */ }, 280*11042SErik.Nordmark@Sun.COM { IPV6_SRC_PREFERENCES, IPPROTO_IPV6, OA_RW, OA_RW, OP_NP, 0, 2810Sstevel@tonic-gate sizeof (uint32_t), IPV6_PREFER_SRC_DEFAULT }, 2820Sstevel@tonic-gate 2830Sstevel@tonic-gate { MCAST_JOIN_GROUP, IPPROTO_IPV6, OA_X, OA_X, OP_NP, 284*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct group_req), 2850Sstevel@tonic-gate -1 /* not initialized */ }, 2860Sstevel@tonic-gate { MCAST_LEAVE_GROUP, IPPROTO_IPV6, OA_X, OA_X, OP_NP, 287*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct group_req), 2880Sstevel@tonic-gate -1 /* not initialized */ }, 2890Sstevel@tonic-gate { MCAST_BLOCK_SOURCE, IPPROTO_IPV6, OA_X, OA_X, OP_NP, 290*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct group_source_req), 2910Sstevel@tonic-gate -1 /* not initialized */ }, 2920Sstevel@tonic-gate { MCAST_UNBLOCK_SOURCE, IPPROTO_IPV6, OA_X, OA_X, OP_NP, 293*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct group_source_req), 2940Sstevel@tonic-gate -1 /* not initialized */ }, 2950Sstevel@tonic-gate { MCAST_JOIN_SOURCE_GROUP, IPPROTO_IPV6, OA_X, OA_X, OP_NP, 296*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct group_source_req), 2970Sstevel@tonic-gate -1 /* not initialized */ }, 2980Sstevel@tonic-gate { MCAST_LEAVE_SOURCE_GROUP, IPPROTO_IPV6, OA_X, OA_X, OP_NP, 299*11042SErik.Nordmark@Sun.COM OP_NODEFAULT, sizeof (struct group_source_req), 3000Sstevel@tonic-gate -1 /* not initialized */ }, 3010Sstevel@tonic-gate }; 3020Sstevel@tonic-gate 3030Sstevel@tonic-gate /* 3040Sstevel@tonic-gate * Table of all supported levels 3050Sstevel@tonic-gate * Note: Some levels (e.g. XTI_GENERIC) may be valid but may not have 3060Sstevel@tonic-gate * any supported options so we need this info separately. 3070Sstevel@tonic-gate * 3080Sstevel@tonic-gate * This is needed only for topmost tpi providers and is used only by 3090Sstevel@tonic-gate * XTI interfaces. 3100Sstevel@tonic-gate */ 3110Sstevel@tonic-gate optlevel_t icmp_valid_levels_arr[] = { 3120Sstevel@tonic-gate XTI_GENERIC, 3130Sstevel@tonic-gate SOL_SOCKET, 3140Sstevel@tonic-gate IPPROTO_ICMP, 3150Sstevel@tonic-gate IPPROTO_IP, 3160Sstevel@tonic-gate IPPROTO_IPV6, 3170Sstevel@tonic-gate IPPROTO_ICMPV6 3180Sstevel@tonic-gate }; 3190Sstevel@tonic-gate 3200Sstevel@tonic-gate #define ICMP_VALID_LEVELS_CNT A_CNT(icmp_valid_levels_arr) 3210Sstevel@tonic-gate #define ICMP_OPT_ARR_CNT A_CNT(icmp_opt_arr) 3220Sstevel@tonic-gate 3230Sstevel@tonic-gate uint_t icmp_max_optsize; /* initialized when ICMP driver is loaded */ 3240Sstevel@tonic-gate 3250Sstevel@tonic-gate /* 3260Sstevel@tonic-gate * Initialize option database object for ICMP 3270Sstevel@tonic-gate * 3280Sstevel@tonic-gate * This object represents database of options to search passed to 3290Sstevel@tonic-gate * {sock,tpi}optcom_req() interface routine to take care of option 3300Sstevel@tonic-gate * management and associated methods. 3310Sstevel@tonic-gate */ 3320Sstevel@tonic-gate 3330Sstevel@tonic-gate optdb_obj_t icmp_opt_obj = { 3340Sstevel@tonic-gate icmp_opt_default, /* ICMP default value function pointer */ 335*11042SErik.Nordmark@Sun.COM icmp_tpi_opt_get, /* ICMP get function pointer */ 336*11042SErik.Nordmark@Sun.COM icmp_tpi_opt_set, /* ICMP set function pointer */ 3370Sstevel@tonic-gate ICMP_OPT_ARR_CNT, /* ICMP option database count of entries */ 3380Sstevel@tonic-gate icmp_opt_arr, /* ICMP option database */ 3390Sstevel@tonic-gate ICMP_VALID_LEVELS_CNT, /* ICMP valid level count of entries */ 3400Sstevel@tonic-gate icmp_valid_levels_arr /* ICMP valid level array */ 3410Sstevel@tonic-gate }; 342