summaryrefslogtreecommitdiff
path: root/usr/src/cmd/cmd-inet/usr.sbin
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/cmd-inet/usr.sbin')
-rw-r--r--usr/src/cmd/cmd-inet/usr.sbin/ifconfig/ifconfig.c3
-rw-r--r--usr/src/cmd/cmd-inet/usr.sbin/ipadm/ipadm.c46
-rw-r--r--usr/src/cmd/cmd-inet/usr.sbin/route.c6
3 files changed, 49 insertions, 6 deletions
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/ifconfig/ifconfig.c b/usr/src/cmd/cmd-inet/usr.sbin/ifconfig/ifconfig.c
index b1409d8420..a2b477c06b 100644
--- a/usr/src/cmd/cmd-inet/usr.sbin/ifconfig/ifconfig.c
+++ b/usr/src/cmd/cmd-inet/usr.sbin/ifconfig/ifconfig.c
@@ -73,7 +73,8 @@ static if_flags_t if_flags_tbl[] = {
{ IFF_DUPLICATE, "DUPLICATE" },
{ IFF_IPMP, "IPMP"},
{ IFF_VRRP, "VRRP"},
- { IFF_NOACCEPT, "NOACCEPT"}
+ { IFF_NOACCEPT, "NOACCEPT"},
+ { IFF_L3PROTECT, "L3PROTECT"}
};
typedef struct {
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/ipadm/ipadm.c b/usr/src/cmd/cmd-inet/usr.sbin/ipadm/ipadm.c
index bae4b9915e..a3b2fcd19e 100644
--- a/usr/src/cmd/cmd-inet/usr.sbin/ipadm/ipadm.c
+++ b/usr/src/cmd/cmd-inet/usr.sbin/ipadm/ipadm.c
@@ -308,7 +308,7 @@ static ofmt_field_t show_if_fields[] = {
/* name, field width, id, callback */
{ "IFNAME", 11, SI_IFNAME, print_si_cb},
{ "STATE", 9, SI_STATE, print_si_cb},
-{ "CURRENT", 12, SI_CURRENT, print_si_cb},
+{ "CURRENT", 13, SI_CURRENT, print_si_cb},
{ "PERSISTENT", 11, SI_PERSISTENT, print_si_cb},
{ NULL, 0, 0, NULL}
};
@@ -1604,6 +1604,43 @@ flags2str(uint64_t flags, fmask_t *tbl, boolean_t is_bits,
}
}
+/*
+ * return true if the address for lifname comes to us from the global zone
+ * with 'allowed-ips' constraints.
+ */
+static boolean_t
+is_from_gz(const char *lifname)
+{
+ ipadm_if_info_t *if_info;
+ char phyname[LIFNAMSIZ], *cp;
+ boolean_t ret = _B_FALSE;
+ ipadm_status_t status;
+ zoneid_t zoneid;
+ ushort_t zflags;
+
+ if ((zoneid = getzoneid()) == GLOBAL_ZONEID)
+ return (_B_FALSE); /* from-gz only makes sense in a NGZ */
+
+ if (zone_getattr(zoneid, ZONE_ATTR_FLAGS, &zflags, sizeof (zflags)) < 0)
+ return (_B_FALSE);
+
+ if (!(zflags & ZF_NET_EXCL))
+ return (_B_TRUE); /* everything is from the GZ for shared-ip */
+
+ (void) strncpy(phyname, lifname, sizeof (phyname));
+ if ((cp = strchr(phyname, ':')) != NULL)
+ *cp = '\0';
+ status = ipadm_if_info(iph, phyname, &if_info, 0, LIFC_DEFAULT);
+ if (status != IPADM_SUCCESS)
+ return (ret);
+
+ if (if_info->ifi_cflags & IFIF_L3PROTECT)
+ ret = _B_TRUE;
+ if (if_info)
+ ipadm_free_if_info(if_info);
+ return (ret);
+}
+
static boolean_t
print_sa_cb(ofmt_arg_t *ofarg, char *buf, uint_t bufsize)
{
@@ -1668,7 +1705,11 @@ print_sa_cb(ofmt_arg_t *ofarg, char *buf, uint_t bufsize)
buf, bufsize);
break;
case SA_TYPE:
- flags2str(ainfo->ia_atype, type, _B_FALSE, buf, bufsize);
+ if (is_from_gz(ifa->ifa_name))
+ (void) snprintf(buf, bufsize, "from-gz");
+ else
+ flags2str(ainfo->ia_atype, type, _B_FALSE, buf,
+ bufsize);
break;
case SA_CURRENT:
flags2str(ainfo->ia_cflags, cflags_mask, _B_TRUE, buf, bufsize);
@@ -1877,6 +1918,7 @@ print_si_cb(ofmt_arg_t *ofarg, char *buf, uint_t bufsize)
{ "i", IFIF_INACTIVE, IFIF_INACTIVE },
{ "V", IFIF_VRRP, IFIF_VRRP },
{ "a", IFIF_NOACCEPT, IFIF_NOACCEPT },
+ { "Z", IFIF_L3PROTECT, IFIF_L3PROTECT },
{ "4", IFIF_IPV4, IFIF_IPV4 },
{ "6", IFIF_IPV6, IFIF_IPV6 },
{ NULL, 0, 0 }
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/route.c b/usr/src/cmd/cmd-inet/usr.sbin/route.c
index e078d9df38..a2fd0d2d17 100644
--- a/usr/src/cmd/cmd-inet/usr.sbin/route.c
+++ b/usr/src/cmd/cmd-inet/usr.sbin/route.c
@@ -1,6 +1,5 @@
/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
@@ -2567,7 +2566,8 @@ static char metricnames[] =
static char routeflags[] =
"\1UP\2GATEWAY\3HOST\4REJECT\5DYNAMIC\6MODIFIED\7DONE\010MASK_PRESENT"
"\011CLONING\012XRESOLVE\013LLINFO\014STATIC\015BLACKHOLE"
- "\016PRIVATE\017PROTO2\020PROTO1\021MULTIRT\022SETSRC\023INDIRECT";
+ "\016PRIVATE\017PROTO2\020PROTO1\021MULTIRT\022SETSRC\023INDIRECT"
+ "\024KERNEL\025ZONE";
static char ifnetflags[] =
"\1UP\2BROADCAST\3DEBUG\4LOOPBACK\5PTP\6NOTRAILERS\7RUNNING\010NOARP"
"\011PPROMISC\012ALLMULTI\013INTELLIGENT\014MULTICAST"