Print this page
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>

*** 19,28 **** --- 19,29 ---- * CDDL HEADER END */ /* * Copyright (c) 1991, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1990 Mentat Inc. + * Copyright (c) 2013 by Delphix. All rights reserved. */ /* * This file contains the interface control functions for IP. */
*** 8852,8867 **** struct iocblk *iocp = (struct iocblk *)mp->b_rptr; mblk_t *mp1 = mp->b_cont; mod_ioc_prop_t *pioc; mod_prop_info_t *ptbl = NULL, *pinfo = NULL; ip_stack_t *ipst; - icmp_stack_t *is; - tcp_stack_t *tcps; - sctp_stack_t *sctps; - udp_stack_t *us; netstack_t *stack; - void *cbarg; cred_t *cr; boolean_t set; int err; ASSERT(q->q_next == NULL); --- 8853,8863 ----
*** 8878,8934 **** switch (pioc->mpr_proto) { case MOD_PROTO_IP: case MOD_PROTO_IPV4: case MOD_PROTO_IPV6: ptbl = ipst->ips_propinfo_tbl; - cbarg = ipst; break; case MOD_PROTO_RAWIP: ! is = stack->netstack_icmp; ! ptbl = is->is_propinfo_tbl; ! cbarg = is; break; case MOD_PROTO_TCP: ! tcps = stack->netstack_tcp; ! ptbl = tcps->tcps_propinfo_tbl; ! cbarg = tcps; break; case MOD_PROTO_UDP: ! us = stack->netstack_udp; ! ptbl = us->us_propinfo_tbl; ! cbarg = us; break; case MOD_PROTO_SCTP: ! sctps = stack->netstack_sctp; ! ptbl = sctps->sctps_propinfo_tbl; ! cbarg = sctps; break; default: miocnak(q, mp, 0, EINVAL); return; } ! /* search for given property in respective protocol propinfo table */ ! for (pinfo = ptbl; pinfo->mpi_name != NULL; pinfo++) { ! if (strcmp(pinfo->mpi_name, pioc->mpr_name) == 0 && ! pinfo->mpi_proto == pioc->mpr_proto) ! break; ! } ! if (pinfo->mpi_name == NULL) { miocnak(q, mp, 0, ENOENT); return; } set = (iocp->ioc_cmd == SIOCSETPROP) ? B_TRUE : B_FALSE; if (set && pinfo->mpi_setf != NULL) { cr = msg_getcred(mp, NULL); if (cr == NULL) cr = iocp->ioc_cr; ! err = pinfo->mpi_setf(cbarg, cr, pinfo, pioc->mpr_ifname, pioc->mpr_val, pioc->mpr_flags); } else if (!set && pinfo->mpi_getf != NULL) { ! err = pinfo->mpi_getf(cbarg, pinfo, pioc->mpr_ifname, pioc->mpr_val, pioc->mpr_valsize, pioc->mpr_flags); } else { err = EPERM; } --- 8874,8916 ---- switch (pioc->mpr_proto) { case MOD_PROTO_IP: case MOD_PROTO_IPV4: case MOD_PROTO_IPV6: ptbl = ipst->ips_propinfo_tbl; break; case MOD_PROTO_RAWIP: ! ptbl = stack->netstack_icmp->is_propinfo_tbl; break; case MOD_PROTO_TCP: ! ptbl = stack->netstack_tcp->tcps_propinfo_tbl; break; case MOD_PROTO_UDP: ! ptbl = stack->netstack_udp->us_propinfo_tbl; break; case MOD_PROTO_SCTP: ! ptbl = stack->netstack_sctp->sctps_propinfo_tbl; break; default: miocnak(q, mp, 0, EINVAL); return; } ! pinfo = mod_prop_lookup(ptbl, pioc->mpr_name, pioc->mpr_proto); ! if (pinfo == NULL) { miocnak(q, mp, 0, ENOENT); return; } set = (iocp->ioc_cmd == SIOCSETPROP) ? B_TRUE : B_FALSE; if (set && pinfo->mpi_setf != NULL) { cr = msg_getcred(mp, NULL); if (cr == NULL) cr = iocp->ioc_cr; ! err = pinfo->mpi_setf(stack, cr, pinfo, pioc->mpr_ifname, pioc->mpr_val, pioc->mpr_flags); } else if (!set && pinfo->mpi_getf != NULL) { ! err = pinfo->mpi_getf(stack, pinfo, pioc->mpr_ifname, pioc->mpr_val, pioc->mpr_valsize, pioc->mpr_flags); } else { err = EPERM; }
*** 8953,8963 **** { struct iocblk *iocp = (struct iocblk *)mp->b_rptr; mblk_t *mp1 = mp->b_cont; char *pname, *pval, *buf; uint_t bufsize, proto; ! mod_prop_info_t *ptbl = NULL, *pinfo = NULL; ip_stack_t *ipst; int err = 0; ASSERT(CONN_Q(q)); ipst = CONNQ_TO_IPST(q); --- 8935,8945 ---- { struct iocblk *iocp = (struct iocblk *)mp->b_rptr; mblk_t *mp1 = mp->b_cont; char *pname, *pval, *buf; uint_t bufsize, proto; ! mod_prop_info_t *pinfo = NULL; ip_stack_t *ipst; int err = 0; ASSERT(CONN_Q(q)); ipst = CONNQ_TO_IPST(q);
*** 8980,9002 **** } else { miocnak(q, mp, 0, EINVAL); return; } ! ptbl = ipst->ips_propinfo_tbl; ! for (pinfo = ptbl; pinfo->mpi_name != NULL; pinfo++) { ! if (strcmp(pinfo->mpi_name, pname) == 0 && ! pinfo->mpi_proto == proto) ! break; ! } - ASSERT(pinfo->mpi_name != NULL); - switch (iocp->ioc_cmd) { case ND_GET: ! if ((err = pinfo->mpi_getf(ipst, pinfo, NULL, buf, bufsize, ! 0)) == 0) { miocack(q, mp, iocp->ioc_count, 0); return; } break; case ND_SET: --- 8962,8977 ---- } else { miocnak(q, mp, 0, EINVAL); return; } ! pinfo = mod_prop_lookup(ipst->ips_propinfo_tbl, pname, proto); switch (iocp->ioc_cmd) { case ND_GET: ! if ((err = pinfo->mpi_getf(ipst->ips_netstack, pinfo, NULL, buf, ! bufsize, 0)) == 0) { miocack(q, mp, iocp->ioc_count, 0); return; } break; case ND_SET:
*** 9008,9019 **** while (*pval++) noop; if (!*pval || pval >= (char *)mp1->b_wptr) { err = EINVAL; ! } else if ((err = pinfo->mpi_setf(ipst, NULL, pinfo, NULL, ! pval, 0)) == 0) { miocack(q, mp, 0, 0); return; } break; default: --- 8983,8994 ---- while (*pval++) noop; if (!*pval || pval >= (char *)mp1->b_wptr) { err = EINVAL; ! } else if ((err = pinfo->mpi_setf(ipst->ips_netstack, NULL, ! pinfo, NULL, pval, 0)) == 0) { miocack(q, mp, 0, 0); return; } break; default: