Print this page
OS-792 dladm show-linkprop -z zonename doesn't restrict output to that zone, unless you also specify the vnic name
OS-406
OS-249
*** 18,27 ****
--- 18,28 ----
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 Joyent, Inc. All rights reserved.
*/
#include <stdio.h>
#include <ctype.h>
#include <dlfcn.h>
*** 152,161 ****
--- 153,163 ----
pktsum_t vs_prevstats[MAXVNIC];
boolean_t vs_etherstub;
dladm_status_t vs_status;
uint32_t vs_flags;
ofmt_handle_t vs_ofmt;
+ char *vs_zonename;
} show_vnic_state_t;
typedef struct show_part_state {
datalink_id_t ps_over_id;
char ps_part[MAXLINKNAMELEN];
*** 263,273 ****
const char *c_usage;
} cmd_t;
static cmd_t cmds[] = {
{ "rename-link", do_rename_link,
! " rename-link <oldlink> <newlink>" },
{ "show-link", do_show_link,
" show-link [-pP] [-o <field>,..] [-s [-i <interval>]] "
"[<link>]\n" },
{ "create-aggr", do_create_aggr,
" create-aggr [-t] [-P <policy>] [-L <mode>] [-T <time>] "
--- 265,275 ----
const char *c_usage;
} cmd_t;
static cmd_t cmds[] = {
{ "rename-link", do_rename_link,
! " rename-link [-z zonename] <oldlink> <newlink>" },
{ "show-link", do_show_link,
" show-link [-pP] [-o <field>,..] [-s [-i <interval>]] "
"[<link>]\n" },
{ "create-aggr", do_create_aggr,
" create-aggr [-t] [-P <policy>] [-L <mode>] [-T <time>] "
*** 298,313 ****
{ "disconnect-wifi", do_disconnect_wifi,
" disconnect-wifi [-a] [<link>]" },
{ "show-wifi", do_show_wifi,
" show-wifi [-p] [-o <field>,...] [<link>]\n" },
{ "set-linkprop", do_set_linkprop,
! " set-linkprop [-t] -p <prop>=<value>[,...] <name>" },
{ "reset-linkprop", do_reset_linkprop,
! " reset-linkprop [-t] [-p <prop>,...] <name>" },
{ "show-linkprop", do_show_linkprop,
! " show-linkprop [-cP] [-o <field>,...] [-p <prop>,...] "
! "<name>\n" },
{ "show-ether", do_show_ether,
" show-ether [-px][-o <field>,...] <link>\n" },
{ "create-secobj", do_create_secobj,
" create-secobj [-t] [-f <file>] -c <class> <secobj>" },
{ "delete-secobj", do_delete_secobj,
--- 300,316 ----
{ "disconnect-wifi", do_disconnect_wifi,
" disconnect-wifi [-a] [<link>]" },
{ "show-wifi", do_show_wifi,
" show-wifi [-p] [-o <field>,...] [<link>]\n" },
{ "set-linkprop", do_set_linkprop,
! " set-linkprop [-t] [-z zonename] -p <prop>=<value>[,...] "
! "<name>" },
{ "reset-linkprop", do_reset_linkprop,
! " reset-linkprop [-t] [-z zonename] [-p <prop>,...] <name>"},
{ "show-linkprop", do_show_linkprop,
! " show-linkprop [-cP] [-o <field>,...] [-z zonename] "
! "[-p <prop>,...] <name>\n" },
{ "show-ether", do_show_ether,
" show-ether [-px][-o <field>,...] <link>\n" },
{ "create-secobj", do_create_secobj,
" create-secobj [-t] [-f <file>] -c <class> <secobj>" },
{ "delete-secobj", do_delete_secobj,
*** 345,358 ****
" create-vnic [-t] -l <link> [-m <value> | auto |\n"
"\t\t {factory [-n <slot-id>]} | {random [-r <prefix>]} |\n"
"\t\t {vrrp -V <vrid> -A {inet | inet6}} [-v <vid> [-f]]\n"
"\t\t [-p <prop>=<value>[,...]] <vnic-link>" },
{ "delete-vnic", do_delete_vnic,
! " delete-vnic [-t] <vnic-link>" },
{ "show-vnic", do_show_vnic,
! " show-vnic [-pP] [-l <link>] [-s [-i <interval>]] "
! "[<link>]\n" },
{ "up-vnic", do_up_vnic, NULL },
{ "create-part", do_create_part,
" create-part [-t] [-f] -l <link> [-P <pkey>]\n"
"\t\t [-R <root-dir>] <part-link>" },
{ "delete-part", do_delete_part,
--- 348,361 ----
" create-vnic [-t] -l <link> [-m <value> | auto |\n"
"\t\t {factory [-n <slot-id>]} | {random [-r <prefix>]} |\n"
"\t\t {vrrp -V <vrid> -A {inet | inet6}} [-v <vid> [-f]]\n"
"\t\t [-p <prop>=<value>[,...]] <vnic-link>" },
{ "delete-vnic", do_delete_vnic,
! " delete-vnic [-t] [-z zonename] <vnic-link>" },
{ "show-vnic", do_show_vnic,
! " show-vnic [-pP] [-l <link>] [-z zonename] "
! "[-s [-i <interval>]] [<link>]\n" },
{ "up-vnic", do_up_vnic, NULL },
{ "create-part", do_create_part,
" create-part [-t] [-f] -l <link> [-P <pkey>]\n"
"\t\t [-R <root-dir>] <part-link>" },
{ "delete-part", do_delete_part,
*** 957,966 ****
--- 960,970 ----
typedef struct show_linkprop_state {
char ls_link[MAXLINKNAMELEN];
char *ls_line;
char **ls_propvals;
+ char *ls_zonename;
dladm_arg_list_t *ls_proplist;
boolean_t ls_parsable;
boolean_t ls_persist;
boolean_t ls_header;
dladm_status_t ls_status;
*** 1009,1033 ****
char vnic_over[DLPI_LINKNAME_MAX];
char vnic_speed[6];
char vnic_macaddr[18];
char vnic_macaddrtype[19];
char vnic_vid[6];
} vnic_fields_buf_t;
static const ofmt_field_t vnic_fields[] = {
{ "LINK", 13,
offsetof(vnic_fields_buf_t, vnic_link), print_default_cb},
! { "OVER", 13,
offsetof(vnic_fields_buf_t, vnic_over), print_default_cb},
! { "SPEED", 7,
offsetof(vnic_fields_buf_t, vnic_speed), print_default_cb},
{ "MACADDRESS", 18,
offsetof(vnic_fields_buf_t, vnic_macaddr), print_default_cb},
! { "MACADDRTYPE", 20,
offsetof(vnic_fields_buf_t, vnic_macaddrtype), print_default_cb},
! { "VID", 7,
offsetof(vnic_fields_buf_t, vnic_vid), print_default_cb},
{ NULL, 0, 0, NULL}}
;
/*
* structures for 'dladm show-ib'
--- 1013,1040 ----
char vnic_over[DLPI_LINKNAME_MAX];
char vnic_speed[6];
char vnic_macaddr[18];
char vnic_macaddrtype[19];
char vnic_vid[6];
+ char vnic_zone[ZONENAME_MAX];
} vnic_fields_buf_t;
static const ofmt_field_t vnic_fields[] = {
{ "LINK", 13,
offsetof(vnic_fields_buf_t, vnic_link), print_default_cb},
! { "OVER", 11,
offsetof(vnic_fields_buf_t, vnic_over), print_default_cb},
! { "SPEED", 6,
offsetof(vnic_fields_buf_t, vnic_speed), print_default_cb},
{ "MACADDRESS", 18,
offsetof(vnic_fields_buf_t, vnic_macaddr), print_default_cb},
! { "MACADDRTYPE", 12,
offsetof(vnic_fields_buf_t, vnic_macaddrtype), print_default_cb},
! { "VID", 5,
offsetof(vnic_fields_buf_t, vnic_vid), print_default_cb},
+ { "ZONE", 20,
+ offsetof(vnic_fields_buf_t, vnic_zone), print_default_cb},
{ NULL, 0, 0, NULL}}
;
/*
* structures for 'dladm show-ib'
*** 2493,2509 ****
{
int option;
char *link1, *link2;
char *altroot = NULL;
dladm_status_t status;
opterr = 0;
! while ((option = getopt_long(argc, argv, ":R:", lopts, NULL)) != -1) {
switch (option) {
case 'R':
altroot = optarg;
break;
default:
die_opterr(optopt, option, use);
break;
}
}
--- 2500,2520 ----
{
int option;
char *link1, *link2;
char *altroot = NULL;
dladm_status_t status;
+ char *zonename = NULL;
opterr = 0;
! while ((option = getopt_long(argc, argv, ":R:z:", lopts, NULL)) != -1) {
switch (option) {
case 'R':
altroot = optarg;
break;
+ case 'z':
+ zonename = optarg;
+ break;
default:
die_opterr(optopt, option, use);
break;
}
}
*** 2515,2525 ****
if (altroot != NULL)
altroot_cmd(altroot, argc, argv);
link1 = argv[optind++];
link2 = argv[optind];
! if ((status = dladm_rename_link(handle, link1, link2)) !=
DLADM_STATUS_OK)
die_dlerr(status, "rename operation failed");
}
/*ARGSUSED*/
--- 2526,2536 ----
if (altroot != NULL)
altroot_cmd(altroot, argc, argv);
link1 = argv[optind++];
link2 = argv[optind];
! if ((status = dladm_rename_link(handle, zonename, link1, link2)) !=
DLADM_STATUS_OK)
die_dlerr(status, "rename operation failed");
}
/*ARGSUSED*/
*** 3405,3419 ****
char *allstat_fields =
"link,ipackets,rbytes,ierrors,opackets,obytes,oerrors";
ofmt_handle_t ofmt;
ofmt_status_t oferr;
uint_t ofmtflags = 0;
bzero(&state, sizeof (state));
opterr = 0;
! while ((option = getopt_long(argc, argv, ":pPsSi:o:",
show_lopts, NULL)) != -1) {
switch (option) {
case 'p':
if (p_arg)
die_optdup(option);
--- 3416,3431 ----
char *allstat_fields =
"link,ipackets,rbytes,ierrors,opackets,obytes,oerrors";
ofmt_handle_t ofmt;
ofmt_status_t oferr;
uint_t ofmtflags = 0;
+ char *zonename = NULL;
bzero(&state, sizeof (state));
opterr = 0;
! while ((option = getopt_long(argc, argv, ":pPsSi:o:z:",
show_lopts, NULL)) != -1) {
switch (option) {
case 'p':
if (p_arg)
die_optdup(option);
*** 3448,3457 ****
--- 3460,3472 ----
i_arg = B_TRUE;
if (!dladm_str2interval(optarg, &interval))
die("invalid interval value '%s'", optarg);
break;
+ case 'z':
+ zonename = optarg;
+ break;
default:
die_opterr(optopt, option, use);
break;
}
}
*** 3473,3484 ****
uint32_t f;
if (strlcpy(linkname, argv[optind], MAXLINKNAMELEN) >=
MAXLINKNAMELEN)
die("link name too long");
! if ((status = dladm_name2info(handle, linkname, &linkid, &f,
! NULL, NULL)) != DLADM_STATUS_OK) {
die_dlerr(status, "link %s is not valid", linkname);
}
if (!(f & flags)) {
die_dlerr(DLADM_STATUS_BADARG, "link %s is %s",
--- 3488,3499 ----
uint32_t f;
if (strlcpy(linkname, argv[optind], MAXLINKNAMELEN) >=
MAXLINKNAMELEN)
die("link name too long");
! if ((status = dladm_zname2info(handle, zonename, linkname,
! &linkid, &f, NULL, NULL)) != DLADM_STATUS_OK) {
die_dlerr(status, "link %s is not valid", linkname);
}
if (!(f & flags)) {
die_dlerr(DLADM_STATUS_BADARG, "link %s is %s",
*** 4739,4748 ****
--- 4754,4769 ----
* 'f' - force, flag can be specified only with 'v' - vlan.
*/
if ((flags & DLADM_OPT_FORCE) != 0 && vid == 0)
die("-f option can only be used with -v");
+ /*
+ * If creating a transient VNIC for a zone, mark it in the kernel.
+ */
+ if (strstr(propstr, "zone=") != NULL && !(flags & DLADM_OPT_PERSIST))
+ flags |= DLADM_OPT_TRANSIENT;
+
if (mac_prefix_len != 0 && mac_addr_type != VNIC_MAC_ADDR_TYPE_RANDOM &&
mac_addr_type != VNIC_MAC_ADDR_TYPE_FIXED)
usage();
if (mac_addr_type == VNIC_MAC_ADDR_TYPE_VRID) {
*** 4830,4850 ****
int option;
uint32_t flags = DLADM_OPT_ACTIVE | DLADM_OPT_PERSIST;
datalink_id_t linkid;
char *altroot = NULL;
dladm_status_t status;
opterr = 0;
! while ((option = getopt_long(argc, argv, ":R:t", lopts,
NULL)) != -1) {
switch (option) {
case 't':
flags &= ~DLADM_OPT_PERSIST;
break;
case 'R':
altroot = optarg;
break;
default:
die_opterr(optopt, option, use);
}
}
--- 4851,4875 ----
int option;
uint32_t flags = DLADM_OPT_ACTIVE | DLADM_OPT_PERSIST;
datalink_id_t linkid;
char *altroot = NULL;
dladm_status_t status;
+ char *zonename = NULL;
opterr = 0;
! while ((option = getopt_long(argc, argv, ":R:tz:", lopts,
NULL)) != -1) {
switch (option) {
case 't':
flags &= ~DLADM_OPT_PERSIST;
break;
case 'R':
altroot = optarg;
break;
+ case 'z':
+ zonename = optarg;
+ break;
default:
die_opterr(optopt, option, use);
}
}
*** 4853,4864 ****
usage();
if (altroot != NULL)
altroot_cmd(altroot, argc, argv);
! status = dladm_name2info(handle, argv[optind], &linkid, NULL, NULL,
! NULL);
if (status != DLADM_STATUS_OK)
die("invalid link name '%s'", argv[optind]);
if ((flags & DLADM_OPT_ACTIVE) != 0) {
do_etherstub_check(argv[optind], linkid, etherstub,
--- 4878,4889 ----
usage();
if (altroot != NULL)
altroot_cmd(altroot, argc, argv);
! status = dladm_zname2info(handle, zonename, argv[optind], &linkid, NULL,
! NULL, NULL);
if (status != DLADM_STATUS_OK)
die("invalid link name '%s'", argv[optind]);
if ((flags & DLADM_OPT_ACTIVE) != 0) {
do_etherstub_check(argv[optind], linkid, etherstub,
*** 4986,4995 ****
--- 5011,5023 ----
boolean_t is_etherstub;
char devname[MAXLINKNAMELEN];
char vnic_name[MAXLINKNAMELEN];
char mstr[MAXMACADDRLEN * 3];
vnic_fields_buf_t vbuf;
+ uint_t valcnt = 1;
+ char zonename[DLADM_PROP_VAL_MAX + 1];
+ char *valptr[1];
if ((status = dladm_vnic_info(handle, linkid, vnic, state->vs_flags)) !=
DLADM_STATUS_OK)
return (status);
*** 5015,5024 ****
--- 5043,5064 ----
if (!is_etherstub &&
dladm_datalink_id2info(handle, vnic->va_link_id, NULL, NULL,
NULL, devname, sizeof (devname)) != DLADM_STATUS_OK)
(void) sprintf(devname, "?");
+
+ zonename[0] = '\0';
+ if (!is_etherstub) {
+ valptr[0] = zonename;
+ (void) dladm_get_linkprop(handle, linkid,
+ DLADM_PROP_VAL_CURRENT, "zone", (char **)valptr, &valcnt);
+ }
+
+ if (state->vs_zonename != NULL &&
+ strcmp(state->vs_zonename, zonename) != 0)
+ return (DLADM_STATUS_OK);
+
state->vs_found = B_TRUE;
if (state->vs_stats) {
/* print vnic statistics */
pktsum_t vnic_stats;
*** 5090,5099 ****
--- 5130,5146 ----
mstr));
}
(void) snprintf(vbuf.vnic_vid, sizeof (vbuf.vnic_vid),
"%d", vnic->va_vid);
+
+ if (zonename[0] != '\0')
+ (void) snprintf(vbuf.vnic_zone,
+ sizeof (vbuf.vnic_zone), "%s", zonename);
+ else
+ (void) strlcpy(vbuf.vnic_zone, "--",
+ sizeof (vbuf.vnic_zone));
}
ofmt_print(state->vs_ofmt, &vbuf);
return (DLADM_STATUS_OK);
*** 5128,5141 ****
const ofmt_field_t *pf;
char *all_e_fields = "link";
ofmt_handle_t ofmt;
ofmt_status_t oferr;
uint_t ofmtflags = 0;
bzero(&state, sizeof (state));
opterr = 0;
! while ((option = getopt_long(argc, argv, ":pPl:si:o:", lopts,
NULL)) != -1) {
switch (option) {
case 'p':
state.vs_parsable = B_TRUE;
break;
--- 5175,5189 ----
const ofmt_field_t *pf;
char *all_e_fields = "link";
ofmt_handle_t ofmt;
ofmt_status_t oferr;
uint_t ofmtflags = 0;
+ char *zonename = NULL;
bzero(&state, sizeof (state));
opterr = 0;
! while ((option = getopt_long(argc, argv, ":pPl:si:o:z:", lopts,
NULL)) != -1) {
switch (option) {
case 'p':
state.vs_parsable = B_TRUE;
break;
*** 5170,5179 ****
--- 5218,5230 ----
break;
case 'o':
o_arg = B_TRUE;
fields_str = optarg;
break;
+ case 'z':
+ zonename = optarg;
+ break;
default:
die_opterr(optopt, option, use);
}
}
*** 5180,5191 ****
if (i_arg && !s_arg)
die("the option -i can be used only with -s");
/* get vnic ID (optional last argument) */
if (optind == (argc - 1)) {
! status = dladm_name2info(handle, argv[optind], &linkid, NULL,
! NULL, NULL);
if (status != DLADM_STATUS_OK) {
die_dlerr(status, "invalid vnic name '%s'",
argv[optind]);
}
(void) strlcpy(state.vs_vnic, argv[optind], MAXLINKNAMELEN);
--- 5231,5242 ----
if (i_arg && !s_arg)
die("the option -i can be used only with -s");
/* get vnic ID (optional last argument) */
if (optind == (argc - 1)) {
! status = dladm_zname2info(handle, zonename, argv[optind],
! &linkid, NULL, NULL, NULL);
if (status != DLADM_STATUS_OK) {
die_dlerr(status, "invalid vnic name '%s'",
argv[optind]);
}
(void) strlcpy(state.vs_vnic, argv[optind], MAXLINKNAMELEN);
*** 5192,5203 ****
} else if (optind != argc) {
usage();
}
if (l_arg) {
! status = dladm_name2info(handle, state.vs_link, &dev_linkid,
! NULL, NULL, NULL);
if (status != DLADM_STATUS_OK) {
die_dlerr(status, "invalid link name '%s'",
state.vs_link);
}
}
--- 5243,5254 ----
} else if (optind != argc) {
usage();
}
if (l_arg) {
! status = dladm_zname2info(handle, zonename, state.vs_link,
! &dev_linkid, NULL, NULL, NULL);
if (status != DLADM_STATUS_OK) {
die_dlerr(status, "invalid link name '%s'",
state.vs_link);
}
}
*** 5205,5214 ****
--- 5256,5266 ----
state.vs_vnic_id = linkid;
state.vs_link_id = dev_linkid;
state.vs_etherstub = etherstub;
state.vs_found = B_FALSE;
state.vs_flags = flags;
+ state.vs_zonename = zonename;
if (!o_arg || (o_arg && strcasecmp(fields_str, "all") == 0)) {
if (etherstub)
fields_str = all_e_fields;
}
*** 6693,6702 ****
--- 6745,6755 ----
dladm_status_t status;
char *fields_str = NULL;
ofmt_handle_t ofmt;
ofmt_status_t oferr;
uint_t ofmtflags = 0;
+ char *zonename = NULL;
bzero(propstr, DLADM_STRSIZE);
opterr = 0;
state.ls_propvals = NULL;
state.ls_line = NULL;
*** 6703,6713 ****
state.ls_parsable = B_FALSE;
state.ls_persist = B_FALSE;
state.ls_header = B_TRUE;
state.ls_retstatus = DLADM_STATUS_OK;
! while ((option = getopt_long(argc, argv, ":p:cPo:",
prop_longopts, NULL)) != -1) {
switch (option) {
case 'p':
(void) strlcat(propstr, optarg, DLADM_STRSIZE);
if (strlcat(propstr, ",", DLADM_STRSIZE) >=
--- 6756,6766 ----
state.ls_parsable = B_FALSE;
state.ls_persist = B_FALSE;
state.ls_header = B_TRUE;
state.ls_retstatus = DLADM_STATUS_OK;
! while ((option = getopt_long(argc, argv, ":p:cPo:z:",
prop_longopts, NULL)) != -1) {
switch (option) {
case 'p':
(void) strlcat(propstr, optarg, DLADM_STRSIZE);
if (strlcat(propstr, ",", DLADM_STRSIZE) >=
*** 6722,6740 ****
flags = DLADM_OPT_PERSIST;
break;
case 'o':
fields_str = optarg;
break;
default:
die_opterr(optopt, option, use);
break;
}
}
if (optind == (argc - 1)) {
! if ((status = dladm_name2info(handle, argv[optind], &linkid,
! NULL, NULL, NULL)) != DLADM_STATUS_OK) {
die_dlerr(status, "link %s is not valid", argv[optind]);
}
} else if (optind != argc) {
usage();
}
--- 6775,6796 ----
flags = DLADM_OPT_PERSIST;
break;
case 'o':
fields_str = optarg;
break;
+ case 'z':
+ zonename = optarg;
+ break;
default:
die_opterr(optopt, option, use);
break;
}
}
if (optind == (argc - 1)) {
! if ((status = dladm_zname2info(handle, zonename, argv[optind],
! &linkid, NULL, NULL, NULL)) != DLADM_STATUS_OK) {
die_dlerr(status, "link %s is not valid", argv[optind]);
}
} else if (optind != argc) {
usage();
}
*** 6741,6750 ****
--- 6797,6807 ----
if (dladm_parse_link_props(propstr, &proplist, B_TRUE)
!= DLADM_STATUS_OK)
die("invalid link properties specified");
state.ls_proplist = proplist;
+ state.ls_zonename = zonename;
state.ls_status = DLADM_STATUS_OK;
if (state.ls_parsable)
ofmtflags |= OFMT_PARSABLE;
else
*** 6785,6794 ****
--- 6842,6862 ----
statep->ls_link, MAXLINKNAMELEN) != DLADM_STATUS_OK) {
statep->ls_status = DLADM_STATUS_NOTFOUND;
return (DLADM_WALK_CONTINUE);
}
+ if (statep->ls_zonename != NULL) {
+ datalink_id_t tlinkid;
+
+ if (dladm_zname2info(hdl, statep->ls_zonename, statep->ls_link,
+ &tlinkid, NULL, NULL, NULL) != DLADM_STATUS_OK ||
+ linkid != tlinkid) {
+ statep->ls_status = DLADM_STATUS_NOTFOUND;
+ return (DLADM_WALK_CONTINUE);
+ }
+ }
+
if ((statep->ls_persist && !(flags & DLADM_OPT_PERSIST)) ||
(!statep->ls_persist && !(flags & DLADM_OPT_ACTIVE))) {
statep->ls_status = DLADM_STATUS_BADARG;
return (DLADM_WALK_CONTINUE);
}
*** 6867,6881 ****
datalink_id_t linkid;
boolean_t temp = B_FALSE;
dladm_status_t status = DLADM_STATUS_OK;
char propstr[DLADM_STRSIZE];
dladm_arg_list_t *proplist = NULL;
opterr = 0;
bzero(propstr, DLADM_STRSIZE);
! while ((option = getopt_long(argc, argv, ":p:R:t",
prop_longopts, NULL)) != -1) {
switch (option) {
case 'p':
(void) strlcat(propstr, optarg, DLADM_STRSIZE);
if (strlcat(propstr, ",", DLADM_STRSIZE) >=
--- 6935,6950 ----
datalink_id_t linkid;
boolean_t temp = B_FALSE;
dladm_status_t status = DLADM_STATUS_OK;
char propstr[DLADM_STRSIZE];
dladm_arg_list_t *proplist = NULL;
+ char *zonename = NULL;
opterr = 0;
bzero(propstr, DLADM_STRSIZE);
! while ((option = getopt_long(argc, argv, ":p:R:tz:",
prop_longopts, NULL)) != -1) {
switch (option) {
case 'p':
(void) strlcat(propstr, optarg, DLADM_STRSIZE);
if (strlcat(propstr, ",", DLADM_STRSIZE) >=
*** 6886,6895 ****
--- 6955,6967 ----
temp = B_TRUE;
break;
case 'R':
altroot = optarg;
break;
+ case 'z':
+ zonename = optarg;
+ break;
default:
die_opterr(optopt, option, use);
}
}
*** 6908,6919 ****
if (altroot != NULL) {
dladm_free_props(proplist);
altroot_cmd(altroot, argc, argv);
}
! status = dladm_name2info(handle, argv[optind], &linkid, NULL, NULL,
! NULL);
if (status != DLADM_STATUS_OK)
die_dlerr(status, "link %s is not valid", argv[optind]);
if (proplist == NULL) {
set_linkprop_state_t state;
--- 6980,6991 ----
if (altroot != NULL) {
dladm_free_props(proplist);
altroot_cmd(altroot, argc, argv);
}
! status = dladm_zname2info(handle, zonename, argv[optind], &linkid,
! NULL, NULL, NULL);
if (status != DLADM_STATUS_OK)
die_dlerr(status, "link %s is not valid", argv[optind]);
if (proplist == NULL) {
set_linkprop_state_t state;