16e91bba0SGirish Moodalbail /* 26e91bba0SGirish Moodalbail * CDDL HEADER START 36e91bba0SGirish Moodalbail * 46e91bba0SGirish Moodalbail * The contents of this file are subject to the terms of the 56e91bba0SGirish Moodalbail * Common Development and Distribution License (the "License"). 66e91bba0SGirish Moodalbail * You may not use this file except in compliance with the License. 76e91bba0SGirish Moodalbail * 86e91bba0SGirish Moodalbail * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 96e91bba0SGirish Moodalbail * or http://www.opensolaris.org/os/licensing. 106e91bba0SGirish Moodalbail * See the License for the specific language governing permissions 116e91bba0SGirish Moodalbail * and limitations under the License. 126e91bba0SGirish Moodalbail * 136e91bba0SGirish Moodalbail * When distributing Covered Code, include this CDDL HEADER in each 146e91bba0SGirish Moodalbail * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 156e91bba0SGirish Moodalbail * If applicable, add the following below this CDDL HEADER, with the 166e91bba0SGirish Moodalbail * fields enclosed by brackets "[]" replaced with your own identifying 176e91bba0SGirish Moodalbail * information: Portions Copyright [yyyy] [name of copyright owner] 186e91bba0SGirish Moodalbail * 196e91bba0SGirish Moodalbail * CDDL HEADER END 206e91bba0SGirish Moodalbail */ 215dd46ab5SKacheong Poon 226e91bba0SGirish Moodalbail /* 235dd46ab5SKacheong Poon * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. 246e91bba0SGirish Moodalbail */ 256e91bba0SGirish Moodalbail 266e91bba0SGirish Moodalbail #include <inet/ip.h> 276e91bba0SGirish Moodalbail #include <inet/ip6.h> 286e91bba0SGirish Moodalbail #include <inet/sctp/sctp_stack.h> 296e91bba0SGirish Moodalbail #include <inet/sctp/sctp_impl.h> 306e91bba0SGirish Moodalbail #include <sys/sunddi.h> 316e91bba0SGirish Moodalbail 326e91bba0SGirish Moodalbail /* Max size IP datagram is 64k - 1 */ 336e91bba0SGirish Moodalbail #define SCTP_MSS_MAX_IPV4 (IP_MAXPACKET - (sizeof (ipha_t) + \ 346e91bba0SGirish Moodalbail sizeof (sctp_hdr_t))) 356e91bba0SGirish Moodalbail #define SCTP_MSS_MAX_IPV6 (IP_MAXPACKET - (sizeof (ip6_t) + \ 366e91bba0SGirish Moodalbail sizeof (sctp_hdr_t))) 376e91bba0SGirish Moodalbail /* Max of the above */ 386e91bba0SGirish Moodalbail #define SCTP_MSS_MAX SCTP_MSS_MAX_IPV4 396e91bba0SGirish Moodalbail 405dd46ab5SKacheong Poon /* 415dd46ab5SKacheong Poon * returns the current list of listener limit configuration. 425dd46ab5SKacheong Poon */ 435dd46ab5SKacheong Poon /* ARGSUSED */ 445dd46ab5SKacheong Poon static int 455dd46ab5SKacheong Poon sctp_listener_conf_get(void *cbarg, mod_prop_info_t *pinfo, const char *ifname, 465dd46ab5SKacheong Poon void *val, uint_t psize, uint_t flags) 475dd46ab5SKacheong Poon { 485dd46ab5SKacheong Poon sctp_stack_t *sctps = (sctp_stack_t *)cbarg; 495dd46ab5SKacheong Poon sctp_listener_t *sl; 505dd46ab5SKacheong Poon char *pval = val; 515dd46ab5SKacheong Poon size_t nbytes = 0, tbytes = 0; 525dd46ab5SKacheong Poon uint_t size; 535dd46ab5SKacheong Poon int err = 0; 545dd46ab5SKacheong Poon 555dd46ab5SKacheong Poon bzero(pval, psize); 565dd46ab5SKacheong Poon size = psize; 575dd46ab5SKacheong Poon 585dd46ab5SKacheong Poon if (flags & (MOD_PROP_DEFAULT|MOD_PROP_PERM|MOD_PROP_POSSIBLE)) 595dd46ab5SKacheong Poon return (0); 605dd46ab5SKacheong Poon 615dd46ab5SKacheong Poon mutex_enter(&sctps->sctps_listener_conf_lock); 625dd46ab5SKacheong Poon for (sl = list_head(&sctps->sctps_listener_conf); sl != NULL; 635dd46ab5SKacheong Poon sl = list_next(&sctps->sctps_listener_conf, sl)) { 645dd46ab5SKacheong Poon if (psize == size) 655dd46ab5SKacheong Poon nbytes = snprintf(pval, size, "%d:%d", sl->sl_port, 665dd46ab5SKacheong Poon sl->sl_ratio); 675dd46ab5SKacheong Poon else 685dd46ab5SKacheong Poon nbytes = snprintf(pval, size, ",%d:%d", sl->sl_port, 695dd46ab5SKacheong Poon sl->sl_ratio); 705dd46ab5SKacheong Poon size -= nbytes; 715dd46ab5SKacheong Poon pval += nbytes; 725dd46ab5SKacheong Poon tbytes += nbytes; 735dd46ab5SKacheong Poon if (tbytes >= psize) { 745dd46ab5SKacheong Poon /* Buffer overflow, stop copying information */ 755dd46ab5SKacheong Poon err = ENOBUFS; 765dd46ab5SKacheong Poon break; 775dd46ab5SKacheong Poon } 785dd46ab5SKacheong Poon } 795dd46ab5SKacheong Poon 805dd46ab5SKacheong Poon mutex_exit(&sctps->sctps_listener_conf_lock); 815dd46ab5SKacheong Poon return (err); 825dd46ab5SKacheong Poon } 835dd46ab5SKacheong Poon 845dd46ab5SKacheong Poon /* 855dd46ab5SKacheong Poon * add a new listener limit configuration. 865dd46ab5SKacheong Poon */ 875dd46ab5SKacheong Poon /* ARGSUSED */ 885dd46ab5SKacheong Poon static int 895dd46ab5SKacheong Poon sctp_listener_conf_add(void *cbarg, cred_t *cr, mod_prop_info_t *pinfo, 905dd46ab5SKacheong Poon const char *ifname, const void* pval, uint_t flags) 915dd46ab5SKacheong Poon { 925dd46ab5SKacheong Poon sctp_listener_t *new_sl; 935dd46ab5SKacheong Poon sctp_listener_t *sl; 945dd46ab5SKacheong Poon long lport; 955dd46ab5SKacheong Poon long ratio; 965dd46ab5SKacheong Poon char *colon; 975dd46ab5SKacheong Poon sctp_stack_t *sctps = (sctp_stack_t *)cbarg; 985dd46ab5SKacheong Poon 995dd46ab5SKacheong Poon if (flags & MOD_PROP_DEFAULT) 1005dd46ab5SKacheong Poon return (ENOTSUP); 1015dd46ab5SKacheong Poon 1025dd46ab5SKacheong Poon if (ddi_strtol(pval, &colon, 10, &lport) != 0 || lport <= 0 || 1035dd46ab5SKacheong Poon lport > USHRT_MAX || *colon != ':') { 1045dd46ab5SKacheong Poon return (EINVAL); 1055dd46ab5SKacheong Poon } 1065dd46ab5SKacheong Poon if (ddi_strtol(colon + 1, NULL, 10, &ratio) != 0 || ratio <= 0) 1075dd46ab5SKacheong Poon return (EINVAL); 1085dd46ab5SKacheong Poon 1095dd46ab5SKacheong Poon mutex_enter(&sctps->sctps_listener_conf_lock); 1105dd46ab5SKacheong Poon for (sl = list_head(&sctps->sctps_listener_conf); sl != NULL; 1115dd46ab5SKacheong Poon sl = list_next(&sctps->sctps_listener_conf, sl)) { 1125dd46ab5SKacheong Poon /* There is an existing entry, so update its ratio value. */ 1135dd46ab5SKacheong Poon if (sl->sl_port == lport) { 1145dd46ab5SKacheong Poon sl->sl_ratio = ratio; 1155dd46ab5SKacheong Poon mutex_exit(&sctps->sctps_listener_conf_lock); 1165dd46ab5SKacheong Poon return (0); 1175dd46ab5SKacheong Poon } 1185dd46ab5SKacheong Poon } 1195dd46ab5SKacheong Poon 1205dd46ab5SKacheong Poon if ((new_sl = kmem_alloc(sizeof (sctp_listener_t), KM_NOSLEEP)) == 1215dd46ab5SKacheong Poon NULL) { 1225dd46ab5SKacheong Poon mutex_exit(&sctps->sctps_listener_conf_lock); 1235dd46ab5SKacheong Poon return (ENOMEM); 1245dd46ab5SKacheong Poon } 1255dd46ab5SKacheong Poon 1265dd46ab5SKacheong Poon new_sl->sl_port = lport; 1275dd46ab5SKacheong Poon new_sl->sl_ratio = ratio; 1285dd46ab5SKacheong Poon list_insert_tail(&sctps->sctps_listener_conf, new_sl); 1295dd46ab5SKacheong Poon mutex_exit(&sctps->sctps_listener_conf_lock); 1305dd46ab5SKacheong Poon return (0); 1315dd46ab5SKacheong Poon } 1325dd46ab5SKacheong Poon 1335dd46ab5SKacheong Poon /* 1345dd46ab5SKacheong Poon * remove a listener limit configuration. 1355dd46ab5SKacheong Poon */ 1365dd46ab5SKacheong Poon /* ARGSUSED */ 1375dd46ab5SKacheong Poon static int 1385dd46ab5SKacheong Poon sctp_listener_conf_del(void *cbarg, cred_t *cr, mod_prop_info_t *pinfo, 1395dd46ab5SKacheong Poon const char *ifname, const void* pval, uint_t flags) 1405dd46ab5SKacheong Poon { 1415dd46ab5SKacheong Poon sctp_listener_t *sl; 1425dd46ab5SKacheong Poon long lport; 1435dd46ab5SKacheong Poon sctp_stack_t *sctps = (sctp_stack_t *)cbarg; 1445dd46ab5SKacheong Poon 1455dd46ab5SKacheong Poon if (flags & MOD_PROP_DEFAULT) 1465dd46ab5SKacheong Poon return (ENOTSUP); 1475dd46ab5SKacheong Poon 1485dd46ab5SKacheong Poon if (ddi_strtol(pval, NULL, 10, &lport) != 0 || lport <= 0 || 1495dd46ab5SKacheong Poon lport > USHRT_MAX) { 1505dd46ab5SKacheong Poon return (EINVAL); 1515dd46ab5SKacheong Poon } 1525dd46ab5SKacheong Poon mutex_enter(&sctps->sctps_listener_conf_lock); 1535dd46ab5SKacheong Poon for (sl = list_head(&sctps->sctps_listener_conf); sl != NULL; 1545dd46ab5SKacheong Poon sl = list_next(&sctps->sctps_listener_conf, sl)) { 1555dd46ab5SKacheong Poon if (sl->sl_port == lport) { 1565dd46ab5SKacheong Poon list_remove(&sctps->sctps_listener_conf, sl); 1575dd46ab5SKacheong Poon mutex_exit(&sctps->sctps_listener_conf_lock); 1585dd46ab5SKacheong Poon kmem_free(sl, sizeof (sctp_listener_t)); 1595dd46ab5SKacheong Poon return (0); 1605dd46ab5SKacheong Poon } 1615dd46ab5SKacheong Poon } 1625dd46ab5SKacheong Poon mutex_exit(&sctps->sctps_listener_conf_lock); 1635dd46ab5SKacheong Poon return (ESRCH); 1645dd46ab5SKacheong Poon } 1655dd46ab5SKacheong Poon 1666e91bba0SGirish Moodalbail /* 1676e91bba0SGirish Moodalbail * All of these are alterable, within the min/max values given, at run time. 1686e91bba0SGirish Moodalbail * 169*8887b57dSGirish Moodalbail * Note: All those tunables which do not start with "_" are Committed and 170*8887b57dSGirish Moodalbail * therefore are public. See PSARC 2010/080. 1716e91bba0SGirish Moodalbail */ 1726e91bba0SGirish Moodalbail mod_prop_info_t sctp_propinfo_tbl[] = { 173*8887b57dSGirish Moodalbail { "_max_init_retr", MOD_PROTO_SCTP, 1746e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 1756e91bba0SGirish Moodalbail {0, 128, 8}, {8} }, 1766e91bba0SGirish Moodalbail 177*8887b57dSGirish Moodalbail { "_pa_max_retr", MOD_PROTO_SCTP, 1786e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 1796e91bba0SGirish Moodalbail {1, 128, 10}, {10} }, 1806e91bba0SGirish Moodalbail 181*8887b57dSGirish Moodalbail { "_pp_max_retr", MOD_PROTO_SCTP, 1826e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 1836e91bba0SGirish Moodalbail {1, 128, 5}, {5} }, 1846e91bba0SGirish Moodalbail 185*8887b57dSGirish Moodalbail { "_cwnd_max", MOD_PROTO_SCTP, 1866e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 1876e91bba0SGirish Moodalbail {128, (1<<30), 1024*1024}, {1024*1024} }, 1886e91bba0SGirish Moodalbail 1896e91bba0SGirish Moodalbail { "smallest_nonpriv_port", MOD_PROTO_SCTP, 1906e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 1916e91bba0SGirish Moodalbail {1024, (32*1024), 1024}, {1024} }, 1926e91bba0SGirish Moodalbail 193*8887b57dSGirish Moodalbail { "_ipv4_ttl", MOD_PROTO_SCTP, 1946e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 1956e91bba0SGirish Moodalbail {1, 255, 64}, {64} }, 1966e91bba0SGirish Moodalbail 197*8887b57dSGirish Moodalbail { "_heartbeat_interval", MOD_PROTO_SCTP, 1986e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 1996e91bba0SGirish Moodalbail {0, 1*DAYS, 30*SECONDS}, {30*SECONDS} }, 2006e91bba0SGirish Moodalbail 201*8887b57dSGirish Moodalbail { "_initial_mtu", MOD_PROTO_SCTP, 2026e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2036e91bba0SGirish Moodalbail {68, 65535, 1500}, {1500} }, 2046e91bba0SGirish Moodalbail 205*8887b57dSGirish Moodalbail { "_mtu_probe_interval", MOD_PROTO_SCTP, 2066e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2076e91bba0SGirish Moodalbail {0, 1*DAYS, 10*MINUTES}, {10*MINUTES} }, 2086e91bba0SGirish Moodalbail 209*8887b57dSGirish Moodalbail { "_new_secret_interval", MOD_PROTO_SCTP, 2106e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2116e91bba0SGirish Moodalbail {0, 1*DAYS, 2*MINUTES}, {2*MINUTES} }, 2126e91bba0SGirish Moodalbail 2136e91bba0SGirish Moodalbail /* tunable - 10 */ 214*8887b57dSGirish Moodalbail { "_deferred_ack_interval", MOD_PROTO_SCTP, 2156e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2166e91bba0SGirish Moodalbail {10*MS, 1*MINUTES, 100*MS}, {100*MS} }, 2176e91bba0SGirish Moodalbail 218*8887b57dSGirish Moodalbail { "_snd_lowat_fraction", MOD_PROTO_SCTP, 2196e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2206e91bba0SGirish Moodalbail {0, 16, 0}, {0} }, 2216e91bba0SGirish Moodalbail 222*8887b57dSGirish Moodalbail { "_ignore_path_mtu", MOD_PROTO_SCTP, 2236e91bba0SGirish Moodalbail mod_set_boolean, mod_get_boolean, 2246e91bba0SGirish Moodalbail {B_FALSE}, {B_FALSE} }, 2256e91bba0SGirish Moodalbail 226*8887b57dSGirish Moodalbail { "_initial_ssthresh", MOD_PROTO_SCTP, 2276e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2286e91bba0SGirish Moodalbail {1024, UINT32_MAX, SCTP_RECV_HIWATER}, { SCTP_RECV_HIWATER} }, 2296e91bba0SGirish Moodalbail 2306e91bba0SGirish Moodalbail { "smallest_anon_port", MOD_PROTO_SCTP, 2316e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2326e91bba0SGirish Moodalbail {1024, ULP_MAX_PORT, 32*1024}, {32*1024} }, 2336e91bba0SGirish Moodalbail 2346e91bba0SGirish Moodalbail { "largest_anon_port", MOD_PROTO_SCTP, 2356e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2366e91bba0SGirish Moodalbail {1024, ULP_MAX_PORT, ULP_MAX_PORT}, {ULP_MAX_PORT} }, 2376e91bba0SGirish Moodalbail 2386e91bba0SGirish Moodalbail { "send_maxbuf", MOD_PROTO_SCTP, 2396e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2406e91bba0SGirish Moodalbail {SCTP_XMIT_LOWATER, (1<<30), SCTP_XMIT_HIWATER}, 2416e91bba0SGirish Moodalbail {SCTP_XMIT_HIWATER} }, 2426e91bba0SGirish Moodalbail 243*8887b57dSGirish Moodalbail { "_xmit_lowat", MOD_PROTO_SCTP, 2446e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2456e91bba0SGirish Moodalbail {SCTP_XMIT_LOWATER, (1<<30), SCTP_XMIT_LOWATER}, 2466e91bba0SGirish Moodalbail {SCTP_XMIT_LOWATER} }, 2476e91bba0SGirish Moodalbail 2486e91bba0SGirish Moodalbail { "recv_maxbuf", MOD_PROTO_SCTP, 2496e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2506e91bba0SGirish Moodalbail {SCTP_RECV_LOWATER, (1<<30), SCTP_RECV_HIWATER}, 2516e91bba0SGirish Moodalbail {SCTP_RECV_HIWATER} }, 2526e91bba0SGirish Moodalbail 253*8887b57dSGirish Moodalbail { "_max_buf", MOD_PROTO_SCTP, 2546e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2556e91bba0SGirish Moodalbail {8192, (1<<30), 1024*1024}, {1024*1024} }, 2566e91bba0SGirish Moodalbail 2576e91bba0SGirish Moodalbail /* tunable - 20 */ 258*8887b57dSGirish Moodalbail { "_rtt_updates", MOD_PROTO_SCTP, 2596e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2606e91bba0SGirish Moodalbail {0, 65536, 20}, {20} }, 2616e91bba0SGirish Moodalbail 262*8887b57dSGirish Moodalbail { "_ipv6_hoplimit", MOD_PROTO_SCTP, 2636e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2646e91bba0SGirish Moodalbail {0, IPV6_MAX_HOPS, IPV6_DEFAULT_HOPS}, {IPV6_DEFAULT_HOPS} }, 2656e91bba0SGirish Moodalbail 266*8887b57dSGirish Moodalbail { "_rto_min", MOD_PROTO_SCTP, 2676e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2686e91bba0SGirish Moodalbail {500*MS, 60*SECONDS, 1*SECONDS}, {1*SECONDS} }, 2696e91bba0SGirish Moodalbail 270*8887b57dSGirish Moodalbail { "_rto_max", MOD_PROTO_SCTP, 2716e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2726e91bba0SGirish Moodalbail {1*SECONDS, 60000*SECONDS, 60*SECONDS}, {60*SECONDS} }, 2736e91bba0SGirish Moodalbail 274*8887b57dSGirish Moodalbail { "_rto_initial", MOD_PROTO_SCTP, 2756e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2766e91bba0SGirish Moodalbail {1*SECONDS, 60000*SECONDS, 3*SECONDS}, {3*SECONDS} }, 2776e91bba0SGirish Moodalbail 278*8887b57dSGirish Moodalbail { "_cookie_life", MOD_PROTO_SCTP, 2796e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2806e91bba0SGirish Moodalbail {10*MS, 60000*SECONDS, 60*SECONDS}, {60*SECONDS} }, 2816e91bba0SGirish Moodalbail 282*8887b57dSGirish Moodalbail { "_max_in_streams", MOD_PROTO_SCTP, 2836e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2846e91bba0SGirish Moodalbail {1, UINT16_MAX, 32}, {32} }, 2856e91bba0SGirish Moodalbail 286*8887b57dSGirish Moodalbail { "_initial_out_streams", MOD_PROTO_SCTP, 2876e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2886e91bba0SGirish Moodalbail {1, UINT16_MAX, 32}, {32} }, 2896e91bba0SGirish Moodalbail 290*8887b57dSGirish Moodalbail { "_shutack_wait_bound", MOD_PROTO_SCTP, 2916e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2926e91bba0SGirish Moodalbail {0, 300*SECONDS, 60*SECONDS}, {60*SECONDS} }, 2936e91bba0SGirish Moodalbail 294*8887b57dSGirish Moodalbail { "_maxburst", MOD_PROTO_SCTP, 2956e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 2966e91bba0SGirish Moodalbail {2, 8, 4}, {4} }, 2976e91bba0SGirish Moodalbail 2986e91bba0SGirish Moodalbail /* tunable - 30 */ 299*8887b57dSGirish Moodalbail { "_addip_enabled", MOD_PROTO_SCTP, 3006e91bba0SGirish Moodalbail mod_set_boolean, mod_get_boolean, 3016e91bba0SGirish Moodalbail {B_FALSE}, {B_FALSE} }, 3026e91bba0SGirish Moodalbail 303*8887b57dSGirish Moodalbail { "_recv_hiwat_minmss", MOD_PROTO_SCTP, 3046e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 3056e91bba0SGirish Moodalbail {1, 65536, 4}, {4} }, 3066e91bba0SGirish Moodalbail 307*8887b57dSGirish Moodalbail { "_slow_start_initial", MOD_PROTO_SCTP, 3086e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 3096e91bba0SGirish Moodalbail {1, 16, 4}, {4} }, 3106e91bba0SGirish Moodalbail 311*8887b57dSGirish Moodalbail { "_slow_start_after_idle", MOD_PROTO_SCTP, 3126e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 3136e91bba0SGirish Moodalbail {1, 16384, 4}, {4} }, 3146e91bba0SGirish Moodalbail 315*8887b57dSGirish Moodalbail { "_prsctp_enabled", MOD_PROTO_SCTP, 3166e91bba0SGirish Moodalbail mod_set_boolean, mod_get_boolean, 3176e91bba0SGirish Moodalbail {B_TRUE}, {B_TRUE} }, 3186e91bba0SGirish Moodalbail 319*8887b57dSGirish Moodalbail { "_fast_rxt_thresh", MOD_PROTO_SCTP, 3206e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 3216e91bba0SGirish Moodalbail {1, 10000, 3}, {3} }, 3226e91bba0SGirish Moodalbail 323*8887b57dSGirish Moodalbail { "_deferred_acks_max", MOD_PROTO_SCTP, 3246e91bba0SGirish Moodalbail mod_set_uint32, mod_get_uint32, 3256e91bba0SGirish Moodalbail { 1, 16, 2}, {2} }, 3266e91bba0SGirish Moodalbail 3276e91bba0SGirish Moodalbail /* 3286e91bba0SGirish Moodalbail * sctp_wroff_xtra is the extra space in front of SCTP/IP header 3296e91bba0SGirish Moodalbail * for link layer header. It has to be a multiple of 8. 3306e91bba0SGirish Moodalbail */ 331*8887b57dSGirish Moodalbail { "_wroff_xtra", MOD_PROTO_SCTP, 3326e91bba0SGirish Moodalbail mod_set_aligned, mod_get_uint32, 3336e91bba0SGirish Moodalbail {0, 256, 32}, {32} }, 3346e91bba0SGirish Moodalbail 3356e91bba0SGirish Moodalbail { "extra_priv_ports", MOD_PROTO_SCTP, 3366e91bba0SGirish Moodalbail mod_set_extra_privports, mod_get_extra_privports, 3376e91bba0SGirish Moodalbail {1, ULP_MAX_PORT, 0}, {0} }, 3386e91bba0SGirish Moodalbail 339*8887b57dSGirish Moodalbail { "_listener_limit_conf", MOD_PROTO_SCTP, 3405dd46ab5SKacheong Poon NULL, sctp_listener_conf_get, {0}, {0} }, 3415dd46ab5SKacheong Poon 342*8887b57dSGirish Moodalbail { "_listener_limit_conf_add", MOD_PROTO_SCTP, 3435dd46ab5SKacheong Poon sctp_listener_conf_add, NULL, {0}, {0} }, 3445dd46ab5SKacheong Poon 345*8887b57dSGirish Moodalbail { "_listener_limit_conf_del", MOD_PROTO_SCTP, 3465dd46ab5SKacheong Poon sctp_listener_conf_del, NULL, {0}, {0} }, 3475dd46ab5SKacheong Poon 3486e91bba0SGirish Moodalbail { "?", MOD_PROTO_SCTP, NULL, mod_get_allprop, {0}, {0} }, 3496e91bba0SGirish Moodalbail 3506e91bba0SGirish Moodalbail { NULL, 0, NULL, NULL, {0}, {0} } 3516e91bba0SGirish Moodalbail }; 3526e91bba0SGirish Moodalbail 3536e91bba0SGirish Moodalbail int sctp_propinfo_count = A_CNT(sctp_propinfo_tbl); 354