6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * CDDL HEADER START
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * The contents of this file are subject to the terms of the
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * Common Development and Distribution License (the "License").
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * You may not use this file except in compliance with the License.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * or http://www.opensolaris.org/os/licensing.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * See the License for the specific language governing permissions
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * and limitations under the License.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * When distributing Covered Code, include this CDDL HEADER in each
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * If applicable, add the following below this CDDL HEADER, with the
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * fields enclosed by brackets "[]" replaced with your own identifying
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * information: Portions Copyright [yyyy] [name of copyright owner]
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * CDDL HEADER END
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/*
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved.
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy * Copyright (c) 2013 by Delphix. All rights reserved.
7c6d7024e51780d3aacf9063d2133c1e957d7eeaJerry Jelinek * Copyright (c) 2012, Joyent, Inc. All rights reserved.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail/* Copyright (c) 1990 Mentat Inc. */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#include <inet/ip.h>
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#include <inet/ip6.h>
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#include <inet/ip_if.h>
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#include <inet/ip_ire.h>
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#include <inet/ipclassifier.h>
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#include <inet/ip_impl.h>
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#include <inet/tunables.h>
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#include <sys/sunddi.h>
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#include <sys/policy.h>
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/* How long, in seconds, we allow frags to hang around. */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#define IP_REASM_TIMEOUT 15
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#define IPV6_REASM_TIMEOUT 60
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * Set ip{,6}_forwarding values. If the value is being set on an ill,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * find the ill and set the value on it. On the other hand if we are modifying
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * global property, modify the global value and set the value on all the ills.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/* ARGSUSED */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbailstatic int
299625c6492013aa7bd163862f0d181854f69b3cSebastien Royip_set_forwarding(netstack_t *stack, cred_t *cr, mod_prop_info_t *pinfo,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail const char *ifname, const void* pval, uint_t flags)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail{
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail char *end;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail unsigned long new_value;
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy boolean_t per_ill, isv6;
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ill_walk_context_t ctx;
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ill_t *ill;
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ip_stack_t *ipst = stack->netstack_ip;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (flags & MOD_PROP_DEFAULT) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail new_value = pinfo->prop_def_bval;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail } else {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (ddi_strtoul(pval, &end, 10, &new_value) != 0 ||
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *end != '\0')
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (EINVAL);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (new_value != B_TRUE && new_value != B_FALSE)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (EINVAL);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail per_ill = (ifname != NULL && ifname[0] != '\0');
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * if it's not per ill then set the global property and bring all the
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * ills up to date with the new global value.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (!per_ill)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail pinfo->prop_cur_bval = (new_value == 1 ? B_TRUE : B_FALSE);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail isv6 = (pinfo->mpi_proto == MOD_PROTO_IPV6 ? B_TRUE : B_FALSE);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail rw_enter(&ipst->ips_ill_g_lock, RW_READER);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (isv6)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ill = ILL_START_WALK_V6(&ctx, ipst);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail else
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ill = ILL_START_WALK_V4(&ctx, ipst);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail for (; ill != NULL; ill = ill_next(&ctx, ill)) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * if the property needs to be set on a particular
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * interface, look for that interface.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (per_ill && strcmp(ifname, ill->ill_name) != 0)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail continue;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail (void) ill_forward_set(ill, new_value != 0);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail rw_exit(&ipst->ips_ill_g_lock);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (0);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail}
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbailstatic int
299625c6492013aa7bd163862f0d181854f69b3cSebastien Royip_get_forwarding(netstack_t *stack, mod_prop_info_t *pinfo, const char *ifname,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail void *pval, uint_t pr_size, uint_t flags)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail{
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy boolean_t value;
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ill_walk_context_t ctx;
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ill_t *ill;
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ip_stack_t *ipst = stack->netstack_ip;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail boolean_t get_def = (flags & MOD_PROP_DEFAULT);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail boolean_t get_perm = (flags & MOD_PROP_PERM);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail boolean_t isv6;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail size_t nbytes = 0;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (get_perm) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail nbytes = snprintf(pval, pr_size, "%d", MOD_PROP_PERM_RW);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail goto ret;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail } else if (get_def) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail nbytes = snprintf(pval, pr_size, "%d", pinfo->prop_def_bval);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail goto ret;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * if per interface value is not asked for return the current
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * global value
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (ifname == NULL || ifname[0] == '\0') {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail nbytes = snprintf(pval, pr_size, "%d", pinfo->prop_cur_bval);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail goto ret;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail isv6 = (pinfo->mpi_proto == MOD_PROTO_IPV6 ? B_TRUE : B_FALSE);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail rw_enter(&ipst->ips_ill_g_lock, RW_READER);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (isv6)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ill = ILL_START_WALK_V6(&ctx, ipst);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail else
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ill = ILL_START_WALK_V4(&ctx, ipst);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail for (; ill != NULL; ill = ill_next(&ctx, ill)) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * if the property needs to be obtained on a particular
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * interface, look for that interface.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (strcmp(ifname, ill->ill_name) == 0)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail break;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (ill == NULL) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail rw_exit(&ipst->ips_ill_g_lock);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (ENXIO);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail value = ((ill->ill_flags & ILLF_ROUTER) ? B_TRUE : B_FALSE);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail rw_exit(&ipst->ips_ill_g_lock);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail nbytes = snprintf(pval, pr_size, "%d", value);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbailret:
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (nbytes >= pr_size)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (ENOBUFS);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (0);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail}
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * `ip_debug' is a global variable. So, we will be modifying the global
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * variable here.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/* ARGSUSED */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbailint
299625c6492013aa7bd163862f0d181854f69b3cSebastien Royip_set_debug(netstack_t *stack, cred_t *cr, mod_prop_info_t *pinfo,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail const char *ifname, const void* pval, uint_t flags)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail{
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy unsigned long new_value;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan int err;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (cr != NULL && secpolicy_net_config(cr, B_FALSE) != 0)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (EPERM);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan if ((err = mod_uint32_value(pval, pinfo, flags, &new_value)) != 0)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan return (err);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ip_debug = (uint32_t)new_value;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (0);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail}
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * ip_debug is a global property. For default, permission and value range
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * we retrieve the value from `pinfo'. However for the current value we
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * retrieve the value from the global variable `ip_debug'
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/* ARGSUSED */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbailint
299625c6492013aa7bd163862f0d181854f69b3cSebastien Royip_get_debug(netstack_t *stack, mod_prop_info_t *pinfo, const char *ifname,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail void *pval, uint_t psize, uint_t flags)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail{
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail boolean_t get_def = (flags & MOD_PROP_DEFAULT);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail boolean_t get_perm = (flags & MOD_PROP_PERM);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail boolean_t get_range = (flags & MOD_PROP_POSSIBLE);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail size_t nbytes;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail bzero(pval, psize);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (get_perm)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail nbytes = snprintf(pval, psize, "%u", MOD_PROP_PERM_RW);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail else if (get_range)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail nbytes = snprintf(pval, psize, "%u-%u",
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail pinfo->prop_min_uval, pinfo->prop_max_uval);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail else if (get_def)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail nbytes = snprintf(pval, psize, "%u", pinfo->prop_def_uval);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail else
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail nbytes = snprintf(pval, psize, "%u", ip_debug);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (nbytes >= psize)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (ENOBUFS);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (0);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail}
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * Set the CGTP (multirouting) filtering status. If the status is changed
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * from active to transparent or from transparent to active, forward the
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * new status to the filtering module (if loaded).
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/* ARGSUSED */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbailstatic int
299625c6492013aa7bd163862f0d181854f69b3cSebastien Royip_set_cgtp_filter(netstack_t *stack, cred_t *cr, mod_prop_info_t *pinfo,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail const char *ifname, const void* pval, uint_t flags)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail{
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail unsigned long new_value;
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ip_stack_t *ipst = stack->netstack_ip;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail char *end;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (flags & MOD_PROP_DEFAULT) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail new_value = pinfo->prop_def_bval;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail } else {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (ddi_strtoul(pval, &end, 10, &new_value) != 0 ||
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *end != '\0' || new_value > 1) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (EINVAL);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (!pinfo->prop_cur_bval && new_value) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail cmn_err(CE_NOTE, "IP: enabling CGTP filtering%s",
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ipst->ips_ip_cgtp_filter_ops == NULL ?
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail " (module not loaded)" : "");
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (pinfo->prop_cur_bval && !new_value) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail cmn_err(CE_NOTE, "IP: disabling CGTP filtering%s",
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ipst->ips_ip_cgtp_filter_ops == NULL ?
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail " (module not loaded)" : "");
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (ipst->ips_ip_cgtp_filter_ops != NULL) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail int res;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail netstackid_t stackid = ipst->ips_netstack->netstack_stackid;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail res = ipst->ips_ip_cgtp_filter_ops->cfo_change_state(stackid,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail new_value);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (res)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (res);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail pinfo->prop_cur_bval = (new_value == 1 ? B_TRUE : B_FALSE);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ill_set_inputfn_all(ipst);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (0);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail}
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * Retrieve the default MTU or min-max MTU range for a given interface.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * -- ill_max_frag value tells us the maximum MTU that can be handled by the
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * datalink. This value is advertised by the driver via DLPI messages
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * (DL_NOTE_SDU_SIZE/DL_INFO_ACK).
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * -- ill_current_frag for the most link-types will be same as ill_max_frag
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * to begin with. However it is dynamically computed for some link-types
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * like tunnels, based on the tunnel PMTU.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * -- ill_mtu is the user set MTU using SIOCSLIFMTU and must lie between
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * (IPV6_MIN_MTU/IP_MIN_MTU) and ill_max_frag.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * -- ill_user_mtu is set by in.ndpd using SIOCSLIFLNKINFO and must lie between
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * (IPV6_MIN_MTU/IP_MIN_MTU) and ill_max_frag.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbailint
299625c6492013aa7bd163862f0d181854f69b3cSebastien Royip_get_mtu(netstack_t *stack, mod_prop_info_t *pinfo, const char *ifname,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail void *pval, uint_t psize, uint_t flags)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail{
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ill_walk_context_t ctx;
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ill_t *ill;
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ip_stack_t *ipst = stack->netstack_ip;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail boolean_t isv6;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail uint32_t max_mtu, def_mtu;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail size_t nbytes = 0;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (!(flags & (MOD_PROP_DEFAULT|MOD_PROP_POSSIBLE)))
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (ENOTSUP);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (ifname == NULL || ifname[0] == '\0')
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (ENOTSUP);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail isv6 = (pinfo->mpi_proto == MOD_PROTO_IPV6 ? B_TRUE : B_FALSE);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail rw_enter(&ipst->ips_ill_g_lock, RW_READER);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (isv6)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ill = ILL_START_WALK_V6(&ctx, ipst);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail else
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ill = ILL_START_WALK_V4(&ctx, ipst);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail for (; ill != NULL; ill = ill_next(&ctx, ill)) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (strcmp(ifname, ill->ill_name) == 0)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail break;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (ill == NULL) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail rw_exit(&ipst->ips_ill_g_lock);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (ENXIO);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail max_mtu = ill->ill_max_frag;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail def_mtu = ill->ill_current_frag;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail rw_exit(&ipst->ips_ill_g_lock);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (flags & MOD_PROP_DEFAULT) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail nbytes = snprintf(pval, psize, "%u", def_mtu);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail } else if (flags & MOD_PROP_POSSIBLE) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail uint32_t min_mtu;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail min_mtu = isv6 ? IPV6_MIN_MTU : IP_MIN_MTU;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail nbytes = snprintf(pval, psize, "%u-%u", min_mtu, max_mtu);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail } else {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (ENOTSUP);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (nbytes >= psize)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (ENOBUFS);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (0);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail}
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * See the comments for ip[6]_strict_src_multihoming for an explanation
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * of the semanitcs.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhanvoid
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhanip_set_src_multihoming_common(ulong_t new_value, ulong_t old_value,
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan boolean_t isv6, ip_stack_t *ipst)
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail{
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan if (isv6)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ipv6_strict_src_multihoming = new_value;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan else
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ip_strict_src_multihoming = new_value;
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (new_value != old_value) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (!isv6) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (old_value == 0) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ire_walk_v4(ip_ire_rebind_walker, NULL,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ALL_ZONES, ipst);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan } else if (new_value == 0) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ire_walk_v4(ip_ire_unbind_walker, NULL,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ALL_ZONES, ipst);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ipcl_walk(conn_ire_revalidate, (void *)B_FALSE, ipst);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail } else {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail if (old_value == 0) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ire_walk_v6(ip_ire_rebind_walker, NULL,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ALL_ZONES, ipst);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan } else if (new_value == 0) {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ire_walk_v6(ip_ire_unbind_walker, NULL,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ALL_ZONES, ipst);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ipcl_walk(conn_ire_revalidate, (void *)B_TRUE, ipst);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail }
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan}
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan/* ARGSUSED */
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhanstatic int
299625c6492013aa7bd163862f0d181854f69b3cSebastien Royip_set_src_multihoming(netstack_t *stack, cred_t *cr, mod_prop_info_t *pinfo,
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan const char *ifname, const void* pval, uint_t flags)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan{
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy unsigned long new_value, old_value;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan boolean_t isv6;
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ip_stack_t *ipst = stack->netstack_ip;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan int err;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan old_value = pinfo->prop_cur_uval;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan if ((err = mod_uint32_value(pval, pinfo, flags, &new_value)) != 0)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan return (err);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan pinfo->prop_cur_uval = new_value;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan isv6 = (strcmp(pinfo->mpi_name, "ip6_strict_src_multihoming") == 0);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ip_set_src_multihoming_common(new_value, old_value, isv6, ipst);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan return (0);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan}
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan/* ARGSUSED */
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhanstatic int
299625c6492013aa7bd163862f0d181854f69b3cSebastien Royip_set_hostmodel(netstack_t *stack, cred_t *cr, mod_prop_info_t *pinfo,
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan const char *ifname, const void* pval, uint_t flags)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan{
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ip_hostmodel_t new_value, old_value;
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ip_stack_t *ipst = stack->netstack_ip;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan uint32_t old_src_multihoming;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan int err;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ulong_t tmp;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan boolean_t isv6;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan old_value = pinfo->prop_cur_uval;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan if ((err = mod_uint32_value(pval, pinfo, flags, &tmp)) != 0)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan return (err);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan new_value = tmp;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan pinfo->prop_cur_uval = new_value;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan switch (old_value) {
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan case IP_WEAK_ES:
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan old_src_multihoming = 0;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan break;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan case IP_SRC_PRI_ES:
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan old_src_multihoming = 1;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan break;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan case IP_STRONG_ES:
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan old_src_multihoming = 2;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan break;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan default:
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ASSERT(0);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan old_src_multihoming = IP_MAXVAL_ES;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan break;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan }
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan /*
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan * Changes to src_multihoming may require ire's to be rebound/unbound,
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan * and also require generation number resets. Changes to dst_multihoming
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan * require a simple reset of the value.
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan */
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan isv6 = (pinfo->mpi_proto == MOD_PROTO_IPV6);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan if (new_value != old_value) {
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan switch (new_value) {
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan case IP_WEAK_ES:
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ip_set_src_multihoming_common(0, old_src_multihoming,
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan isv6, ipst);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan if (isv6)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ipv6_strict_dst_multihoming = 0;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan else
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ip_strict_dst_multihoming = 0;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan break;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan case IP_SRC_PRI_ES:
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ip_set_src_multihoming_common(1, old_src_multihoming,
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan isv6, ipst);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan if (isv6)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ipv6_strict_dst_multihoming = 0;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan else
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ip_strict_dst_multihoming = 0;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan break;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan case IP_STRONG_ES:
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ip_set_src_multihoming_common(2, old_src_multihoming,
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan isv6, ipst);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan if (isv6)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ipv6_strict_dst_multihoming = 1;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan else
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ip_strict_dst_multihoming = 1;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan break;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan default:
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan return (EINVAL);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan }
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan }
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan return (0);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan}
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan/* ARGSUSED */
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhanint
299625c6492013aa7bd163862f0d181854f69b3cSebastien Royip_get_hostmodel(netstack_t *stack, mod_prop_info_t *pinfo, const char *ifname,
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan void *pval, uint_t psize, uint_t flags)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan{
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan boolean_t isv6 = (pinfo->mpi_proto == MOD_PROTO_IPV6);
299625c6492013aa7bd163862f0d181854f69b3cSebastien Roy ip_stack_t *ipst = stack->netstack_ip;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ip_hostmodel_t hostmodel;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan if (psize < sizeof (hostmodel))
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan return (ENOBUFS);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan bzero(pval, psize);
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan if (!isv6) {
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan if (ipst->ips_ip_strict_src_multihoming == 0 &&
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ip_strict_dst_multihoming == 0)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan hostmodel = IP_WEAK_ES;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan else if (ipst->ips_ip_strict_src_multihoming == 1 &&
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ip_strict_dst_multihoming == 0)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan hostmodel = IP_SRC_PRI_ES;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan else if (ipst->ips_ip_strict_src_multihoming == 2 &&
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ip_strict_dst_multihoming == 1)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan hostmodel = IP_STRONG_ES;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan else
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan hostmodel = IP_MAXVAL_ES;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan } else {
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan if (ipst->ips_ipv6_strict_src_multihoming == 0 &&
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ipv6_strict_dst_multihoming == 0)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan hostmodel = IP_WEAK_ES;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan else if (ipst->ips_ipv6_strict_src_multihoming == 1 &&
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ipv6_strict_dst_multihoming == 0)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan hostmodel = IP_SRC_PRI_ES;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan else if (ipst->ips_ipv6_strict_src_multihoming == 2 &&
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan ipst->ips_ipv6_strict_dst_multihoming == 1)
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan hostmodel = IP_STRONG_ES;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan else
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan hostmodel = IP_MAXVAL_ES;
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan }
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan bcopy(&hostmodel, pval, sizeof (hostmodel));
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail return (0);
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail}
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail/*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * All of these are alterable, within the min/max values given, at run time.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail * Note: All those tunables which do not start with "_" are Committed and
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail * therefore are public. See PSARC 2010/080.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbailmod_prop_info_t ip_propinfo_tbl[] = {
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* tunable - 0 */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_respond_to_address_mask_broadcast", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_FALSE}, {B_FALSE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_respond_to_echo_broadcast", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_respond_to_echo_multicast", MOD_PROTO_IPV4,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_respond_to_timestamp", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_FALSE}, {B_FALSE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_respond_to_timestamp_broadcast", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_FALSE}, {B_FALSE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_send_redirects", MOD_PROTO_IPV4,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_forward_directed_broadcasts", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_FALSE}, {B_FALSE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_mrtdebug", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 10, 0}, {0} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ire_reclaim_fraction", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1, 8, 3}, {3} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_nce_reclaim_fraction", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1, 8, 3}, {3} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* tunable - 10 */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_dce_reclaim_fraction", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1, 8, 3}, {3} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail { "ttl", MOD_PROTO_IPV4,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1, 255, 255}, {255} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_forward_src_routed", MOD_PROTO_IPV4,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_FALSE}, {B_FALSE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_wroff_extra", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 256, 32}, {32} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* following tunable is in seconds - a deviant! */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_pathmtu_interval", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {2, 999999999, 60*20}, {60*20} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_icmp_return_data_bytes", MOD_PROTO_IPV4,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {8, 65536, 64}, {64} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_path_mtu_discovery", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_pmtu_min", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {68, 65535, 576}, {576} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ignore_redirect", MOD_PROTO_IPV4,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_FALSE}, {B_FALSE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_arp_icmp_error", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_FALSE}, {B_FALSE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* tunable - 20 */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_broadcast_ttl", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1, 254, 1}, {1} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_icmp_err_interval", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 99999, 100}, {100} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_icmp_err_burst", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1, 99999, 10}, {10} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_reass_queue_bytes", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 999999999, 1000000}, {1000000} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * See comments for ip_strict_src_multihoming for an explanation
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * of the semantics of ip_strict_dst_multihoming
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_strict_dst_multihoming", MOD_PROTO_IPV4,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 1, 0}, {0} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_addrs_per_if", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1, MAX_ADDRS_PER_IF, 256}, {256} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ipsec_override_persocket_policy", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_FALSE}, {B_FALSE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_icmp_accept_clear_messages", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_igmp_accept_clear_messages", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ndp_delay_first_probe_time", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {2, 999999999, ND_DELAY_FIRST_PROBE_TIME},
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {ND_DELAY_FIRST_PROBE_TIME} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* tunable - 30 */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ndp_max_unicast_solicit", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1, 999999999, ND_MAX_UNICAST_SOLICIT}, {ND_MAX_UNICAST_SOLICIT} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail { "hoplimit", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1, 255, IPV6_MAX_HOPS}, {IPV6_MAX_HOPS} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_icmp_return_data_bytes", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {8, IPV6_MIN_MTU, IPV6_MIN_MTU}, {IPV6_MIN_MTU} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_forward_src_routed", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_FALSE}, {B_FALSE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_respond_to_echo_multicast", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_send_redirects", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ignore_redirect", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_FALSE}, {B_FALSE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * See comments for ip6_strict_src_multihoming for an explanation
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * of the semantics of ip6_strict_dst_multihoming
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_strict_dst_multihoming", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 1, 0}, {0} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_src_check", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 2, 2}, {2} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ipsec_policy_log_interval", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
05b5eb98f5af5545cf01e97712cca09c5293fe9aDan McDonald {0, 999999, 0}, {0} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* tunable - 40 */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_pim_accept_clear_messages", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ndp_unsolicit_interval", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1000, 20000, 2000}, {2000} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ndp_unsolicit_count", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1, 20, 3}, {3} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ignore_home_address_opt", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_policy_mask", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 15, 0}, {0} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ecmp_behavior", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 2, 2}, {2} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_multirt_ttl", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 255, 1}, {1} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* following tunable is in seconds - a deviant */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ire_badcnt_lifetime", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 3600, 60}, {60} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_max_temp_idle", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 999999, 60*60*24}, {60*60*24} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_max_temp_defend", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 1000, 1}, {1} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* tunable - 50 */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * when a conflict of an active address is detected,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * defend up to ip_max_defend times, within any
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * ip_defend_interval span.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_max_defend", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 1000, 3}, {3} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_defend_interval", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 999999, 30}, {30} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_dup_recovery", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 3600000, 300000}, {300000} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_restrict_interzone_loopback", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_lso_outbound", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_igmp_max_version", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {IGMP_V1_ROUTER, IGMP_V3_ROUTER, IGMP_V3_ROUTER},
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {IGMP_V3_ROUTER} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_mld_max_version", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {MLD_V1_ROUTER, MLD_V2_ROUTER, MLD_V2_ROUTER}, {MLD_V2_ROUTER} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail { "forwarding", MOD_PROTO_IPV4,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ip_set_forwarding, ip_get_forwarding,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {IP_FORWARD_NEVER}, {IP_FORWARD_NEVER} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail { "forwarding", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ip_set_forwarding, ip_get_forwarding,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {IP_FORWARD_NEVER}, {IP_FORWARD_NEVER} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_reasm_timeout", MOD_PROTO_IPV4,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {5, 255, IP_REASM_TIMEOUT},
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {IP_REASM_TIMEOUT} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* tunable - 60 */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_reasm_timeout", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {5, 255, IPV6_REASM_TIMEOUT},
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {IPV6_REASM_TIMEOUT} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_cgtp_filter", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ip_set_cgtp_filter, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_FALSE}, {B_FALSE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* delay before sending first probe: */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_arp_probe_delay", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 20000, 1000}, {1000} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_arp_fastprobe_delay", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 20000, 100}, {100} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* interval at which DAD probes are sent: */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_arp_probe_interval", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {10, 20000, 1500}, {1500} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_arp_fastprobe_interval", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {10, 20000, 150}, {150} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_arp_probe_count", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 20, 3}, {3} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_arp_fastprobe_count", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 20, 3}, {3} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_dad_announce_interval", MOD_PROTO_IPV4,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 3600000, 15000}, {15000} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_dad_announce_interval", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 3600000, 15000}, {15000} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* tunable - 70 */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * Rate limiting parameters for DAD defense used in
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * ill_defend_rate_limit():
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * defend_rate : pkts/hour permitted
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * defend_interval : time that can elapse before we send out a
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * DAD defense.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * defend_period: denominator for defend_rate (in seconds).
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_arp_defend_interval", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 3600000, 300000}, {300000} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_arp_defend_rate", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 20000, 100}, {100} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ndp_defend_interval", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 3600000, 300000}, {300000} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ndp_defend_rate", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 20000, 100}, {100} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_arp_defend_period", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {5, 86400, 3600}, {3600} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_ndp_defend_period", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {5, 86400, 3600}, {3600} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_icmp_return_pmtu", MOD_PROTO_IPV4,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_icmp_return_pmtu", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_TRUE}, {B_TRUE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * publish count/interval values used to announce local addresses
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * for IPv4, IPv6.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_arp_publish_count", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1, 20, 5}, {5} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_arp_publish_interval", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_uint32, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {1000, 20000, 2000}, {2000} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /* tunable - 80 */
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * The ip*strict_src_multihoming and ip*strict_dst_multihoming provide
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * a range of choices for setting strong/weak/preferred end-system
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * behavior. The semantics for setting these are:
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * ip*_strict_dst_multihoming = 0
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * weak end system model for managing ip destination addresses.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * A packet with IP dst D1 that's received on interface I1 will be
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * accepted as long as D1 is one of the local addresses on
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * the machine, even if D1 is not configured on I1.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * ip*strict_dst_multihioming = 1
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * strong end system model for managing ip destination addresses.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * A packet with IP dst D1 that's received on interface I1 will be
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * accepted if, and only if, D1 is configured on I1.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail *
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * ip*strict_src_multihoming = 0
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * Source agnostic route selection for outgoing packets: the
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * outgoing interface for a packet will be computed using
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * default algorithms for route selection, where the route
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * with the longest matching prefix is chosen for the output
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * unless other route selection constraints are explicitly
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * specified during routing table lookup. This may result
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * in packet being sent out on interface I2 with source
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * address S1, even though S1 is not a configured address on I2.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * ip*strict_src_multihoming = 1
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * Preferred source aware route selection for outgoing packets: for
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * a packet with source S2, destination D2, the route selection
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * algorithm will first attempt to find a route for the destination
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * that goes out through an interface where S2 is
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * configured. If such a route cannot be found, then the
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * best-matching route for D2 will be selected.
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * ip*strict_src_multihoming = 2
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * Source aware route selection for outgoing packets: a packet will
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * be sent out on an interface I2 only if the src address S2 of the
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * packet is a configured address on I2. In conjunction with
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * the setting 'ip_strict_dst_multihoming == 1', this will result in
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * the implementation of Strong ES as defined in Section 3.3.4.2 of
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * RFC 1122
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_strict_src_multihoming", MOD_PROTO_IPV4,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ip_set_src_multihoming, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 2, 0}, {0} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_strict_src_multihoming", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ip_set_src_multihoming, mod_get_uint32,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 2, 0}, {0} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#ifdef DEBUG
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_drop_inbound_icmpv6", MOD_PROTO_IPV6,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail mod_set_boolean, mod_get_boolean,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {B_FALSE}, {B_FALSE} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#else
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail { "", 0, NULL, NULL, {0}, {0} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail#endif
7c6d7024e51780d3aacf9063d2133c1e957d7eeaJerry Jelinek
7c6d7024e51780d3aacf9063d2133c1e957d7eeaJerry Jelinek { "_dce_reclaim_threshold", MOD_PROTO_IP,
7c6d7024e51780d3aacf9063d2133c1e957d7eeaJerry Jelinek mod_set_uint32, mod_get_uint32,
7c6d7024e51780d3aacf9063d2133c1e957d7eeaJerry Jelinek {1, 100000, 32}, {32} },
7c6d7024e51780d3aacf9063d2133c1e957d7eeaJerry Jelinek
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail { "mtu", MOD_PROTO_IPV4, NULL, ip_get_mtu, {0}, {0} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail { "mtu", MOD_PROTO_IPV6, NULL, ip_get_mtu, {0}, {0} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail /*
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * The following entry is a placeholder for `ip_debug' global
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * variable. Within these callback functions, we will be
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail * setting/getting the global variable
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail */
8887b57dc579de11464fc6c74163d2595ce073afGirish Moodalbail { "_debug", MOD_PROTO_IP,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail ip_set_debug, ip_get_debug,
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail {0, 20, 0}, {0} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan { "hostmodel", MOD_PROTO_IPV4, ip_set_hostmodel, ip_get_hostmodel,
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan {IP_WEAK_ES, IP_STRONG_ES, IP_WEAK_ES}, {IP_WEAK_ES} },
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan { "hostmodel", MOD_PROTO_IPV6, ip_set_hostmodel, ip_get_hostmodel,
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan {IP_WEAK_ES, IP_STRONG_ES, IP_WEAK_ES}, {IP_WEAK_ES} },
f1e9465bc27e0b59eff81249c9c2e3fd268727a6Sowmini Varadhan
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail { "?", MOD_PROTO_IP, NULL, mod_get_allprop, {0}, {0} },
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail { NULL, 0, NULL, NULL, {0}, {0} }
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail};
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbail
6e91bba0d6c6bdabbba62cefae583715a4a58e2aGirish Moodalbailint ip_propinfo_count = A_CNT(ip_propinfo_tbl);