summaryrefslogtreecommitdiff
path: root/usr/src/lib/cfgadm_plugins/usb/common/cfga_usb.c
diff options
context:
space:
mode:
authorDan McDonald <danmcd@mnx.io>2022-11-06 23:04:04 -0500
committerDan McDonald <danmcd@mnx.io>2022-11-06 23:04:04 -0500
commitd6e6c033222e8067ec1dfeb10a4ee03139b6168c (patch)
tree404802c4b32f00af2021b6dcdcfc6c3c501b9826 /usr/src/lib/cfgadm_plugins/usb/common/cfga_usb.c
parent33edda4c44df77895e91c50a9a02028873cd0ee6 (diff)
parent1fde93bfc5537d4261d6ef3ac9db44a76d697e75 (diff)
downloadillumos-joyent-d6e6c033222e8067ec1dfeb10a4ee03139b6168c.tar.gz
[illumos-gate merge]
commit 1fde93bfc5537d4261d6ef3ac9db44a76d697e75 14489 bhyve should emulate imul commit 77ef2e2dc992015d6c68f5923c0216f6d000fc96 15120 dtest missing dependency on CPU counters commit 5fcf5f8704b3d1b7e6175f9cb17fea58f5e56cdb 15119 truss could support IP, IPv6 sockopts 15115 IP_DONTFRAG could use docs commit 0accf5554adfa8ff02c02d58042253bfa597bfa2 15114 IP_DONTFRAG more like IP please frag commit b18d44ce328fbdf8d8c82ef1763d30b8a46edfde 14535 cfgadm_usb(8) should provide iSerialNumber in -v output commit 4f3f3e9a1dee62c031fa67cfe64e11d6dd3fab1b 14763 bhyve upstream sync 2022 August commit cfed4d7055842c539437036c634e7fe84d10977d 15085 mech_krb5: memory leaked during context establishment commit 549ab26f262a63e8892b99d530a98fea6423ad63 15084 SMBD leaks memory during startup/refresh commit 56a2adb63cd7b5ba73bb3f0fb3930b2d2730513e 15082 SMB Clients see but can't access restricted named streams commit 66a9cc68640459b14e330f94bcab980ef58fd66d 14957 pcieadm overloads header1.iobasehi
Diffstat (limited to 'usr/src/lib/cfgadm_plugins/usb/common/cfga_usb.c')
-rw-r--r--usr/src/lib/cfgadm_plugins/usb/common/cfga_usb.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/usr/src/lib/cfgadm_plugins/usb/common/cfga_usb.c b/usr/src/lib/cfgadm_plugins/usb/common/cfga_usb.c
index 47976fb058..663cd02f09 100644
--- a/usr/src/lib/cfgadm_plugins/usb/common/cfga_usb.c
+++ b/usr/src/lib/cfgadm_plugins/usb/common/cfga_usb.c
@@ -22,9 +22,9 @@
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
* Copyright 2018 OmniOS Community Edition (OmniOSce) Association.
+ * Copyright 2022 Oxide Computer Company
*/
-
#include "cfga_usb.h"
@@ -889,12 +889,14 @@ fill_in_ap_info(const char *ap_id, char *info_buf, size_t info_size)
{
char *mfg_str = NULL; /* iManufacturer */
char *prod_str = NULL; /* iProduct */
+ char *serial_str = NULL; /* iSerialNumber */
char *cfg_descr = NULL; /* iConfiguration */
uint_t config; /* curr cfg index */
size_t size; /* tmp stuff */
boolean_t flag; /* wether to print ":" or not */
boolean_t free_mfg_str = B_FALSE;
boolean_t free_prod_str = B_FALSE;
+ boolean_t free_serial_str = B_FALSE;
boolean_t free_cfg_str = B_FALSE;
cfga_usb_ret_t rv = CFGA_USB_OK;
usb_dev_descr_t *dev_descrp = NULL; /* device descriptor */
@@ -938,6 +940,22 @@ fill_in_ap_info(const char *ap_id, char *info_buf, size_t info_size)
free_prod_str = B_TRUE;
}
+ /* iSerialNumber */
+ serial_str = USB_UNDEF_STR;
+ if (dev_descrp->iSerialNumber != 0) {
+ if ((rv = do_control_ioctl(ap_id, USB_DESCR_TYPE_STRING,
+ HUBD_SERIALNO_STR, (void **)&serial_str,
+ &size)) != CFGA_USB_OK) {
+ if (rv == CFGA_USB_ZEROLEN) {
+ rv = CFGA_USB_OK;
+ } else {
+ DPRINTF("getting iSerialNumber failed\n");
+ goto bailout;
+ }
+ }
+ free_serial_str = B_TRUE;
+ }
+
/* Current conifguration */
if ((rv = get_config(ap_id, &config)) != CFGA_USB_OK) {
DPRINTF("get_config failed\n");
@@ -968,8 +986,9 @@ fill_in_ap_info(const char *ap_id, char *info_buf, size_t info_size)
/* Dump local buf into passed-in buf. */
(void) snprintf(info_buf, info_size,
- "Mfg: %s Product: %s NConfigs: %d Config: %d %s%s", mfg_str,
- prod_str, dev_descrp->bNumConfigurations, config,
+ "Mfg: %s Product: %s Serial: %s NConfigs: %d Config: %d %s%s",
+ mfg_str, prod_str, serial_str,
+ dev_descrp->bNumConfigurations, config,
(flag == B_TRUE) ? ": " : "", cfg_descr);
bailout:
@@ -985,6 +1004,10 @@ bailout:
free(prod_str);
}
+ if ((free_serial_str == B_TRUE) && serial_str) {
+ free(serial_str);
+ }
+
if ((free_cfg_str == B_TRUE) && cfg_descr) {
free(cfg_descr);
}