diff options
author | Sebastien Roy <seb@delphix.com> | 2013-08-01 17:47:00 -0800 |
---|---|---|
committer | Christopher Siden <chris.siden@delphix.com> | 2013-08-01 18:47:01 -0700 |
commit | 299625c6492013aa7bd163862f0d181854f69b3c (patch) | |
tree | d84f72b9de7c9f9cee6a7bdd01809e048a2e607f /usr/src/lib/libipadm | |
parent | a29160b0f5f650ae34e2273cacdd3eff15c62fba (diff) | |
download | illumos-joyent-299625c6492013aa7bd163862f0d181854f69b3c.tar.gz |
3942 inject sanity into ipadm tcp buffer size properties
3943 _snd_lowat_fraction tcp tunable has no effect
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Peng Dai <peng.dai@delphix.com>
Reviewed by: Dan McDonald <danmcd@nexenta.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Approved by: Dan McDonald <danmcd@nexenta.com>
Diffstat (limited to 'usr/src/lib/libipadm')
-rw-r--r-- | usr/src/lib/libipadm/common/ipadm_addr.c | 21 | ||||
-rw-r--r-- | usr/src/lib/libipadm/common/ipadm_prop.c | 111 | ||||
-rw-r--r-- | usr/src/lib/libipadm/common/libipadm_impl.h | 4 |
3 files changed, 79 insertions, 57 deletions
diff --git a/usr/src/lib/libipadm/common/ipadm_addr.c b/usr/src/lib/libipadm/common/ipadm_addr.c index 8a30694e8e..0668c1de5b 100644 --- a/usr/src/lib/libipadm/common/ipadm_addr.c +++ b/usr/src/lib/libipadm/common/ipadm_addr.c @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. */ /* @@ -96,30 +97,30 @@ static ipadm_pd_setf_t i_ipadm_set_prefixlen, i_ipadm_set_addr_flag, /* address properties description table */ ipadm_prop_desc_t ipadm_addrprop_table[] = { - { "broadcast", IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, + { "broadcast", NULL, IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, NULL, NULL, i_ipadm_get_broadcast }, - { "deprecated", IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, + { "deprecated", NULL, IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, i_ipadm_set_addr_flag, i_ipadm_get_onoff, i_ipadm_get_addr_flag }, - { "prefixlen", IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, + { "prefixlen", NULL, IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, i_ipadm_set_prefixlen, i_ipadm_get_prefixlen, i_ipadm_get_prefixlen }, - { "private", IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, + { "private", NULL, IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, i_ipadm_set_addr_flag, i_ipadm_get_onoff, i_ipadm_get_addr_flag }, - { "transmit", IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, + { "transmit", NULL, IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, i_ipadm_set_addr_flag, i_ipadm_get_onoff, i_ipadm_get_addr_flag }, - { "zone", IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, + { "zone", NULL, IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, i_ipadm_set_zone, NULL, i_ipadm_get_zone }, - { NULL, 0, 0, 0, NULL, NULL, NULL } + { NULL, NULL, 0, 0, 0, NULL, NULL, NULL } }; -static ipadm_prop_desc_t up_addrprop = { "up", IPADMPROP_CLASS_ADDR, +static ipadm_prop_desc_t up_addrprop = { "up", NULL, IPADMPROP_CLASS_ADDR, MOD_PROTO_NONE, 0, NULL, NULL, NULL }; /* @@ -1376,7 +1377,9 @@ i_ipadm_get_addrprop_desc(const char *pname) int i; for (i = 0; ipadm_addrprop_table[i].ipd_name != NULL; i++) { - if (strcmp(pname, ipadm_addrprop_table[i].ipd_name) == 0) + if (strcmp(pname, ipadm_addrprop_table[i].ipd_name) == 0 || + (ipadm_addrprop_table[i].ipd_old_name != NULL && + strcmp(pname, ipadm_addrprop_table[i].ipd_old_name) == 0)) return (&ipadm_addrprop_table[i]); } return (NULL); diff --git a/usr/src/lib/libipadm/common/ipadm_prop.c b/usr/src/lib/libipadm/common/ipadm_prop.c index cf31804661..0c3a25382f 100644 --- a/usr/src/lib/libipadm/common/ipadm_prop.c +++ b/usr/src/lib/libipadm/common/ipadm_prop.c @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. */ /* @@ -88,63 +89,63 @@ static int protocols[] = { MOD_PROTO_IP, MOD_PROTO_RAWIP, * Supported IP protocol properties. */ static ipadm_prop_desc_t ipadm_ip_prop_table[] = { - { "arp", IPADMPROP_CLASS_IF, MOD_PROTO_IPV4, 0, + { "arp", NULL, IPADMPROP_CLASS_IF, MOD_PROTO_IPV4, 0, i_ipadm_set_ifprop_flags, i_ipadm_get_onoff, i_ipadm_get_ifprop_flags }, - { "forwarding", IPADMPROP_CLASS_MODIF, MOD_PROTO_IPV4, 0, + { "forwarding", NULL, IPADMPROP_CLASS_MODIF, MOD_PROTO_IPV4, 0, i_ipadm_set_forwarding, i_ipadm_get_onoff, i_ipadm_get_forwarding }, - { "metric", IPADMPROP_CLASS_IF, MOD_PROTO_IPV4, 0, + { "metric", NULL, IPADMPROP_CLASS_IF, MOD_PROTO_IPV4, 0, i_ipadm_set_metric, NULL, i_ipadm_get_metric }, - { "mtu", IPADMPROP_CLASS_IF, MOD_PROTO_IPV4, 0, + { "mtu", NULL, IPADMPROP_CLASS_IF, MOD_PROTO_IPV4, 0, i_ipadm_set_mtu, i_ipadm_get_mtu, i_ipadm_get_mtu }, - { "exchange_routes", IPADMPROP_CLASS_IF, MOD_PROTO_IPV4, 0, + { "exchange_routes", NULL, IPADMPROP_CLASS_IF, MOD_PROTO_IPV4, 0, i_ipadm_set_ifprop_flags, i_ipadm_get_onoff, i_ipadm_get_ifprop_flags }, - { "usesrc", IPADMPROP_CLASS_IF, MOD_PROTO_IPV4, 0, + { "usesrc", NULL, IPADMPROP_CLASS_IF, MOD_PROTO_IPV4, 0, i_ipadm_set_usesrc, NULL, i_ipadm_get_usesrc }, - { "ttl", IPADMPROP_CLASS_MODULE, MOD_PROTO_IPV4, 0, + { "ttl", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_IPV4, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "forwarding", IPADMPROP_CLASS_MODIF, MOD_PROTO_IPV6, 0, + { "forwarding", NULL, IPADMPROP_CLASS_MODIF, MOD_PROTO_IPV6, 0, i_ipadm_set_forwarding, i_ipadm_get_onoff, i_ipadm_get_forwarding }, - { "hoplimit", IPADMPROP_CLASS_MODULE, MOD_PROTO_IPV6, 0, + { "hoplimit", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_IPV6, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "metric", IPADMPROP_CLASS_IF, MOD_PROTO_IPV6, 0, + { "metric", NULL, IPADMPROP_CLASS_IF, MOD_PROTO_IPV6, 0, i_ipadm_set_metric, NULL, i_ipadm_get_metric }, - { "mtu", IPADMPROP_CLASS_IF, MOD_PROTO_IPV6, 0, + { "mtu", NULL, IPADMPROP_CLASS_IF, MOD_PROTO_IPV6, 0, i_ipadm_set_mtu, i_ipadm_get_mtu, i_ipadm_get_mtu }, - { "nud", IPADMPROP_CLASS_IF, MOD_PROTO_IPV6, 0, + { "nud", NULL, IPADMPROP_CLASS_IF, MOD_PROTO_IPV6, 0, i_ipadm_set_ifprop_flags, i_ipadm_get_onoff, i_ipadm_get_ifprop_flags }, - { "exchange_routes", IPADMPROP_CLASS_IF, MOD_PROTO_IPV6, 0, + { "exchange_routes", NULL, IPADMPROP_CLASS_IF, MOD_PROTO_IPV6, 0, i_ipadm_set_ifprop_flags, i_ipadm_get_onoff, i_ipadm_get_ifprop_flags }, - { "usesrc", IPADMPROP_CLASS_IF, MOD_PROTO_IPV6, 0, + { "usesrc", NULL, IPADMPROP_CLASS_IF, MOD_PROTO_IPV6, 0, i_ipadm_set_usesrc, NULL, i_ipadm_get_usesrc }, - { "hostmodel", IPADMPROP_CLASS_MODULE, MOD_PROTO_IPV6, 0, + { "hostmodel", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_IPV6, 0, i_ipadm_set_hostmodel, i_ipadm_get_hostmodel, i_ipadm_get_hostmodel }, - { "hostmodel", IPADMPROP_CLASS_MODULE, MOD_PROTO_IPV4, 0, + { "hostmodel", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_IPV4, 0, i_ipadm_set_hostmodel, i_ipadm_get_hostmodel, i_ipadm_get_hostmodel }, - { NULL, 0, 0, 0, NULL, NULL, NULL } + { NULL, NULL, 0, 0, 0, NULL, NULL, NULL } }; /* possible values for TCP properties `ecn' and `sack' */ @@ -152,99 +153,111 @@ static const char *ecn_sack_vals[] = {"never", "passive", "active", NULL}; /* Supported TCP protocol properties */ static ipadm_prop_desc_t ipadm_tcp_prop_table[] = { - { "ecn", IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, + { "ecn", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, i_ipadm_set_ecnsack, i_ipadm_get_ecnsack, i_ipadm_get_ecnsack }, - { "extra_priv_ports", IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, + { "extra_priv_ports", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, IPADMPROP_MULVAL, i_ipadm_set_eprivport, i_ipadm_get_prop, i_ipadm_get_prop }, - { "largest_anon_port", IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, + { "largest_anon_port", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "recv_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, + { "max_buf", "_max_buf", IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "sack", IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, + { "recv_buf", "recv_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, + i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, + + { "sack", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, i_ipadm_set_ecnsack, i_ipadm_get_ecnsack, i_ipadm_get_ecnsack }, - { "send_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, + { "send_buf", "send_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "smallest_anon_port", IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, + { "smallest_anon_port", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "smallest_nonpriv_port", IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, 0, - i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, + { "smallest_nonpriv_port", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_TCP, + 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { NULL, 0, 0, 0, NULL, NULL, NULL } + { NULL, NULL, 0, 0, 0, NULL, NULL, NULL } }; /* Supported UDP protocol properties */ static ipadm_prop_desc_t ipadm_udp_prop_table[] = { - { "extra_priv_ports", IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, + { "extra_priv_ports", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, IPADMPROP_MULVAL, i_ipadm_set_eprivport, i_ipadm_get_prop, i_ipadm_get_prop }, - { "largest_anon_port", IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, 0, + { "largest_anon_port", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "recv_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, 0, + { "max_buf", "_max_buf", IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "send_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, 0, + { "recv_buf", "recv_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "smallest_anon_port", IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, 0, + { "send_buf", "send_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "smallest_nonpriv_port", IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, 0, + { "smallest_anon_port", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { NULL, 0, 0, 0, NULL, NULL, NULL } + { "smallest_nonpriv_port", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_UDP, + 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, + + { NULL, NULL, 0, 0, 0, NULL, NULL, NULL } }; /* Supported SCTP protocol properties */ static ipadm_prop_desc_t ipadm_sctp_prop_table[] = { - { "extra_priv_ports", IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, + { "extra_priv_ports", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, IPADMPROP_MULVAL, i_ipadm_set_eprivport, i_ipadm_get_prop, i_ipadm_get_prop }, - { "largest_anon_port", IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, 0, + { "largest_anon_port", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "recv_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, 0, + { "max_buf", "_max_buf", IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "send_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, 0, + { "recv_buf", "recv_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "smallest_anon_port", IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, 0, + { "send_buf", "send_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "smallest_nonpriv_port", IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, 0, + { "smallest_anon_port", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { NULL, 0, 0, 0, NULL, NULL, NULL } + { "smallest_nonpriv_port", NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_SCTP, + 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, + + { NULL, NULL, 0, 0, 0, NULL, NULL, NULL } }; /* Supported ICMP protocol properties */ static ipadm_prop_desc_t ipadm_icmp_prop_table[] = { - { "recv_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_RAWIP, 0, + { "max_buf", "_max_buf", IPADMPROP_CLASS_MODULE, MOD_PROTO_RAWIP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { "send_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_RAWIP, 0, + { "recv_buf", "recv_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_RAWIP, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, - { NULL, 0, 0, 0, NULL, NULL, NULL } + { "send_buf", "send_maxbuf", IPADMPROP_CLASS_MODULE, MOD_PROTO_RAWIP, 0, + i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }, + + { NULL, NULL, 0, 0, 0, NULL, NULL, NULL } }; /* * A dummy private property structure, used while handling private * protocol properties (properties not yet supported by libipadm). */ -static ipadm_prop_desc_t ipadm_privprop =\ - { NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_NONE, 0, +static ipadm_prop_desc_t ipadm_privprop = + { NULL, NULL, IPADMPROP_CLASS_MODULE, MOD_PROTO_NONE, 0, i_ipadm_set_prop, i_ipadm_get_prop, i_ipadm_get_prop }; /* @@ -282,13 +295,17 @@ i_ipadm_get_prop_desc(const char *pname, uint_t proto, int *errp) err = EINVAL; goto ret; } + for (ipdp = ipdtbl; ipdp->ipd_name != NULL; ipdp++) { - if (strcmp(pname, ipdp->ipd_name) == 0) { + if (strcmp(pname, ipdp->ipd_name) == 0 || + (ipdp->ipd_old_name != NULL && + strcmp(pname, ipdp->ipd_old_name) == 0)) { matched_name = B_TRUE; if (ipdp->ipd_proto == proto) break; } } + if (ipdp->ipd_name == NULL) { err = ENOENT; /* if we matched name, but failed protocol check */ diff --git a/usr/src/lib/libipadm/common/libipadm_impl.h b/usr/src/lib/libipadm/common/libipadm_impl.h index eadfbe69bc..93230d8380 100644 --- a/usr/src/lib/libipadm/common/libipadm_impl.h +++ b/usr/src/lib/libipadm/common/libipadm_impl.h @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. */ #ifndef _LIBIPADM_IMPL_H @@ -118,7 +119,8 @@ typedef ipadm_status_t ipadm_pd_getf_t(ipadm_handle_t, const void *, struct ipadm_prop_desc { char *ipd_name; /* property name */ - uint_t ipd_class; /* prop. class - global/perif/both */ + char *ipd_old_name; /* for backward compatibility */ + uint_t ipd_class; /* prop. class - global/perif/both */ uint_t ipd_proto; /* protocol to which property belongs */ uint_t ipd_flags; /* see below */ ipadm_pd_setf_t *ipd_set; /* set callback function */ |