diff options
| author | Sowmini Varadhan <Sowmini.Varadhan@Sun.COM> | 2008-10-04 07:58:50 -0400 |
|---|---|---|
| committer | Sowmini Varadhan <Sowmini.Varadhan@Sun.COM> | 2008-10-04 07:58:50 -0400 |
| commit | 149b7eb2919570a01d698963b7ab14d45b4edda8 (patch) | |
| tree | 1cbd4745b5b09c9f3afefd517252da8170858e19 /usr/src | |
| parent | ff4f37703f8a206f433d63190b03c04326b6d293 (diff) | |
| download | illumos-joyent-149b7eb2919570a01d698963b7ab14d45b4edda8.tar.gz | |
6753521 show-linkprop should not return ENOTSUP for DEFAULT value of props like speed.
6748230 gldv3_warning should initialize cnt when calling dladm_get_linkprop
Diffstat (limited to 'usr/src')
| -rw-r--r-- | usr/src/cmd/cmd-inet/usr.sbin/ndd.c | 13 | ||||
| -rw-r--r-- | usr/src/cmd/dladm/dladm.c | 17 | ||||
| -rw-r--r-- | usr/src/lib/libdladm/common/libdladm.h | 5 | ||||
| -rw-r--r-- | usr/src/lib/libdladm/common/linkprop.c | 10 |
4 files changed, 26 insertions, 19 deletions
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/ndd.c b/usr/src/cmd/cmd-inet/usr.sbin/ndd.c index 4aac580e67..0d1af3281e 100644 --- a/usr/src/cmd/cmd-inet/usr.sbin/ndd.c +++ b/usr/src/cmd/cmd-inet/usr.sbin/ndd.c @@ -28,8 +28,6 @@ * ndd.c 2.1, last change 11/14/90 */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include <stdio.h> #include <errno.h> #include <ctype.h> @@ -57,20 +55,25 @@ static char gbuf[65536]; /* Need 20k for 160 IREs ... */ static char usage_str[] = "usage: ndd -set device_name name value\n" " ndd [-get] device_name name [name ...]"; +/* + * gldv3_warning() catches the case of /sbin/ndd abuse to administer + * ethernet/MII props. Note that /sbin/ndd has not been abused + * for administration of other datalink types, which makes it permissible + * to test for support of the flowctrl property. + */ static void gldv3_warning(char *module) { datalink_id_t linkid; dladm_status_t status; char buf[DLADM_PROP_VAL_MAX], *cp; - uint_t cnt; + uint_t cnt = 1; char *link; link = strrchr(module, '/'); if (link == NULL) return; - status = dladm_name2info(++link, &linkid, - NULL, NULL, NULL); + status = dladm_name2info(++link, &linkid, NULL, NULL, NULL); if (status != DLADM_STATUS_OK) return; cp = buf; diff --git a/usr/src/cmd/dladm/dladm.c b/usr/src/cmd/dladm/dladm.c index eacd59fee5..330c8d03d0 100644 --- a/usr/src/cmd/dladm/dladm.c +++ b/usr/src/cmd/dladm/dladm.c @@ -4387,6 +4387,8 @@ print_linkprop(datalink_id_t linkid, show_linkprop_state_t *statep, propvals = &unknown; else propvals = ¬sup; + } else if (status == DLADM_STATUS_NOTDEFINED) { + propvals = ¬sup; /* STR_UNDEF_VAL */ } else { if (statep->ls_proplist && statep->ls_status == DLADM_STATUS_OK) { @@ -4490,7 +4492,17 @@ linkprop_is_supported(datalink_id_t linkid, const char *propname, status = dladm_get_linkprop(linkid, DLADM_PROP_VAL_DEFAULT, propname, statep->ls_propvals, &valcnt); - return (status != DLADM_STATUS_NOTSUP); + if (status == DLADM_STATUS_OK) + return (B_TRUE); + + /* + * A system wide default value is not available for the + * property. Check if current value can be retrieved. + */ + status = dladm_get_linkprop(linkid, DLADM_PROP_VAL_CURRENT, + propname, statep->ls_propvals, &valcnt); + + return (status == DLADM_STATUS_OK); } static int @@ -4509,7 +4521,8 @@ show_linkprop(datalink_id_t linkid, const char *propname, void *arg) if (!statep->ls_parseable) print_header(&statep->ls_print); } - if (!linkprop_is_supported(linkid, propname, statep)) + if (!statep->ls_parseable && + !linkprop_is_supported(linkid, propname, statep)) return (DLADM_WALK_CONTINUE); dladm_print_output(&statep->ls_print, statep->ls_parseable, diff --git a/usr/src/lib/libdladm/common/libdladm.h b/usr/src/lib/libdladm/common/libdladm.h index a7077f5900..df69a54615 100644 --- a/usr/src/lib/libdladm/common/libdladm.h +++ b/usr/src/lib/libdladm/common/libdladm.h @@ -26,8 +26,6 @@ #ifndef _LIBDLADM_H #define _LIBDLADM_H -#pragma ident "%Z%%M% %I% %E% SMI" - #include <sys/dls.h> #include <sys/dlpi.h> @@ -100,7 +98,8 @@ typedef enum { DLADM_STATUS_LINKBUSY, DLADM_STATUS_VIDINVAL, DLADM_STATUS_NONOTIF, - DLADM_STATUS_TRYAGAIN + DLADM_STATUS_TRYAGAIN, + DLADM_STATUS_NOTDEFINED } dladm_status_t; typedef enum { diff --git a/usr/src/lib/libdladm/common/linkprop.c b/usr/src/lib/libdladm/common/linkprop.c index dd43d9331b..d82be99c71 100644 --- a/usr/src/lib/libdladm/common/linkprop.c +++ b/usr/src/lib/libdladm/common/linkprop.c @@ -1188,7 +1188,7 @@ do_get_autopush(struct prop_desc *pd, datalink_id_t linkid, dld_ioc_macprop_t *dip; if (flags & MAC_PROP_DEFAULT) - return (DLADM_STATUS_NOTSUP); + return (DLADM_STATUS_NOTDEFINED); *val_cnt = 1; dip = i_dladm_get_public_prop(linkid, pd->pd_name, flags, &status); @@ -1912,9 +1912,6 @@ i_dladm_duplex_get(struct prop_desc *pd, datalink_id_t linkid, link_duplex_t link_duplex; dladm_status_t status; - if (flags & MAC_PROP_DEFAULT) - return (DLADM_STATUS_NOTSUP); - if ((status = dladm_get_single_mac_stat(linkid, "link_duplex", KSTAT_DATA_UINT32, &link_duplex)) != 0) return (status); @@ -1942,9 +1939,6 @@ i_dladm_speed_get(struct prop_desc *pd, datalink_id_t linkid, uint64_t ifspeed = 0; dladm_status_t status; - if (flags & MAC_PROP_DEFAULT) - return (DLADM_STATUS_NOTSUP); - if ((status = dladm_get_single_mac_stat(linkid, "ifspeed", KSTAT_DATA_UINT64, &ifspeed)) != 0) return (status); @@ -1970,8 +1964,6 @@ i_dladm_status_get(struct prop_desc *pd, datalink_id_t linkid, uchar_t *cp; dld_ioc_macprop_t *dip; - if (flags & MAC_PROP_DEFAULT) - return (DLADM_STATUS_NOTSUP); dip = i_dladm_get_public_prop(linkid, pd->pd_name, flags, &status); if (status != DLADM_STATUS_OK) return (status); |
