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);
 }