summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorSowmini Varadhan <Sowmini.Varadhan@Sun.COM>2008-10-04 07:58:50 -0400
committerSowmini Varadhan <Sowmini.Varadhan@Sun.COM>2008-10-04 07:58:50 -0400
commit149b7eb2919570a01d698963b7ab14d45b4edda8 (patch)
tree1cbd4745b5b09c9f3afefd517252da8170858e19 /usr/src
parentff4f37703f8a206f433d63190b03c04326b6d293 (diff)
downloadillumos-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.c13
-rw-r--r--usr/src/cmd/dladm/dladm.c17
-rw-r--r--usr/src/lib/libdladm/common/libdladm.h5
-rw-r--r--usr/src/lib/libdladm/common/linkprop.c10
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 = &notsup;
+ } else if (status == DLADM_STATUS_NOTDEFINED) {
+ propvals = &notsup; /* 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);