diff options
Diffstat (limited to 'usr/src/lib/libipadm/common/ipadm_if.c')
-rw-r--r-- | usr/src/lib/libipadm/common/ipadm_if.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/usr/src/lib/libipadm/common/ipadm_if.c b/usr/src/lib/libipadm/common/ipadm_if.c index 4591d42e9c..6d1e27dcbf 100644 --- a/usr/src/lib/libipadm/common/ipadm_if.c +++ b/usr/src/lib/libipadm/common/ipadm_if.c @@ -169,6 +169,8 @@ i_ipadm_active_if_info(ipadm_handle_t iph, const char *ifname, ifp->ifi_cflags |= IFIF_IPV4; if (lifrl.lifr_flags & IFF_IPV6) ifp->ifi_cflags |= IFIF_IPV6; + if (lifrl.lifr_flags & IFF_L3PROTECT) + ifp->ifi_cflags |= IFIF_L3PROTECT; } free(buf); return (IPADM_SUCCESS); @@ -376,6 +378,15 @@ i_ipadm_if_pexists(ipadm_handle_t iph, const char *ifname, sa_family_t af, ipadm_if_info_t *ifinfo; ipadm_status_t status; + /* + * if IPH_IPMGMTD is set, we know that the caller (ipmgmtd) already + * knows about persistent configuration in the first place, so we + * just return success. + */ + if (iph->iph_flags & IPH_IPMGMTD) { + *exists = B_FALSE; + return (IPADM_SUCCESS); + } status = i_ipadm_persist_if_info(iph, ifname, &ifinfo); if (status == IPADM_SUCCESS) { *exists = ((af == AF_INET && @@ -688,7 +699,7 @@ i_ipadm_plumb_if(ipadm_handle_t iph, char *ifname, sa_family_t af, * that the non-global zones don't need this check, because zoneadm * has taken care of this when the zones boot. */ - if (getzoneid() == GLOBAL_ZONEID && dlstatus == DLADM_STATUS_OK) { + if (iph->iph_zoneid == GLOBAL_ZONEID && dlstatus == DLADM_STATUS_OK) { zoneid = ALL_ZONES; if (zone_check_datalink(&zoneid, linkid) == 0) { /* interface is in use by a non-global zone. */ |