Print this page

        

*** 152,168 **** get_flowctl, get_maxbw, get_cpus, get_priority, get_tagmode, get_range, get_stp, get_bridge_forward, get_bridge_pvid, get_protection, get_rxrings, get_txrings, get_cntavail, get_secondary_macs, get_allowedips, get_allowedcids, get_pool, ! get_rings_range, get_linkmode_prop, ! get_promisc_filtered; static pd_setf_t set_zone, set_rate, set_powermode, set_radio, set_public_prop, set_resource, set_stp_prop, ! set_bridge_forward, set_bridge_pvid, set_secondary_macs, ! set_promisc_filtered; static pd_checkf_t check_zone, check_autopush, check_rate, check_hoplimit, check_encaplim, check_uint32, check_maxbw, check_cpus, check_stp_prop, check_bridge_pvid, check_allowedips, check_allowedcids, check_secondary_macs, check_rings, --- 152,166 ---- get_flowctl, get_maxbw, get_cpus, get_priority, get_tagmode, get_range, get_stp, get_bridge_forward, get_bridge_pvid, get_protection, get_rxrings, get_txrings, get_cntavail, get_secondary_macs, get_allowedips, get_allowedcids, get_pool, ! get_rings_range, get_linkmode_prop; static pd_setf_t set_zone, set_rate, set_powermode, set_radio, set_public_prop, set_resource, set_stp_prop, ! set_bridge_forward, set_bridge_pvid, set_secondary_macs; static pd_checkf_t check_zone, check_autopush, check_rate, check_hoplimit, check_encaplim, check_uint32, check_maxbw, check_cpus, check_stp_prop, check_bridge_pvid, check_allowedips, check_allowedcids, check_secondary_macs, check_rings,
*** 382,393 **** { MAC_PROP_MAX_TXHWCLNT_AVAIL, sizeof (uint_t), "txhwclnt-available"}, { MAC_PROP_IB_LINKMODE, sizeof (uint32_t), "linkmode"}, - { MAC_PROP_VN_PROMISC_FILTERED, sizeof (boolean_t), "promisc-filtered"}, - { MAC_PROP_SECONDARY_ADDRS, sizeof (mac_secondary_addr_t), "secondary-macs"}, { MAC_PROP_PRIVATE, 0, "driver-private"} }; --- 380,389 ----
*** 441,455 **** { "restricted", MPT_RESTRICTED }, { "ip-nospoof", MPT_IPNOSPOOF }, { "dhcp-nospoof", MPT_DHCPNOSPOOF }, }; - static val_desc_t link_promisc_filtered_vals[] = { - { "off", B_FALSE }, - { "on", B_TRUE }, - }; - static val_desc_t dladm_wlan_radio_vals[] = { { "on", DLADM_WLAN_RADIO_ON }, { "off", DLADM_WLAN_RADIO_OFF } }; --- 437,446 ----
*** 762,777 **** { "protection", { "--", RESET_VAL }, link_protect_vals, VALCNT(link_protect_vals), set_resource, NULL, get_protection, check_prop, 0, DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE }, - { "promisc-filtered", { "on", 1 }, - link_promisc_filtered_vals, VALCNT(link_promisc_filtered_vals), - set_promisc_filtered, NULL, get_promisc_filtered, check_prop, 0, - DATALINK_CLASS_VNIC, DATALINK_ANY_MEDIATYPE }, - - { "allowed-ips", { "--", 0 }, NULL, 0, set_resource, NULL, get_allowedips, check_allowedips, PD_CHECK_ALLOC, DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE }, --- 753,762 ----
*** 1509,1524 **** --- 1494,1514 ---- return (DLADM_STATUS_OK); } typedef int (*zone_get_devroot_t)(char *, char *, size_t); + typedef int (*zone_get_brand_t)(char *, char *, size_t); static int i_dladm_get_zone_dev(char *zone_name, char *dev, size_t devlen) { char root[MAXPATHLEN]; + char brand[MAXPATHLEN]; /* Overkill, for sure. */ + static char *full_native_path = "/native/dev"; + char *native_dev_path = full_native_path; zone_get_devroot_t real_zone_get_devroot; + zone_get_brand_t real_zone_get_brand; void *dlhandle; void *sym; int ret; if ((dlhandle = dlopen("libzonecfg.so.1", RTLD_LAZY)) == NULL)
*** 1526,1540 **** if ((sym = dlsym(dlhandle, "zone_get_devroot")) == NULL) { (void) dlclose(dlhandle); return (-1); } - real_zone_get_devroot = (zone_get_devroot_t)sym; if ((ret = real_zone_get_devroot(zone_name, root, sizeof (root))) == 0) ! (void) snprintf(dev, devlen, "%s%s", root, "/dev"); (void) dlclose(dlhandle); return (ret); } static dladm_status_t --- 1516,1547 ---- if ((sym = dlsym(dlhandle, "zone_get_devroot")) == NULL) { (void) dlclose(dlhandle); return (-1); } real_zone_get_devroot = (zone_get_devroot_t)sym; + if ((sym = dlsym(dlhandle, "zone_get_brand")) == NULL) { + (void) dlclose(dlhandle); + return (-1); + } + real_zone_get_brand = (zone_get_devroot_t)sym; + + /* Have "/dev" be LX-agile for possibility of "/native/dev". */ + ret = real_zone_get_brand(zone_name, brand, sizeof (brand)); + if (ret != 0) { + (void) dlclose(dlhandle); + return (ret); + } + /* Can use strcmp with constant string... */ + if (strcmp(brand, "lx") != 0) { + /* Non-LX zone, don't use "/native/dev" */ + native_dev_path += 7; /* strlen("/native") */ + } + if ((ret = real_zone_get_devroot(zone_name, root, sizeof (root))) == 0) ! (void) snprintf(dev, devlen, "%s%s", root, native_dev_path); (void) dlclose(dlhandle); return (ret); } static dladm_status_t
*** 1599,1611 **** zid_new = dzp->diz_zid; if (zid_new == zid_old) return (DLADM_STATUS_OK); - if (flags & DLADM_OPT_TRANSIENT) - dzp->diz_transient = B_TRUE; - if ((status = set_public_prop(handle, pdp, linkid, vdp, val_cnt, flags, media)) != DLADM_STATUS_OK) return (status); /* --- 1606,1615 ----
*** 4842,4894 **** } (void) snprintf(prop_val[0], DLADM_STRSIZE, "%s", s); *val_cnt = 1; return (DLADM_STATUS_OK); - } - - /*ARGSUSED*/ - static dladm_status_t - get_promisc_filtered(dladm_handle_t handle, prop_desc_t *pdp, - datalink_id_t linkid, char **prop_val, uint_t *val_cnt, - datalink_media_t media, uint_t flags, uint_t *perm_flags) - { - char *s; - dladm_status_t status; - boolean_t filt; - - status = i_dladm_get_public_prop(handle, linkid, pdp->pd_name, flags, - perm_flags, &filt, sizeof (filt)); - if (status != DLADM_STATUS_OK) - return (status); - - if (filt != 0) - s = link_promisc_filtered_vals[1].vd_name; - else - s = link_promisc_filtered_vals[0].vd_name; - (void) snprintf(prop_val[0], DLADM_STRSIZE, "%s", s); - - *val_cnt = 1; - return (DLADM_STATUS_OK); - } - - /* ARGSUSED */ - static dladm_status_t - set_promisc_filtered(dladm_handle_t handle, prop_desc_t *pdp, - datalink_id_t linkid, val_desc_t *vdp, uint_t val_cnt, uint_t flags, - datalink_media_t media) - { - dld_ioc_macprop_t *dip; - dladm_status_t status = DLADM_STATUS_OK; - - dip = i_dladm_buf_alloc_by_name(0, linkid, pdp->pd_name, - 0, &status); - - if (dip == NULL) - return (status); - - (void) memcpy(dip->pr_val, &vdp->vd_val, dip->pr_valsize); - status = i_dladm_macprop(handle, dip, B_TRUE); - - free(dip); - return (status); } --- 4846,4851 ----