summaryrefslogtreecommitdiff
path: root/usr/src/lib/libipadm
diff options
context:
space:
mode:
authorSebastien Roy <seb@delphix.com>2013-08-01 17:47:00 -0800
committerChristopher Siden <chris.siden@delphix.com>2013-08-01 18:47:01 -0700
commit299625c6492013aa7bd163862f0d181854f69b3c (patch)
treed84f72b9de7c9f9cee6a7bdd01809e048a2e607f /usr/src/lib/libipadm
parenta29160b0f5f650ae34e2273cacdd3eff15c62fba (diff)
downloadillumos-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.c21
-rw-r--r--usr/src/lib/libipadm/common/ipadm_prop.c111
-rw-r--r--usr/src/lib/libipadm/common/libipadm_impl.h4
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 */