Print this page
@@ -152,17 +152,15 @@
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;
+ 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,
- set_promisc_filtered;
+ 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,12 +380,10 @@
{ 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"}
};
@@ -441,15 +437,10 @@
{ "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 }
};
@@ -762,16 +753,10 @@
{ "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 },
@@ -1509,16 +1494,21 @@
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,15 +1516,32 @@
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, "/dev");
+ (void) snprintf(dev, devlen, "%s%s", root, native_dev_path);
(void) dlclose(dlhandle);
return (ret);
}
static dladm_status_t
@@ -1599,13 +1606,10 @@
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);
/*
@@ -4842,53 +4846,6 @@
}
(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);
}