--- old/usr/src/lib/libdladm/common/linkprop.c	Wed Oct  5 00:33:25 2016
+++ new/usr/src/lib/libdladm/common/linkprop.c	Wed Oct  5 00:33:25 2016
@@ -154,13 +154,11 @@
 			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,
@@ -384,8 +382,6 @@
 
 	{ 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"},
 
@@ -443,11 +439,6 @@
 	{ "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	}
@@ -764,12 +755,6 @@
 	    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,
@@ -1511,12 +1496,17 @@
 }
 
 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;
@@ -1528,11 +1518,28 @@
 		(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);
 }
@@ -1601,9 +1608,6 @@
 	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);
@@ -4844,51 +4848,4 @@
 
 	*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);
 }
