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 ----