112016SGirish.Moodalbail@Sun.COM /*
212016SGirish.Moodalbail@Sun.COM * CDDL HEADER START
312016SGirish.Moodalbail@Sun.COM *
412016SGirish.Moodalbail@Sun.COM * The contents of this file are subject to the terms of the
512016SGirish.Moodalbail@Sun.COM * Common Development and Distribution License (the "License").
612016SGirish.Moodalbail@Sun.COM * You may not use this file except in compliance with the License.
712016SGirish.Moodalbail@Sun.COM *
812016SGirish.Moodalbail@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
912016SGirish.Moodalbail@Sun.COM * or http://www.opensolaris.org/os/licensing.
1012016SGirish.Moodalbail@Sun.COM * See the License for the specific language governing permissions
1112016SGirish.Moodalbail@Sun.COM * and limitations under the License.
1212016SGirish.Moodalbail@Sun.COM *
1312016SGirish.Moodalbail@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each
1412016SGirish.Moodalbail@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1512016SGirish.Moodalbail@Sun.COM * If applicable, add the following below this CDDL HEADER, with the
1612016SGirish.Moodalbail@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying
1712016SGirish.Moodalbail@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner]
1812016SGirish.Moodalbail@Sun.COM *
1912016SGirish.Moodalbail@Sun.COM * CDDL HEADER END
2012016SGirish.Moodalbail@Sun.COM */
2112016SGirish.Moodalbail@Sun.COM /*
2212313SSowmini.Varadhan@Sun.COM * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
2312016SGirish.Moodalbail@Sun.COM */
24*13125SGirish.Moodalbail@oracle.COM /* Copyright (c) 1990 Mentat Inc. */
2512016SGirish.Moodalbail@Sun.COM
2612016SGirish.Moodalbail@Sun.COM #include <inet/ip.h>
2712016SGirish.Moodalbail@Sun.COM #include <inet/ip6.h>
2812016SGirish.Moodalbail@Sun.COM #include <inet/ip_if.h>
2912016SGirish.Moodalbail@Sun.COM #include <inet/ip_ire.h>
3012016SGirish.Moodalbail@Sun.COM #include <inet/ipclassifier.h>
3112016SGirish.Moodalbail@Sun.COM #include <inet/ip_impl.h>
3212016SGirish.Moodalbail@Sun.COM #include <inet/tunables.h>
3312016SGirish.Moodalbail@Sun.COM #include <sys/sunddi.h>
3412016SGirish.Moodalbail@Sun.COM #include <sys/policy.h>
3512016SGirish.Moodalbail@Sun.COM
3612016SGirish.Moodalbail@Sun.COM /* How long, in seconds, we allow frags to hang around. */
3712016SGirish.Moodalbail@Sun.COM #define IP_REASM_TIMEOUT 15
3812016SGirish.Moodalbail@Sun.COM #define IPV6_REASM_TIMEOUT 60
3912016SGirish.Moodalbail@Sun.COM
4012016SGirish.Moodalbail@Sun.COM /*
4112016SGirish.Moodalbail@Sun.COM * Set ip{,6}_forwarding values. If the value is being set on an ill,
4212016SGirish.Moodalbail@Sun.COM * find the ill and set the value on it. On the other hand if we are modifying
4312016SGirish.Moodalbail@Sun.COM * global property, modify the global value and set the value on all the ills.
4412016SGirish.Moodalbail@Sun.COM */
4512016SGirish.Moodalbail@Sun.COM /* ARGSUSED */
4612016SGirish.Moodalbail@Sun.COM static int
ip_set_forwarding(void * cbarg,cred_t * cr,mod_prop_info_t * pinfo,const char * ifname,const void * pval,uint_t flags)4712016SGirish.Moodalbail@Sun.COM ip_set_forwarding(void *cbarg, cred_t *cr, mod_prop_info_t *pinfo,
4812016SGirish.Moodalbail@Sun.COM const char *ifname, const void* pval, uint_t flags)
4912016SGirish.Moodalbail@Sun.COM {
5012016SGirish.Moodalbail@Sun.COM char *end;
5112016SGirish.Moodalbail@Sun.COM unsigned long new_value;
5212016SGirish.Moodalbail@Sun.COM boolean_t per_ill, isv6;
5312016SGirish.Moodalbail@Sun.COM ill_walk_context_t ctx;
5412016SGirish.Moodalbail@Sun.COM ill_t *ill;
5512016SGirish.Moodalbail@Sun.COM ip_stack_t *ipst = (ip_stack_t *)cbarg;
5612016SGirish.Moodalbail@Sun.COM
5712016SGirish.Moodalbail@Sun.COM if (flags & MOD_PROP_DEFAULT) {
5812016SGirish.Moodalbail@Sun.COM new_value = pinfo->prop_def_bval;
5912016SGirish.Moodalbail@Sun.COM } else {
6012016SGirish.Moodalbail@Sun.COM if (ddi_strtoul(pval, &end, 10, &new_value) != 0 ||
6112016SGirish.Moodalbail@Sun.COM *end != '\0')
6212016SGirish.Moodalbail@Sun.COM return (EINVAL);
6312016SGirish.Moodalbail@Sun.COM if (new_value != B_TRUE && new_value != B_FALSE)
6412016SGirish.Moodalbail@Sun.COM return (EINVAL);
6512016SGirish.Moodalbail@Sun.COM }
6612016SGirish.Moodalbail@Sun.COM
6712016SGirish.Moodalbail@Sun.COM per_ill = (ifname != NULL && ifname[0] != '\0');
6812016SGirish.Moodalbail@Sun.COM /*
6912016SGirish.Moodalbail@Sun.COM * if it's not per ill then set the global property and bring all the
7012016SGirish.Moodalbail@Sun.COM * ills up to date with the new global value.
7112016SGirish.Moodalbail@Sun.COM */
7212016SGirish.Moodalbail@Sun.COM if (!per_ill)
7312016SGirish.Moodalbail@Sun.COM pinfo->prop_cur_bval = (new_value == 1 ? B_TRUE : B_FALSE);
7412016SGirish.Moodalbail@Sun.COM
7512016SGirish.Moodalbail@Sun.COM isv6 = (pinfo->mpi_proto == MOD_PROTO_IPV6 ? B_TRUE : B_FALSE);
7612016SGirish.Moodalbail@Sun.COM rw_enter(&ipst->ips_ill_g_lock, RW_READER);
7712016SGirish.Moodalbail@Sun.COM if (isv6)
7812016SGirish.Moodalbail@Sun.COM ill = ILL_START_WALK_V6(&ctx, ipst);
7912016SGirish.Moodalbail@Sun.COM else
8012016SGirish.Moodalbail@Sun.COM ill = ILL_START_WALK_V4(&ctx, ipst);
8112016SGirish.Moodalbail@Sun.COM
8212016SGirish.Moodalbail@Sun.COM for (; ill != NULL; ill = ill_next(&ctx, ill)) {
8312016SGirish.Moodalbail@Sun.COM /*
8412016SGirish.Moodalbail@Sun.COM * if the property needs to be set on a particular
8512016SGirish.Moodalbail@Sun.COM * interface, look for that interface.
8612016SGirish.Moodalbail@Sun.COM */
8712016SGirish.Moodalbail@Sun.COM if (per_ill && strcmp(ifname, ill->ill_name) != 0)
8812016SGirish.Moodalbail@Sun.COM continue;
8912016SGirish.Moodalbail@Sun.COM (void) ill_forward_set(ill, new_value != 0);
9012016SGirish.Moodalbail@Sun.COM }
9112016SGirish.Moodalbail@Sun.COM rw_exit(&ipst->ips_ill_g_lock);
9212016SGirish.Moodalbail@Sun.COM
9312016SGirish.Moodalbail@Sun.COM return (0);
9412016SGirish.Moodalbail@Sun.COM }
9512016SGirish.Moodalbail@Sun.COM
9612016SGirish.Moodalbail@Sun.COM static int
ip_get_forwarding(void * cbarg,mod_prop_info_t * pinfo,const char * ifname,void * pval,uint_t pr_size,uint_t flags)9712016SGirish.Moodalbail@Sun.COM ip_get_forwarding(void *cbarg, mod_prop_info_t *pinfo, const char *ifname,
9812016SGirish.Moodalbail@Sun.COM void *pval, uint_t pr_size, uint_t flags)
9912016SGirish.Moodalbail@Sun.COM {
10012016SGirish.Moodalbail@Sun.COM boolean_t value;
10112016SGirish.Moodalbail@Sun.COM ill_walk_context_t ctx;
10212016SGirish.Moodalbail@Sun.COM ill_t *ill;
10312016SGirish.Moodalbail@Sun.COM ip_stack_t *ipst = (ip_stack_t *)cbarg;
10412016SGirish.Moodalbail@Sun.COM boolean_t get_def = (flags & MOD_PROP_DEFAULT);
10512016SGirish.Moodalbail@Sun.COM boolean_t get_perm = (flags & MOD_PROP_PERM);
10612016SGirish.Moodalbail@Sun.COM boolean_t isv6;
10712016SGirish.Moodalbail@Sun.COM size_t nbytes = 0;
10812016SGirish.Moodalbail@Sun.COM
10912016SGirish.Moodalbail@Sun.COM if (get_perm) {
11012016SGirish.Moodalbail@Sun.COM nbytes = snprintf(pval, pr_size, "%d", MOD_PROP_PERM_RW);
11112016SGirish.Moodalbail@Sun.COM goto ret;
11212016SGirish.Moodalbail@Sun.COM } else if (get_def) {
11312016SGirish.Moodalbail@Sun.COM nbytes = snprintf(pval, pr_size, "%d", pinfo->prop_def_bval);
11412016SGirish.Moodalbail@Sun.COM goto ret;
11512016SGirish.Moodalbail@Sun.COM }
11612016SGirish.Moodalbail@Sun.COM
11712016SGirish.Moodalbail@Sun.COM /*
11812016SGirish.Moodalbail@Sun.COM * if per interface value is not asked for return the current
11912016SGirish.Moodalbail@Sun.COM * global value
12012016SGirish.Moodalbail@Sun.COM */
12112016SGirish.Moodalbail@Sun.COM if (ifname == NULL || ifname[0] == '\0') {
12212016SGirish.Moodalbail@Sun.COM nbytes = snprintf(pval, pr_size, "%d", pinfo->prop_cur_bval);
12312016SGirish.Moodalbail@Sun.COM goto ret;
12412016SGirish.Moodalbail@Sun.COM }
12512016SGirish.Moodalbail@Sun.COM
12612016SGirish.Moodalbail@Sun.COM isv6 = (pinfo->mpi_proto == MOD_PROTO_IPV6 ? B_TRUE : B_FALSE);
12712016SGirish.Moodalbail@Sun.COM rw_enter(&ipst->ips_ill_g_lock, RW_READER);
12812016SGirish.Moodalbail@Sun.COM if (isv6)
12912016SGirish.Moodalbail@Sun.COM ill = ILL_START_WALK_V6(&ctx, ipst);
13012016SGirish.Moodalbail@Sun.COM else
13112016SGirish.Moodalbail@Sun.COM ill = ILL_START_WALK_V4(&ctx, ipst);
13212016SGirish.Moodalbail@Sun.COM for (; ill != NULL; ill = ill_next(&ctx, ill)) {
13312016SGirish.Moodalbail@Sun.COM /*
13412016SGirish.Moodalbail@Sun.COM * if the property needs to be obtained on a particular
13512016SGirish.Moodalbail@Sun.COM * interface, look for that interface.
13612016SGirish.Moodalbail@Sun.COM */
13712016SGirish.Moodalbail@Sun.COM if (strcmp(ifname, ill->ill_name) == 0)
13812016SGirish.Moodalbail@Sun.COM break;
13912016SGirish.Moodalbail@Sun.COM }
14012016SGirish.Moodalbail@Sun.COM if (ill == NULL) {
14112016SGirish.Moodalbail@Sun.COM rw_exit(&ipst->ips_ill_g_lock);
14212016SGirish.Moodalbail@Sun.COM return (ENXIO);
14312016SGirish.Moodalbail@Sun.COM }
14412016SGirish.Moodalbail@Sun.COM value = ((ill->ill_flags & ILLF_ROUTER) ? B_TRUE : B_FALSE);
14512016SGirish.Moodalbail@Sun.COM rw_exit(&ipst->ips_ill_g_lock);
14612016SGirish.Moodalbail@Sun.COM nbytes = snprintf(pval, pr_size, "%d", value);
14712016SGirish.Moodalbail@Sun.COM ret:
14812016SGirish.Moodalbail@Sun.COM if (nbytes >= pr_size)
14912016SGirish.Moodalbail@Sun.COM return (ENOBUFS);
15012016SGirish.Moodalbail@Sun.COM return (0);
15112016SGirish.Moodalbail@Sun.COM }
15212016SGirish.Moodalbail@Sun.COM
15312016SGirish.Moodalbail@Sun.COM /*
15412016SGirish.Moodalbail@Sun.COM * `ip_debug' is a global variable. So, we will be modifying the global
15512016SGirish.Moodalbail@Sun.COM * variable here.
15612016SGirish.Moodalbail@Sun.COM */
15712016SGirish.Moodalbail@Sun.COM /* ARGSUSED */
15812016SGirish.Moodalbail@Sun.COM int
ip_set_debug(void * cbarg,cred_t * cr,mod_prop_info_t * pinfo,const char * ifname,const void * pval,uint_t flags)15912016SGirish.Moodalbail@Sun.COM ip_set_debug(void *cbarg, cred_t *cr, mod_prop_info_t *pinfo,
16012016SGirish.Moodalbail@Sun.COM const char *ifname, const void* pval, uint_t flags)
16112016SGirish.Moodalbail@Sun.COM {
16212016SGirish.Moodalbail@Sun.COM unsigned long new_value;
16312313SSowmini.Varadhan@Sun.COM int err;
16412016SGirish.Moodalbail@Sun.COM
16512016SGirish.Moodalbail@Sun.COM if (cr != NULL && secpolicy_net_config(cr, B_FALSE) != 0)
16612016SGirish.Moodalbail@Sun.COM return (EPERM);
16712016SGirish.Moodalbail@Sun.COM
16812313SSowmini.Varadhan@Sun.COM if ((err = mod_uint32_value(pval, pinfo, flags, &new_value)) != 0)
16912313SSowmini.Varadhan@Sun.COM return (err);
17012016SGirish.Moodalbail@Sun.COM ip_debug = (uint32_t)new_value;
17112016SGirish.Moodalbail@Sun.COM return (0);
17212016SGirish.Moodalbail@Sun.COM }
17312016SGirish.Moodalbail@Sun.COM
17412016SGirish.Moodalbail@Sun.COM /*
17512016SGirish.Moodalbail@Sun.COM * ip_debug is a global property. For default, permission and value range
17612016SGirish.Moodalbail@Sun.COM * we retrieve the value from `pinfo'. However for the current value we
17712016SGirish.Moodalbail@Sun.COM * retrieve the value from the global variable `ip_debug'
17812016SGirish.Moodalbail@Sun.COM */
17912016SGirish.Moodalbail@Sun.COM /* ARGSUSED */
18012016SGirish.Moodalbail@Sun.COM int
ip_get_debug(void * cbarg,mod_prop_info_t * pinfo,const char * ifname,void * pval,uint_t psize,uint_t flags)18112016SGirish.Moodalbail@Sun.COM ip_get_debug(void *cbarg, mod_prop_info_t *pinfo, const char *ifname,
18212016SGirish.Moodalbail@Sun.COM void *pval, uint_t psize, uint_t flags)
18312016SGirish.Moodalbail@Sun.COM {
18412016SGirish.Moodalbail@Sun.COM boolean_t get_def = (flags & MOD_PROP_DEFAULT);
18512016SGirish.Moodalbail@Sun.COM boolean_t get_perm = (flags & MOD_PROP_PERM);
18612016SGirish.Moodalbail@Sun.COM boolean_t get_range = (flags & MOD_PROP_POSSIBLE);
18712016SGirish.Moodalbail@Sun.COM size_t nbytes;
18812016SGirish.Moodalbail@Sun.COM
18912016SGirish.Moodalbail@Sun.COM bzero(pval, psize);
19012016SGirish.Moodalbail@Sun.COM if (get_perm)
19112016SGirish.Moodalbail@Sun.COM nbytes = snprintf(pval, psize, "%u", MOD_PROP_PERM_RW);
19212016SGirish.Moodalbail@Sun.COM else if (get_range)
19312016SGirish.Moodalbail@Sun.COM nbytes = snprintf(pval, psize, "%u-%u",
19412016SGirish.Moodalbail@Sun.COM pinfo->prop_min_uval, pinfo->prop_max_uval);
19512016SGirish.Moodalbail@Sun.COM else if (get_def)
19612016SGirish.Moodalbail@Sun.COM nbytes = snprintf(pval, psize, "%u", pinfo->prop_def_uval);
19712016SGirish.Moodalbail@Sun.COM else
19812016SGirish.Moodalbail@Sun.COM nbytes = snprintf(pval, psize, "%u", ip_debug);
19912016SGirish.Moodalbail@Sun.COM if (nbytes >= psize)
20012016SGirish.Moodalbail@Sun.COM return (ENOBUFS);
20112016SGirish.Moodalbail@Sun.COM return (0);
20212016SGirish.Moodalbail@Sun.COM }
20312016SGirish.Moodalbail@Sun.COM
20412016SGirish.Moodalbail@Sun.COM /*
20512016SGirish.Moodalbail@Sun.COM * Set the CGTP (multirouting) filtering status. If the status is changed
20612016SGirish.Moodalbail@Sun.COM * from active to transparent or from transparent to active, forward the
20712016SGirish.Moodalbail@Sun.COM * new status to the filtering module (if loaded).
20812016SGirish.Moodalbail@Sun.COM */
20912016SGirish.Moodalbail@Sun.COM /* ARGSUSED */
21012016SGirish.Moodalbail@Sun.COM static int
ip_set_cgtp_filter(void * cbarg,cred_t * cr,mod_prop_info_t * pinfo,const char * ifname,const void * pval,uint_t flags)21112016SGirish.Moodalbail@Sun.COM ip_set_cgtp_filter(void *cbarg, cred_t *cr, mod_prop_info_t *pinfo,
21212016SGirish.Moodalbail@Sun.COM const char *ifname, const void* pval, uint_t flags)
21312016SGirish.Moodalbail@Sun.COM {
21412016SGirish.Moodalbail@Sun.COM unsigned long new_value;
21512016SGirish.Moodalbail@Sun.COM ip_stack_t *ipst = (ip_stack_t *)cbarg;
21612016SGirish.Moodalbail@Sun.COM char *end;
21712016SGirish.Moodalbail@Sun.COM
21812016SGirish.Moodalbail@Sun.COM if (flags & MOD_PROP_DEFAULT) {
21912016SGirish.Moodalbail@Sun.COM new_value = pinfo->prop_def_bval;
22012016SGirish.Moodalbail@Sun.COM } else {
22112016SGirish.Moodalbail@Sun.COM if (ddi_strtoul(pval, &end, 10, &new_value) != 0 ||
22212016SGirish.Moodalbail@Sun.COM *end != '\0' || new_value > 1) {
22312016SGirish.Moodalbail@Sun.COM return (EINVAL);
22412016SGirish.Moodalbail@Sun.COM }
22512016SGirish.Moodalbail@Sun.COM }
22612016SGirish.Moodalbail@Sun.COM if (!pinfo->prop_cur_bval && new_value) {
22712016SGirish.Moodalbail@Sun.COM cmn_err(CE_NOTE, "IP: enabling CGTP filtering%s",
22812016SGirish.Moodalbail@Sun.COM ipst->ips_ip_cgtp_filter_ops == NULL ?
22912016SGirish.Moodalbail@Sun.COM " (module not loaded)" : "");
23012016SGirish.Moodalbail@Sun.COM }
23112016SGirish.Moodalbail@Sun.COM if (pinfo->prop_cur_bval && !new_value) {
23212016SGirish.Moodalbail@Sun.COM cmn_err(CE_NOTE, "IP: disabling CGTP filtering%s",
23312016SGirish.Moodalbail@Sun.COM ipst->ips_ip_cgtp_filter_ops == NULL ?
23412016SGirish.Moodalbail@Sun.COM " (module not loaded)" : "");
23512016SGirish.Moodalbail@Sun.COM }
23612016SGirish.Moodalbail@Sun.COM if (ipst->ips_ip_cgtp_filter_ops != NULL) {
23712016SGirish.Moodalbail@Sun.COM int res;
23812016SGirish.Moodalbail@Sun.COM netstackid_t stackid = ipst->ips_netstack->netstack_stackid;
23912016SGirish.Moodalbail@Sun.COM
24012016SGirish.Moodalbail@Sun.COM res = ipst->ips_ip_cgtp_filter_ops->cfo_change_state(stackid,
24112016SGirish.Moodalbail@Sun.COM new_value);
24212016SGirish.Moodalbail@Sun.COM if (res)
24312016SGirish.Moodalbail@Sun.COM return (res);
24412016SGirish.Moodalbail@Sun.COM }
24512016SGirish.Moodalbail@Sun.COM pinfo->prop_cur_bval = (new_value == 1 ? B_TRUE : B_FALSE);
24612016SGirish.Moodalbail@Sun.COM ill_set_inputfn_all(ipst);
24712016SGirish.Moodalbail@Sun.COM return (0);
24812016SGirish.Moodalbail@Sun.COM }
24912016SGirish.Moodalbail@Sun.COM
25012016SGirish.Moodalbail@Sun.COM /*
25112016SGirish.Moodalbail@Sun.COM * Retrieve the default MTU or min-max MTU range for a given interface.
25212016SGirish.Moodalbail@Sun.COM *
25312016SGirish.Moodalbail@Sun.COM * -- ill_max_frag value tells us the maximum MTU that can be handled by the
25412016SGirish.Moodalbail@Sun.COM * datalink. This value is advertised by the driver via DLPI messages
25512016SGirish.Moodalbail@Sun.COM * (DL_NOTE_SDU_SIZE/DL_INFO_ACK).
25612016SGirish.Moodalbail@Sun.COM *
25712016SGirish.Moodalbail@Sun.COM * -- ill_current_frag for the most link-types will be same as ill_max_frag
25812016SGirish.Moodalbail@Sun.COM * to begin with. However it is dynamically computed for some link-types
25912016SGirish.Moodalbail@Sun.COM * like tunnels, based on the tunnel PMTU.
26012016SGirish.Moodalbail@Sun.COM *
26112016SGirish.Moodalbail@Sun.COM * -- ill_mtu is the user set MTU using SIOCSLIFMTU and must lie between
26212016SGirish.Moodalbail@Sun.COM * (IPV6_MIN_MTU/IP_MIN_MTU) and ill_max_frag.
26312016SGirish.Moodalbail@Sun.COM *
26412016SGirish.Moodalbail@Sun.COM * -- ill_user_mtu is set by in.ndpd using SIOCSLIFLNKINFO and must lie between
26512016SGirish.Moodalbail@Sun.COM * (IPV6_MIN_MTU/IP_MIN_MTU) and ill_max_frag.
26612016SGirish.Moodalbail@Sun.COM */
26712016SGirish.Moodalbail@Sun.COM int
ip_get_mtu(void * cbarg,mod_prop_info_t * pinfo,const char * ifname,void * pval,uint_t psize,uint_t flags)26812016SGirish.Moodalbail@Sun.COM ip_get_mtu(void *cbarg, mod_prop_info_t *pinfo, const char *ifname,
26912016SGirish.Moodalbail@Sun.COM void *pval, uint_t psize, uint_t flags)
27012016SGirish.Moodalbail@Sun.COM {
27112016SGirish.Moodalbail@Sun.COM ill_walk_context_t ctx;
27212016SGirish.Moodalbail@Sun.COM ill_t *ill;
27312016SGirish.Moodalbail@Sun.COM ip_stack_t *ipst = (ip_stack_t *)cbarg;
27412016SGirish.Moodalbail@Sun.COM boolean_t isv6;
27512016SGirish.Moodalbail@Sun.COM uint32_t max_mtu, def_mtu;
27612016SGirish.Moodalbail@Sun.COM size_t nbytes = 0;
27712016SGirish.Moodalbail@Sun.COM
27812016SGirish.Moodalbail@Sun.COM if (!(flags & (MOD_PROP_DEFAULT|MOD_PROP_POSSIBLE)))
27912016SGirish.Moodalbail@Sun.COM return (ENOTSUP);
28012016SGirish.Moodalbail@Sun.COM
28112016SGirish.Moodalbail@Sun.COM if (ifname == NULL || ifname[0] == '\0')
28212016SGirish.Moodalbail@Sun.COM return (ENOTSUP);
28312016SGirish.Moodalbail@Sun.COM
28412016SGirish.Moodalbail@Sun.COM isv6 = (pinfo->mpi_proto == MOD_PROTO_IPV6 ? B_TRUE : B_FALSE);
28512016SGirish.Moodalbail@Sun.COM rw_enter(&ipst->ips_ill_g_lock, RW_READER);
28612016SGirish.Moodalbail@Sun.COM if (isv6)
28712016SGirish.Moodalbail@Sun.COM ill = ILL_START_WALK_V6(&ctx, ipst);
28812016SGirish.Moodalbail@Sun.COM else
28912016SGirish.Moodalbail@Sun.COM ill = ILL_START_WALK_V4(&ctx, ipst);
29012016SGirish.Moodalbail@Sun.COM for (; ill != NULL; ill = ill_next(&ctx, ill)) {
29112016SGirish.Moodalbail@Sun.COM if (strcmp(ifname, ill->ill_name) == 0)
29212016SGirish.Moodalbail@Sun.COM break;
29312016SGirish.Moodalbail@Sun.COM }
29412016SGirish.Moodalbail@Sun.COM if (ill == NULL) {
29512016SGirish.Moodalbail@Sun.COM rw_exit(&ipst->ips_ill_g_lock);
29612016SGirish.Moodalbail@Sun.COM return (ENXIO);
29712016SGirish.Moodalbail@Sun.COM }
29812016SGirish.Moodalbail@Sun.COM max_mtu = ill->ill_max_frag;
29912016SGirish.Moodalbail@Sun.COM def_mtu = ill->ill_current_frag;
30012016SGirish.Moodalbail@Sun.COM rw_exit(&ipst->ips_ill_g_lock);
30112016SGirish.Moodalbail@Sun.COM
30212016SGirish.Moodalbail@Sun.COM if (flags & MOD_PROP_DEFAULT) {
30312016SGirish.Moodalbail@Sun.COM nbytes = snprintf(pval, psize, "%u", def_mtu);
30412016SGirish.Moodalbail@Sun.COM } else if (flags & MOD_PROP_POSSIBLE) {
30512016SGirish.Moodalbail@Sun.COM uint32_t min_mtu;
30612016SGirish.Moodalbail@Sun.COM
30712016SGirish.Moodalbail@Sun.COM min_mtu = isv6 ? IPV6_MIN_MTU : IP_MIN_MTU;
30812016SGirish.Moodalbail@Sun.COM nbytes = snprintf(pval, psize, "%u-%u", min_mtu, max_mtu);
30912016SGirish.Moodalbail@Sun.COM } else {
31012016SGirish.Moodalbail@Sun.COM return (ENOTSUP);
31112016SGirish.Moodalbail@Sun.COM }
31212016SGirish.Moodalbail@Sun.COM
31312016SGirish.Moodalbail@Sun.COM if (nbytes >= psize)
31412016SGirish.Moodalbail@Sun.COM return (ENOBUFS);
31512016SGirish.Moodalbail@Sun.COM return (0);
31612016SGirish.Moodalbail@Sun.COM }
31712016SGirish.Moodalbail@Sun.COM
31812016SGirish.Moodalbail@Sun.COM /*
31912016SGirish.Moodalbail@Sun.COM * See the comments for ip[6]_strict_src_multihoming for an explanation
32012016SGirish.Moodalbail@Sun.COM * of the semanitcs.
32112016SGirish.Moodalbail@Sun.COM */
32212313SSowmini.Varadhan@Sun.COM void
ip_set_src_multihoming_common(ulong_t new_value,ulong_t old_value,boolean_t isv6,ip_stack_t * ipst)32312313SSowmini.Varadhan@Sun.COM ip_set_src_multihoming_common(ulong_t new_value, ulong_t old_value,
32412313SSowmini.Varadhan@Sun.COM boolean_t isv6, ip_stack_t *ipst)
32512016SGirish.Moodalbail@Sun.COM {
32612313SSowmini.Varadhan@Sun.COM if (isv6)
32712313SSowmini.Varadhan@Sun.COM ipst->ips_ipv6_strict_src_multihoming = new_value;
32812313SSowmini.Varadhan@Sun.COM else
32912313SSowmini.Varadhan@Sun.COM ipst->ips_ip_strict_src_multihoming = new_value;
33012016SGirish.Moodalbail@Sun.COM if (new_value != old_value) {
33112016SGirish.Moodalbail@Sun.COM if (!isv6) {
33212016SGirish.Moodalbail@Sun.COM if (old_value == 0) {
33312016SGirish.Moodalbail@Sun.COM ire_walk_v4(ip_ire_rebind_walker, NULL,
33412016SGirish.Moodalbail@Sun.COM ALL_ZONES, ipst);
33512313SSowmini.Varadhan@Sun.COM } else if (new_value == 0) {
33612016SGirish.Moodalbail@Sun.COM ire_walk_v4(ip_ire_unbind_walker, NULL,
33712016SGirish.Moodalbail@Sun.COM ALL_ZONES, ipst);
33812016SGirish.Moodalbail@Sun.COM }
33912016SGirish.Moodalbail@Sun.COM ipcl_walk(conn_ire_revalidate, (void *)B_FALSE, ipst);
34012016SGirish.Moodalbail@Sun.COM } else {
34112016SGirish.Moodalbail@Sun.COM if (old_value == 0) {
34212016SGirish.Moodalbail@Sun.COM ire_walk_v6(ip_ire_rebind_walker, NULL,
34312016SGirish.Moodalbail@Sun.COM ALL_ZONES, ipst);
34412313SSowmini.Varadhan@Sun.COM } else if (new_value == 0) {
34512016SGirish.Moodalbail@Sun.COM ire_walk_v6(ip_ire_unbind_walker, NULL,
34612016SGirish.Moodalbail@Sun.COM ALL_ZONES, ipst);
34712016SGirish.Moodalbail@Sun.COM }
34812016SGirish.Moodalbail@Sun.COM ipcl_walk(conn_ire_revalidate, (void *)B_TRUE, ipst);
34912016SGirish.Moodalbail@Sun.COM }
35012016SGirish.Moodalbail@Sun.COM }
35112313SSowmini.Varadhan@Sun.COM }
35212313SSowmini.Varadhan@Sun.COM
35312313SSowmini.Varadhan@Sun.COM /* ARGSUSED */
35412313SSowmini.Varadhan@Sun.COM static int
ip_set_src_multihoming(void * cbarg,cred_t * cr,mod_prop_info_t * pinfo,const char * ifname,const void * pval,uint_t flags)35512313SSowmini.Varadhan@Sun.COM ip_set_src_multihoming(void *cbarg, cred_t *cr, mod_prop_info_t *pinfo,
35612313SSowmini.Varadhan@Sun.COM const char *ifname, const void* pval, uint_t flags)
35712313SSowmini.Varadhan@Sun.COM {
35812313SSowmini.Varadhan@Sun.COM unsigned long new_value, old_value;
35912313SSowmini.Varadhan@Sun.COM boolean_t isv6;
36012313SSowmini.Varadhan@Sun.COM ip_stack_t *ipst = (ip_stack_t *)cbarg;
36112313SSowmini.Varadhan@Sun.COM int err;
36212313SSowmini.Varadhan@Sun.COM
36312313SSowmini.Varadhan@Sun.COM old_value = pinfo->prop_cur_uval;
36412313SSowmini.Varadhan@Sun.COM
36512313SSowmini.Varadhan@Sun.COM if ((err = mod_uint32_value(pval, pinfo, flags, &new_value)) != 0)
36612313SSowmini.Varadhan@Sun.COM return (err);
36712313SSowmini.Varadhan@Sun.COM pinfo->prop_cur_uval = new_value;
36812313SSowmini.Varadhan@Sun.COM isv6 = (strcmp(pinfo->mpi_name, "ip6_strict_src_multihoming") == 0);
36912313SSowmini.Varadhan@Sun.COM ip_set_src_multihoming_common(new_value, old_value, isv6, ipst);
37012313SSowmini.Varadhan@Sun.COM return (0);
37112313SSowmini.Varadhan@Sun.COM }
37212313SSowmini.Varadhan@Sun.COM
37312313SSowmini.Varadhan@Sun.COM
37412313SSowmini.Varadhan@Sun.COM /* ARGSUSED */
37512313SSowmini.Varadhan@Sun.COM static int
ip_set_hostmodel(void * cbarg,cred_t * cr,mod_prop_info_t * pinfo,const char * ifname,const void * pval,uint_t flags)37612313SSowmini.Varadhan@Sun.COM ip_set_hostmodel(void *cbarg, cred_t *cr, mod_prop_info_t *pinfo,
37712313SSowmini.Varadhan@Sun.COM const char *ifname, const void* pval, uint_t flags)
37812313SSowmini.Varadhan@Sun.COM {
37912313SSowmini.Varadhan@Sun.COM ip_hostmodel_t new_value, old_value;
38012313SSowmini.Varadhan@Sun.COM ip_stack_t *ipst = (ip_stack_t *)cbarg;
38112313SSowmini.Varadhan@Sun.COM uint32_t old_src_multihoming;
38212313SSowmini.Varadhan@Sun.COM int err;
38312313SSowmini.Varadhan@Sun.COM ulong_t tmp;
38412313SSowmini.Varadhan@Sun.COM boolean_t isv6;
38512313SSowmini.Varadhan@Sun.COM
38612313SSowmini.Varadhan@Sun.COM old_value = pinfo->prop_cur_uval;
38712313SSowmini.Varadhan@Sun.COM
38812313SSowmini.Varadhan@Sun.COM if ((err = mod_uint32_value(pval, pinfo, flags, &tmp)) != 0)
38912313SSowmini.Varadhan@Sun.COM return (err);
39012313SSowmini.Varadhan@Sun.COM new_value = tmp;
39112313SSowmini.Varadhan@Sun.COM pinfo->prop_cur_uval = new_value;
39212313SSowmini.Varadhan@Sun.COM
39312313SSowmini.Varadhan@Sun.COM switch (old_value) {
39412313SSowmini.Varadhan@Sun.COM case IP_WEAK_ES:
39512313SSowmini.Varadhan@Sun.COM old_src_multihoming = 0;
39612313SSowmini.Varadhan@Sun.COM break;
39712313SSowmini.Varadhan@Sun.COM case IP_SRC_PRI_ES:
39812313SSowmini.Varadhan@Sun.COM old_src_multihoming = 1;
39912313SSowmini.Varadhan@Sun.COM break;
40012313SSowmini.Varadhan@Sun.COM case IP_STRONG_ES:
40112313SSowmini.Varadhan@Sun.COM old_src_multihoming = 2;
40212313SSowmini.Varadhan@Sun.COM break;
40312313SSowmini.Varadhan@Sun.COM default:
40412313SSowmini.Varadhan@Sun.COM ASSERT(0);
40512313SSowmini.Varadhan@Sun.COM old_src_multihoming = IP_MAXVAL_ES;
40612313SSowmini.Varadhan@Sun.COM break;
40712313SSowmini.Varadhan@Sun.COM }
40812313SSowmini.Varadhan@Sun.COM /*
40912313SSowmini.Varadhan@Sun.COM * Changes to src_multihoming may require ire's to be rebound/unbound,
41012313SSowmini.Varadhan@Sun.COM * and also require generation number resets. Changes to dst_multihoming
41112313SSowmini.Varadhan@Sun.COM * require a simple reset of the value.
41212313SSowmini.Varadhan@Sun.COM */
41312313SSowmini.Varadhan@Sun.COM isv6 = (pinfo->mpi_proto == MOD_PROTO_IPV6);
41412313SSowmini.Varadhan@Sun.COM if (new_value != old_value) {
41512313SSowmini.Varadhan@Sun.COM switch (new_value) {
41612313SSowmini.Varadhan@Sun.COM case IP_WEAK_ES:
41712313SSowmini.Varadhan@Sun.COM ip_set_src_multihoming_common(0, old_src_multihoming,
41812313SSowmini.Varadhan@Sun.COM isv6, ipst);
41912313SSowmini.Varadhan@Sun.COM if (isv6)
42012313SSowmini.Varadhan@Sun.COM ipst->ips_ipv6_strict_dst_multihoming = 0;
42112313SSowmini.Varadhan@Sun.COM else
42212313SSowmini.Varadhan@Sun.COM ipst->ips_ip_strict_dst_multihoming = 0;
42312313SSowmini.Varadhan@Sun.COM break;
42412313SSowmini.Varadhan@Sun.COM case IP_SRC_PRI_ES:
42512313SSowmini.Varadhan@Sun.COM ip_set_src_multihoming_common(1, old_src_multihoming,
42612313SSowmini.Varadhan@Sun.COM isv6, ipst);
42712313SSowmini.Varadhan@Sun.COM if (isv6)
42812313SSowmini.Varadhan@Sun.COM ipst->ips_ipv6_strict_dst_multihoming = 0;
42912313SSowmini.Varadhan@Sun.COM else
43012313SSowmini.Varadhan@Sun.COM ipst->ips_ip_strict_dst_multihoming = 0;
43112313SSowmini.Varadhan@Sun.COM break;
43212313SSowmini.Varadhan@Sun.COM case IP_STRONG_ES:
43312313SSowmini.Varadhan@Sun.COM ip_set_src_multihoming_common(2, old_src_multihoming,
43412313SSowmini.Varadhan@Sun.COM isv6, ipst);
43512313SSowmini.Varadhan@Sun.COM if (isv6)
43612313SSowmini.Varadhan@Sun.COM ipst->ips_ipv6_strict_dst_multihoming = 1;
43712313SSowmini.Varadhan@Sun.COM else
43812313SSowmini.Varadhan@Sun.COM ipst->ips_ip_strict_dst_multihoming = 1;
43912313SSowmini.Varadhan@Sun.COM break;
44012313SSowmini.Varadhan@Sun.COM default:
44112313SSowmini.Varadhan@Sun.COM return (EINVAL);
44212313SSowmini.Varadhan@Sun.COM }
44312313SSowmini.Varadhan@Sun.COM }
44412313SSowmini.Varadhan@Sun.COM return (0);
44512313SSowmini.Varadhan@Sun.COM }
44612313SSowmini.Varadhan@Sun.COM
44712313SSowmini.Varadhan@Sun.COM /* ARGSUSED */
44812313SSowmini.Varadhan@Sun.COM int
ip_get_hostmodel(void * cbarg,mod_prop_info_t * pinfo,const char * ifname,void * pval,uint_t psize,uint_t flags)44912313SSowmini.Varadhan@Sun.COM ip_get_hostmodel(void *cbarg, mod_prop_info_t *pinfo, const char *ifname,
45012313SSowmini.Varadhan@Sun.COM void *pval, uint_t psize, uint_t flags)
45112313SSowmini.Varadhan@Sun.COM {
45212313SSowmini.Varadhan@Sun.COM boolean_t isv6 = (pinfo->mpi_proto == MOD_PROTO_IPV6);
45312313SSowmini.Varadhan@Sun.COM ip_stack_t *ipst = cbarg;
45412313SSowmini.Varadhan@Sun.COM ip_hostmodel_t hostmodel;
45512313SSowmini.Varadhan@Sun.COM
45612313SSowmini.Varadhan@Sun.COM if (psize < sizeof (hostmodel))
45712313SSowmini.Varadhan@Sun.COM return (ENOBUFS);
45812313SSowmini.Varadhan@Sun.COM bzero(pval, psize);
45912313SSowmini.Varadhan@Sun.COM if (!isv6) {
46012313SSowmini.Varadhan@Sun.COM if (ipst->ips_ip_strict_src_multihoming == 0 &&
46112313SSowmini.Varadhan@Sun.COM ipst->ips_ip_strict_dst_multihoming == 0)
46212313SSowmini.Varadhan@Sun.COM hostmodel = IP_WEAK_ES;
46312313SSowmini.Varadhan@Sun.COM else if (ipst->ips_ip_strict_src_multihoming == 1 &&
46412313SSowmini.Varadhan@Sun.COM ipst->ips_ip_strict_dst_multihoming == 0)
46512313SSowmini.Varadhan@Sun.COM hostmodel = IP_SRC_PRI_ES;
46612313SSowmini.Varadhan@Sun.COM else if (ipst->ips_ip_strict_src_multihoming == 2 &&
46712313SSowmini.Varadhan@Sun.COM ipst->ips_ip_strict_dst_multihoming == 1)
46812313SSowmini.Varadhan@Sun.COM hostmodel = IP_STRONG_ES;
46912313SSowmini.Varadhan@Sun.COM else
47012313SSowmini.Varadhan@Sun.COM hostmodel = IP_MAXVAL_ES;
47112313SSowmini.Varadhan@Sun.COM } else {
47212313SSowmini.Varadhan@Sun.COM if (ipst->ips_ipv6_strict_src_multihoming == 0 &&
47312313SSowmini.Varadhan@Sun.COM ipst->ips_ipv6_strict_dst_multihoming == 0)
47412313SSowmini.Varadhan@Sun.COM hostmodel = IP_WEAK_ES;
47512313SSowmini.Varadhan@Sun.COM else if (ipst->ips_ipv6_strict_src_multihoming == 1 &&
47612313SSowmini.Varadhan@Sun.COM ipst->ips_ipv6_strict_dst_multihoming == 0)
47712313SSowmini.Varadhan@Sun.COM hostmodel = IP_SRC_PRI_ES;
47812313SSowmini.Varadhan@Sun.COM else if (ipst->ips_ipv6_strict_src_multihoming == 2 &&
47912313SSowmini.Varadhan@Sun.COM ipst->ips_ipv6_strict_dst_multihoming == 1)
48012313SSowmini.Varadhan@Sun.COM hostmodel = IP_STRONG_ES;
48112313SSowmini.Varadhan@Sun.COM else
48212313SSowmini.Varadhan@Sun.COM hostmodel = IP_MAXVAL_ES;
48312313SSowmini.Varadhan@Sun.COM }
48412313SSowmini.Varadhan@Sun.COM bcopy(&hostmodel, pval, sizeof (hostmodel));
48512016SGirish.Moodalbail@Sun.COM return (0);
48612016SGirish.Moodalbail@Sun.COM }
48712016SGirish.Moodalbail@Sun.COM
48812016SGirish.Moodalbail@Sun.COM /*
48912016SGirish.Moodalbail@Sun.COM * All of these are alterable, within the min/max values given, at run time.
49012016SGirish.Moodalbail@Sun.COM *
491*13125SGirish.Moodalbail@oracle.COM * Note: All those tunables which do not start with "_" are Committed and
492*13125SGirish.Moodalbail@oracle.COM * therefore are public. See PSARC 2010/080.
49312016SGirish.Moodalbail@Sun.COM */
49412016SGirish.Moodalbail@Sun.COM mod_prop_info_t ip_propinfo_tbl[] = {
49512016SGirish.Moodalbail@Sun.COM /* tunable - 0 */
496*13125SGirish.Moodalbail@oracle.COM { "_respond_to_address_mask_broadcast", MOD_PROTO_IP,
49712016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
49812016SGirish.Moodalbail@Sun.COM {B_FALSE}, {B_FALSE} },
49912016SGirish.Moodalbail@Sun.COM
500*13125SGirish.Moodalbail@oracle.COM { "_respond_to_echo_broadcast", MOD_PROTO_IP,
50112016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
50212016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
50312016SGirish.Moodalbail@Sun.COM
504*13125SGirish.Moodalbail@oracle.COM { "_respond_to_echo_multicast", MOD_PROTO_IPV4,
50512016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
50612016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
50712016SGirish.Moodalbail@Sun.COM
508*13125SGirish.Moodalbail@oracle.COM { "_respond_to_timestamp", MOD_PROTO_IP,
50912016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
51012016SGirish.Moodalbail@Sun.COM {B_FALSE}, {B_FALSE} },
51112016SGirish.Moodalbail@Sun.COM
512*13125SGirish.Moodalbail@oracle.COM { "_respond_to_timestamp_broadcast", MOD_PROTO_IP,
51312016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
51412016SGirish.Moodalbail@Sun.COM {B_FALSE}, {B_FALSE} },
51512016SGirish.Moodalbail@Sun.COM
516*13125SGirish.Moodalbail@oracle.COM { "_send_redirects", MOD_PROTO_IPV4,
51712016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
51812016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
51912016SGirish.Moodalbail@Sun.COM
520*13125SGirish.Moodalbail@oracle.COM { "_forward_directed_broadcasts", MOD_PROTO_IP,
52112016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
52212016SGirish.Moodalbail@Sun.COM {B_FALSE}, {B_FALSE} },
52312016SGirish.Moodalbail@Sun.COM
524*13125SGirish.Moodalbail@oracle.COM { "_mrtdebug", MOD_PROTO_IP,
52512016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
52612016SGirish.Moodalbail@Sun.COM {0, 10, 0}, {0} },
52712016SGirish.Moodalbail@Sun.COM
528*13125SGirish.Moodalbail@oracle.COM { "_ire_reclaim_fraction", MOD_PROTO_IP,
52912016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
53012016SGirish.Moodalbail@Sun.COM {1, 8, 3}, {3} },
53112016SGirish.Moodalbail@Sun.COM
532*13125SGirish.Moodalbail@oracle.COM { "_nce_reclaim_fraction", MOD_PROTO_IP,
53312016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
53412016SGirish.Moodalbail@Sun.COM {1, 8, 3}, {3} },
53512016SGirish.Moodalbail@Sun.COM
53612016SGirish.Moodalbail@Sun.COM /* tunable - 10 */
537*13125SGirish.Moodalbail@oracle.COM { "_dce_reclaim_fraction", MOD_PROTO_IP,
53812016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
53912016SGirish.Moodalbail@Sun.COM {1, 8, 3}, {3} },
54012016SGirish.Moodalbail@Sun.COM
54112016SGirish.Moodalbail@Sun.COM { "ttl", MOD_PROTO_IPV4,
54212016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
54312016SGirish.Moodalbail@Sun.COM {1, 255, 255}, {255} },
54412016SGirish.Moodalbail@Sun.COM
545*13125SGirish.Moodalbail@oracle.COM { "_forward_src_routed", MOD_PROTO_IPV4,
54612016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
54712016SGirish.Moodalbail@Sun.COM {B_FALSE}, {B_FALSE} },
54812016SGirish.Moodalbail@Sun.COM
549*13125SGirish.Moodalbail@oracle.COM { "_wroff_extra", MOD_PROTO_IP,
55012016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
55112016SGirish.Moodalbail@Sun.COM {0, 256, 32}, {32} },
55212016SGirish.Moodalbail@Sun.COM
55312016SGirish.Moodalbail@Sun.COM /* following tunable is in seconds - a deviant! */
554*13125SGirish.Moodalbail@oracle.COM { "_pathmtu_interval", MOD_PROTO_IP,
55512016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
55612016SGirish.Moodalbail@Sun.COM {2, 999999999, 60*20}, {60*20} },
55712016SGirish.Moodalbail@Sun.COM
558*13125SGirish.Moodalbail@oracle.COM { "_icmp_return_data_bytes", MOD_PROTO_IPV4,
55912016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
56012016SGirish.Moodalbail@Sun.COM {8, 65536, 64}, {64} },
56112016SGirish.Moodalbail@Sun.COM
562*13125SGirish.Moodalbail@oracle.COM { "_path_mtu_discovery", MOD_PROTO_IP,
56312016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
56412016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
56512016SGirish.Moodalbail@Sun.COM
566*13125SGirish.Moodalbail@oracle.COM { "_pmtu_min", MOD_PROTO_IP,
56712016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
56812016SGirish.Moodalbail@Sun.COM {68, 65535, 576}, {576} },
56912016SGirish.Moodalbail@Sun.COM
570*13125SGirish.Moodalbail@oracle.COM { "_ignore_redirect", MOD_PROTO_IPV4,
57112016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
57212016SGirish.Moodalbail@Sun.COM {B_FALSE}, {B_FALSE} },
57312016SGirish.Moodalbail@Sun.COM
574*13125SGirish.Moodalbail@oracle.COM { "_arp_icmp_error", MOD_PROTO_IP,
57512016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
57612016SGirish.Moodalbail@Sun.COM {B_FALSE}, {B_FALSE} },
57712016SGirish.Moodalbail@Sun.COM
57812016SGirish.Moodalbail@Sun.COM /* tunable - 20 */
579*13125SGirish.Moodalbail@oracle.COM { "_broadcast_ttl", MOD_PROTO_IP,
58012016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
58112016SGirish.Moodalbail@Sun.COM {1, 254, 1}, {1} },
58212016SGirish.Moodalbail@Sun.COM
583*13125SGirish.Moodalbail@oracle.COM { "_icmp_err_interval", MOD_PROTO_IP,
58412016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
58512016SGirish.Moodalbail@Sun.COM {0, 99999, 100}, {100} },
58612016SGirish.Moodalbail@Sun.COM
587*13125SGirish.Moodalbail@oracle.COM { "_icmp_err_burst", MOD_PROTO_IP,
58812016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
58912016SGirish.Moodalbail@Sun.COM {1, 99999, 10}, {10} },
59012016SGirish.Moodalbail@Sun.COM
591*13125SGirish.Moodalbail@oracle.COM { "_reass_queue_bytes", MOD_PROTO_IP,
59212016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
59312016SGirish.Moodalbail@Sun.COM {0, 999999999, 1000000}, {1000000} },
59412016SGirish.Moodalbail@Sun.COM
59512016SGirish.Moodalbail@Sun.COM /*
59612016SGirish.Moodalbail@Sun.COM * See comments for ip_strict_src_multihoming for an explanation
59712016SGirish.Moodalbail@Sun.COM * of the semantics of ip_strict_dst_multihoming
59812016SGirish.Moodalbail@Sun.COM */
599*13125SGirish.Moodalbail@oracle.COM { "_strict_dst_multihoming", MOD_PROTO_IPV4,
60012016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
60112016SGirish.Moodalbail@Sun.COM {0, 1, 0}, {0} },
60212016SGirish.Moodalbail@Sun.COM
603*13125SGirish.Moodalbail@oracle.COM { "_addrs_per_if", MOD_PROTO_IP,
60412016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
60512016SGirish.Moodalbail@Sun.COM {1, MAX_ADDRS_PER_IF, 256}, {256} },
60612016SGirish.Moodalbail@Sun.COM
607*13125SGirish.Moodalbail@oracle.COM { "_ipsec_override_persocket_policy", MOD_PROTO_IP,
60812016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
60912016SGirish.Moodalbail@Sun.COM {B_FALSE}, {B_FALSE} },
61012016SGirish.Moodalbail@Sun.COM
611*13125SGirish.Moodalbail@oracle.COM { "_icmp_accept_clear_messages", MOD_PROTO_IP,
61212016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
61312016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
61412016SGirish.Moodalbail@Sun.COM
615*13125SGirish.Moodalbail@oracle.COM { "_igmp_accept_clear_messages", MOD_PROTO_IP,
61612016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
61712016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
61812016SGirish.Moodalbail@Sun.COM
619*13125SGirish.Moodalbail@oracle.COM { "_ndp_delay_first_probe_time", MOD_PROTO_IP,
62012016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
62112016SGirish.Moodalbail@Sun.COM {2, 999999999, ND_DELAY_FIRST_PROBE_TIME},
62212016SGirish.Moodalbail@Sun.COM {ND_DELAY_FIRST_PROBE_TIME} },
62312016SGirish.Moodalbail@Sun.COM
62412016SGirish.Moodalbail@Sun.COM /* tunable - 30 */
625*13125SGirish.Moodalbail@oracle.COM { "_ndp_max_unicast_solicit", MOD_PROTO_IP,
62612016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
62712016SGirish.Moodalbail@Sun.COM {1, 999999999, ND_MAX_UNICAST_SOLICIT}, {ND_MAX_UNICAST_SOLICIT} },
62812016SGirish.Moodalbail@Sun.COM
62912016SGirish.Moodalbail@Sun.COM { "hoplimit", MOD_PROTO_IPV6,
63012016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
63112016SGirish.Moodalbail@Sun.COM {1, 255, IPV6_MAX_HOPS}, {IPV6_MAX_HOPS} },
63212016SGirish.Moodalbail@Sun.COM
633*13125SGirish.Moodalbail@oracle.COM { "_icmp_return_data_bytes", MOD_PROTO_IPV6,
63412016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
63512016SGirish.Moodalbail@Sun.COM {8, IPV6_MIN_MTU, IPV6_MIN_MTU}, {IPV6_MIN_MTU} },
63612016SGirish.Moodalbail@Sun.COM
637*13125SGirish.Moodalbail@oracle.COM { "_forward_src_routed", MOD_PROTO_IPV6,
63812016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
63912016SGirish.Moodalbail@Sun.COM {B_FALSE}, {B_FALSE} },
64012016SGirish.Moodalbail@Sun.COM
641*13125SGirish.Moodalbail@oracle.COM { "_respond_to_echo_multicast", MOD_PROTO_IPV6,
64212016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
64312016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
64412016SGirish.Moodalbail@Sun.COM
645*13125SGirish.Moodalbail@oracle.COM { "_send_redirects", MOD_PROTO_IPV6,
64612016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
64712016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
64812016SGirish.Moodalbail@Sun.COM
649*13125SGirish.Moodalbail@oracle.COM { "_ignore_redirect", MOD_PROTO_IPV6,
65012016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
65112016SGirish.Moodalbail@Sun.COM {B_FALSE}, {B_FALSE} },
65212016SGirish.Moodalbail@Sun.COM
65312016SGirish.Moodalbail@Sun.COM /*
65412016SGirish.Moodalbail@Sun.COM * See comments for ip6_strict_src_multihoming for an explanation
65512016SGirish.Moodalbail@Sun.COM * of the semantics of ip6_strict_dst_multihoming
65612016SGirish.Moodalbail@Sun.COM */
657*13125SGirish.Moodalbail@oracle.COM { "_strict_dst_multihoming", MOD_PROTO_IPV6,
65812016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
65912016SGirish.Moodalbail@Sun.COM {0, 1, 0}, {0} },
66012016SGirish.Moodalbail@Sun.COM
661*13125SGirish.Moodalbail@oracle.COM { "_src_check", MOD_PROTO_IP,
66212016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
66312016SGirish.Moodalbail@Sun.COM {0, 2, 2}, {2} },
66412016SGirish.Moodalbail@Sun.COM
665*13125SGirish.Moodalbail@oracle.COM { "_ipsec_policy_log_interval", MOD_PROTO_IP,
66612016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
66712016SGirish.Moodalbail@Sun.COM {0, 999999, 1000}, {1000} },
66812016SGirish.Moodalbail@Sun.COM
66912016SGirish.Moodalbail@Sun.COM /* tunable - 40 */
670*13125SGirish.Moodalbail@oracle.COM { "_pim_accept_clear_messages", MOD_PROTO_IP,
67112016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
67212016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
67312016SGirish.Moodalbail@Sun.COM
674*13125SGirish.Moodalbail@oracle.COM { "_ndp_unsolicit_interval", MOD_PROTO_IP,
67512016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
67612016SGirish.Moodalbail@Sun.COM {1000, 20000, 2000}, {2000} },
67712016SGirish.Moodalbail@Sun.COM
678*13125SGirish.Moodalbail@oracle.COM { "_ndp_unsolicit_count", MOD_PROTO_IP,
67912016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
68012016SGirish.Moodalbail@Sun.COM {1, 20, 3}, {3} },
68112016SGirish.Moodalbail@Sun.COM
682*13125SGirish.Moodalbail@oracle.COM { "_ignore_home_address_opt", MOD_PROTO_IPV6,
68312016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
68412016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
68512016SGirish.Moodalbail@Sun.COM
686*13125SGirish.Moodalbail@oracle.COM { "_policy_mask", MOD_PROTO_IP,
68712016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
68812016SGirish.Moodalbail@Sun.COM {0, 15, 0}, {0} },
68912016SGirish.Moodalbail@Sun.COM
690*13125SGirish.Moodalbail@oracle.COM { "_ecmp_behavior", MOD_PROTO_IP,
69112016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
69212016SGirish.Moodalbail@Sun.COM {0, 2, 2}, {2} },
69312016SGirish.Moodalbail@Sun.COM
694*13125SGirish.Moodalbail@oracle.COM { "_multirt_ttl", MOD_PROTO_IP,
69512016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
69612016SGirish.Moodalbail@Sun.COM {0, 255, 1}, {1} },
69712016SGirish.Moodalbail@Sun.COM
69812016SGirish.Moodalbail@Sun.COM /* following tunable is in seconds - a deviant */
699*13125SGirish.Moodalbail@oracle.COM { "_ire_badcnt_lifetime", MOD_PROTO_IP,
70012016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
70112016SGirish.Moodalbail@Sun.COM {0, 3600, 60}, {60} },
70212016SGirish.Moodalbail@Sun.COM
703*13125SGirish.Moodalbail@oracle.COM { "_max_temp_idle", MOD_PROTO_IP,
70412016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
70512016SGirish.Moodalbail@Sun.COM {0, 999999, 60*60*24}, {60*60*24} },
70612016SGirish.Moodalbail@Sun.COM
707*13125SGirish.Moodalbail@oracle.COM { "_max_temp_defend", MOD_PROTO_IP,
70812016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
70912016SGirish.Moodalbail@Sun.COM {0, 1000, 1}, {1} },
71012016SGirish.Moodalbail@Sun.COM
71112016SGirish.Moodalbail@Sun.COM /* tunable - 50 */
71212016SGirish.Moodalbail@Sun.COM /*
71312016SGirish.Moodalbail@Sun.COM * when a conflict of an active address is detected,
71412016SGirish.Moodalbail@Sun.COM * defend up to ip_max_defend times, within any
71512016SGirish.Moodalbail@Sun.COM * ip_defend_interval span.
71612016SGirish.Moodalbail@Sun.COM */
717*13125SGirish.Moodalbail@oracle.COM { "_max_defend", MOD_PROTO_IP,
71812016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
71912016SGirish.Moodalbail@Sun.COM {0, 1000, 3}, {3} },
72012016SGirish.Moodalbail@Sun.COM
721*13125SGirish.Moodalbail@oracle.COM { "_defend_interval", MOD_PROTO_IP,
72212016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
72312016SGirish.Moodalbail@Sun.COM {0, 999999, 30}, {30} },
72412016SGirish.Moodalbail@Sun.COM
725*13125SGirish.Moodalbail@oracle.COM { "_dup_recovery", MOD_PROTO_IP,
72612016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
72712016SGirish.Moodalbail@Sun.COM {0, 3600000, 300000}, {300000} },
72812016SGirish.Moodalbail@Sun.COM
729*13125SGirish.Moodalbail@oracle.COM { "_restrict_interzone_loopback", MOD_PROTO_IP,
73012016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
73112016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
73212016SGirish.Moodalbail@Sun.COM
733*13125SGirish.Moodalbail@oracle.COM { "_lso_outbound", MOD_PROTO_IP,
73412016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
73512016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
73612016SGirish.Moodalbail@Sun.COM
737*13125SGirish.Moodalbail@oracle.COM { "_igmp_max_version", MOD_PROTO_IP,
73812016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
73912016SGirish.Moodalbail@Sun.COM {IGMP_V1_ROUTER, IGMP_V3_ROUTER, IGMP_V3_ROUTER},
74012016SGirish.Moodalbail@Sun.COM {IGMP_V3_ROUTER} },
74112016SGirish.Moodalbail@Sun.COM
742*13125SGirish.Moodalbail@oracle.COM { "_mld_max_version", MOD_PROTO_IP,
74312016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
74412016SGirish.Moodalbail@Sun.COM {MLD_V1_ROUTER, MLD_V2_ROUTER, MLD_V2_ROUTER}, {MLD_V2_ROUTER} },
74512016SGirish.Moodalbail@Sun.COM
74612016SGirish.Moodalbail@Sun.COM { "forwarding", MOD_PROTO_IPV4,
74712016SGirish.Moodalbail@Sun.COM ip_set_forwarding, ip_get_forwarding,
74812016SGirish.Moodalbail@Sun.COM {IP_FORWARD_NEVER}, {IP_FORWARD_NEVER} },
74912016SGirish.Moodalbail@Sun.COM
75012016SGirish.Moodalbail@Sun.COM { "forwarding", MOD_PROTO_IPV6,
75112016SGirish.Moodalbail@Sun.COM ip_set_forwarding, ip_get_forwarding,
75212016SGirish.Moodalbail@Sun.COM {IP_FORWARD_NEVER}, {IP_FORWARD_NEVER} },
75312016SGirish.Moodalbail@Sun.COM
754*13125SGirish.Moodalbail@oracle.COM { "_reasm_timeout", MOD_PROTO_IPV4,
75512016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
75612016SGirish.Moodalbail@Sun.COM {5, 255, IP_REASM_TIMEOUT},
75712016SGirish.Moodalbail@Sun.COM {IP_REASM_TIMEOUT} },
75812016SGirish.Moodalbail@Sun.COM
75912016SGirish.Moodalbail@Sun.COM /* tunable - 60 */
760*13125SGirish.Moodalbail@oracle.COM { "_reasm_timeout", MOD_PROTO_IPV6,
76112016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
76212016SGirish.Moodalbail@Sun.COM {5, 255, IPV6_REASM_TIMEOUT},
76312016SGirish.Moodalbail@Sun.COM {IPV6_REASM_TIMEOUT} },
76412016SGirish.Moodalbail@Sun.COM
765*13125SGirish.Moodalbail@oracle.COM { "_cgtp_filter", MOD_PROTO_IP,
76612016SGirish.Moodalbail@Sun.COM ip_set_cgtp_filter, mod_get_boolean,
76712016SGirish.Moodalbail@Sun.COM {B_FALSE}, {B_FALSE} },
76812016SGirish.Moodalbail@Sun.COM
76912016SGirish.Moodalbail@Sun.COM /* delay before sending first probe: */
770*13125SGirish.Moodalbail@oracle.COM { "_arp_probe_delay", MOD_PROTO_IP,
77112016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
77212016SGirish.Moodalbail@Sun.COM {0, 20000, 1000}, {1000} },
77312016SGirish.Moodalbail@Sun.COM
774*13125SGirish.Moodalbail@oracle.COM { "_arp_fastprobe_delay", MOD_PROTO_IP,
77512016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
77612016SGirish.Moodalbail@Sun.COM {0, 20000, 100}, {100} },
77712016SGirish.Moodalbail@Sun.COM
77812016SGirish.Moodalbail@Sun.COM /* interval at which DAD probes are sent: */
779*13125SGirish.Moodalbail@oracle.COM { "_arp_probe_interval", MOD_PROTO_IP,
78012016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
78112016SGirish.Moodalbail@Sun.COM {10, 20000, 1500}, {1500} },
78212016SGirish.Moodalbail@Sun.COM
783*13125SGirish.Moodalbail@oracle.COM { "_arp_fastprobe_interval", MOD_PROTO_IP,
78412016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
78512016SGirish.Moodalbail@Sun.COM {10, 20000, 150}, {150} },
78612016SGirish.Moodalbail@Sun.COM
787*13125SGirish.Moodalbail@oracle.COM { "_arp_probe_count", MOD_PROTO_IP,
78812016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
78912016SGirish.Moodalbail@Sun.COM {0, 20, 3}, {3} },
79012016SGirish.Moodalbail@Sun.COM
791*13125SGirish.Moodalbail@oracle.COM { "_arp_fastprobe_count", MOD_PROTO_IP,
79212016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
79312016SGirish.Moodalbail@Sun.COM {0, 20, 3}, {3} },
79412016SGirish.Moodalbail@Sun.COM
795*13125SGirish.Moodalbail@oracle.COM { "_dad_announce_interval", MOD_PROTO_IPV4,
79612016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
79712016SGirish.Moodalbail@Sun.COM {0, 3600000, 15000}, {15000} },
79812016SGirish.Moodalbail@Sun.COM
799*13125SGirish.Moodalbail@oracle.COM { "_dad_announce_interval", MOD_PROTO_IPV6,
80012016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
80112016SGirish.Moodalbail@Sun.COM {0, 3600000, 15000}, {15000} },
80212016SGirish.Moodalbail@Sun.COM
80312016SGirish.Moodalbail@Sun.COM /* tunable - 70 */
80412016SGirish.Moodalbail@Sun.COM /*
80512016SGirish.Moodalbail@Sun.COM * Rate limiting parameters for DAD defense used in
80612016SGirish.Moodalbail@Sun.COM * ill_defend_rate_limit():
80712016SGirish.Moodalbail@Sun.COM * defend_rate : pkts/hour permitted
80812016SGirish.Moodalbail@Sun.COM * defend_interval : time that can elapse before we send out a
80912016SGirish.Moodalbail@Sun.COM * DAD defense.
81012016SGirish.Moodalbail@Sun.COM * defend_period: denominator for defend_rate (in seconds).
81112016SGirish.Moodalbail@Sun.COM */
812*13125SGirish.Moodalbail@oracle.COM { "_arp_defend_interval", MOD_PROTO_IP,
81312016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
81412016SGirish.Moodalbail@Sun.COM {0, 3600000, 300000}, {300000} },
81512016SGirish.Moodalbail@Sun.COM
816*13125SGirish.Moodalbail@oracle.COM { "_arp_defend_rate", MOD_PROTO_IP,
81712016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
81812016SGirish.Moodalbail@Sun.COM {0, 20000, 100}, {100} },
81912016SGirish.Moodalbail@Sun.COM
820*13125SGirish.Moodalbail@oracle.COM { "_ndp_defend_interval", MOD_PROTO_IP,
82112016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
82212016SGirish.Moodalbail@Sun.COM {0, 3600000, 300000}, {300000} },
82312016SGirish.Moodalbail@Sun.COM
824*13125SGirish.Moodalbail@oracle.COM { "_ndp_defend_rate", MOD_PROTO_IP,
82512016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
82612016SGirish.Moodalbail@Sun.COM {0, 20000, 100}, {100} },
82712016SGirish.Moodalbail@Sun.COM
828*13125SGirish.Moodalbail@oracle.COM { "_arp_defend_period", MOD_PROTO_IP,
82912016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
83012016SGirish.Moodalbail@Sun.COM {5, 86400, 3600}, {3600} },
83112016SGirish.Moodalbail@Sun.COM
832*13125SGirish.Moodalbail@oracle.COM { "_ndp_defend_period", MOD_PROTO_IP,
83312016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
83412016SGirish.Moodalbail@Sun.COM {5, 86400, 3600}, {3600} },
83512016SGirish.Moodalbail@Sun.COM
836*13125SGirish.Moodalbail@oracle.COM { "_icmp_return_pmtu", MOD_PROTO_IPV4,
83712016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
83812016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
83912016SGirish.Moodalbail@Sun.COM
840*13125SGirish.Moodalbail@oracle.COM { "_icmp_return_pmtu", MOD_PROTO_IPV6,
84112016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
84212016SGirish.Moodalbail@Sun.COM {B_TRUE}, {B_TRUE} },
84312016SGirish.Moodalbail@Sun.COM
84412016SGirish.Moodalbail@Sun.COM /*
84512016SGirish.Moodalbail@Sun.COM * publish count/interval values used to announce local addresses
84612016SGirish.Moodalbail@Sun.COM * for IPv4, IPv6.
84712016SGirish.Moodalbail@Sun.COM */
848*13125SGirish.Moodalbail@oracle.COM { "_arp_publish_count", MOD_PROTO_IP,
84912016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
85012016SGirish.Moodalbail@Sun.COM {1, 20, 5}, {5} },
85112016SGirish.Moodalbail@Sun.COM
852*13125SGirish.Moodalbail@oracle.COM { "_arp_publish_interval", MOD_PROTO_IP,
85312016SGirish.Moodalbail@Sun.COM mod_set_uint32, mod_get_uint32,
85412016SGirish.Moodalbail@Sun.COM {1000, 20000, 2000}, {2000} },
85512016SGirish.Moodalbail@Sun.COM
85612016SGirish.Moodalbail@Sun.COM /* tunable - 80 */
85712016SGirish.Moodalbail@Sun.COM /*
85812016SGirish.Moodalbail@Sun.COM * The ip*strict_src_multihoming and ip*strict_dst_multihoming provide
85912016SGirish.Moodalbail@Sun.COM * a range of choices for setting strong/weak/preferred end-system
86012016SGirish.Moodalbail@Sun.COM * behavior. The semantics for setting these are:
86112016SGirish.Moodalbail@Sun.COM *
86212016SGirish.Moodalbail@Sun.COM * ip*_strict_dst_multihoming = 0
86312016SGirish.Moodalbail@Sun.COM * weak end system model for managing ip destination addresses.
86412016SGirish.Moodalbail@Sun.COM * A packet with IP dst D1 that's received on interface I1 will be
86512016SGirish.Moodalbail@Sun.COM * accepted as long as D1 is one of the local addresses on
86612016SGirish.Moodalbail@Sun.COM * the machine, even if D1 is not configured on I1.
86712016SGirish.Moodalbail@Sun.COM * ip*strict_dst_multihioming = 1
86812016SGirish.Moodalbail@Sun.COM * strong end system model for managing ip destination addresses.
86912016SGirish.Moodalbail@Sun.COM * A packet with IP dst D1 that's received on interface I1 will be
87012016SGirish.Moodalbail@Sun.COM * accepted if, and only if, D1 is configured on I1.
87112016SGirish.Moodalbail@Sun.COM *
87212016SGirish.Moodalbail@Sun.COM * ip*strict_src_multihoming = 0
87312016SGirish.Moodalbail@Sun.COM * Source agnostic route selection for outgoing packets: the
87412016SGirish.Moodalbail@Sun.COM * outgoing interface for a packet will be computed using
87512016SGirish.Moodalbail@Sun.COM * default algorithms for route selection, where the route
87612016SGirish.Moodalbail@Sun.COM * with the longest matching prefix is chosen for the output
87712016SGirish.Moodalbail@Sun.COM * unless other route selection constraints are explicitly
87812016SGirish.Moodalbail@Sun.COM * specified during routing table lookup. This may result
87912016SGirish.Moodalbail@Sun.COM * in packet being sent out on interface I2 with source
88012016SGirish.Moodalbail@Sun.COM * address S1, even though S1 is not a configured address on I2.
88112016SGirish.Moodalbail@Sun.COM * ip*strict_src_multihoming = 1
88212016SGirish.Moodalbail@Sun.COM * Preferred source aware route selection for outgoing packets: for
88312016SGirish.Moodalbail@Sun.COM * a packet with source S2, destination D2, the route selection
88412016SGirish.Moodalbail@Sun.COM * algorithm will first attempt to find a route for the destination
88512016SGirish.Moodalbail@Sun.COM * that goes out through an interface where S2 is
88612016SGirish.Moodalbail@Sun.COM * configured. If such a route cannot be found, then the
88712016SGirish.Moodalbail@Sun.COM * best-matching route for D2 will be selected.
88812016SGirish.Moodalbail@Sun.COM * ip*strict_src_multihoming = 2
88912016SGirish.Moodalbail@Sun.COM * Source aware route selection for outgoing packets: a packet will
89012016SGirish.Moodalbail@Sun.COM * be sent out on an interface I2 only if the src address S2 of the
89112016SGirish.Moodalbail@Sun.COM * packet is a configured address on I2. In conjunction with
89212016SGirish.Moodalbail@Sun.COM * the setting 'ip_strict_dst_multihoming == 1', this will result in
89312016SGirish.Moodalbail@Sun.COM * the implementation of Strong ES as defined in Section 3.3.4.2 of
89412016SGirish.Moodalbail@Sun.COM * RFC 1122
89512016SGirish.Moodalbail@Sun.COM */
896*13125SGirish.Moodalbail@oracle.COM { "_strict_src_multihoming", MOD_PROTO_IPV4,
89712016SGirish.Moodalbail@Sun.COM ip_set_src_multihoming, mod_get_uint32,
89812016SGirish.Moodalbail@Sun.COM {0, 2, 0}, {0} },
89912016SGirish.Moodalbail@Sun.COM
900*13125SGirish.Moodalbail@oracle.COM { "_strict_src_multihoming", MOD_PROTO_IPV6,
90112016SGirish.Moodalbail@Sun.COM ip_set_src_multihoming, mod_get_uint32,
90212016SGirish.Moodalbail@Sun.COM {0, 2, 0}, {0} },
90312016SGirish.Moodalbail@Sun.COM
90412016SGirish.Moodalbail@Sun.COM #ifdef DEBUG
905*13125SGirish.Moodalbail@oracle.COM { "_drop_inbound_icmpv6", MOD_PROTO_IPV6,
90612016SGirish.Moodalbail@Sun.COM mod_set_boolean, mod_get_boolean,
90712016SGirish.Moodalbail@Sun.COM {B_FALSE}, {B_FALSE} },
90812016SGirish.Moodalbail@Sun.COM #else
90912016SGirish.Moodalbail@Sun.COM { "", 0, NULL, NULL, {0}, {0} },
91012016SGirish.Moodalbail@Sun.COM #endif
91112016SGirish.Moodalbail@Sun.COM { "mtu", MOD_PROTO_IPV4, NULL, ip_get_mtu, {0}, {0} },
91212016SGirish.Moodalbail@Sun.COM
91312016SGirish.Moodalbail@Sun.COM { "mtu", MOD_PROTO_IPV6, NULL, ip_get_mtu, {0}, {0} },
91412016SGirish.Moodalbail@Sun.COM
91512016SGirish.Moodalbail@Sun.COM /*
91612016SGirish.Moodalbail@Sun.COM * The following entry is a placeholder for `ip_debug' global
91712016SGirish.Moodalbail@Sun.COM * variable. Within these callback functions, we will be
91812016SGirish.Moodalbail@Sun.COM * setting/getting the global variable
91912016SGirish.Moodalbail@Sun.COM */
920*13125SGirish.Moodalbail@oracle.COM { "_debug", MOD_PROTO_IP,
92112016SGirish.Moodalbail@Sun.COM ip_set_debug, ip_get_debug,
92212016SGirish.Moodalbail@Sun.COM {0, 20, 0}, {0} },
92312016SGirish.Moodalbail@Sun.COM
92412313SSowmini.Varadhan@Sun.COM { "hostmodel", MOD_PROTO_IPV4, ip_set_hostmodel, ip_get_hostmodel,
92512313SSowmini.Varadhan@Sun.COM {IP_WEAK_ES, IP_STRONG_ES, IP_WEAK_ES}, {IP_WEAK_ES} },
92612313SSowmini.Varadhan@Sun.COM
92712313SSowmini.Varadhan@Sun.COM { "hostmodel", MOD_PROTO_IPV6, ip_set_hostmodel, ip_get_hostmodel,
92812313SSowmini.Varadhan@Sun.COM {IP_WEAK_ES, IP_STRONG_ES, IP_WEAK_ES}, {IP_WEAK_ES} },
92912313SSowmini.Varadhan@Sun.COM
93012016SGirish.Moodalbail@Sun.COM { "?", MOD_PROTO_IP, NULL, mod_get_allprop, {0}, {0} },
93112016SGirish.Moodalbail@Sun.COM
93212016SGirish.Moodalbail@Sun.COM { NULL, 0, NULL, NULL, {0}, {0} }
93312016SGirish.Moodalbail@Sun.COM };
93412016SGirish.Moodalbail@Sun.COM
93512016SGirish.Moodalbail@Sun.COM int ip_propinfo_count = A_CNT(ip_propinfo_tbl);
936