diff options
author | scottl <scottl@FreeBSD.org> | 2013-12-29 20:48:47 +0000 |
---|---|---|
committer | scottl <scottl@FreeBSD.org> | 2013-12-29 20:48:47 +0000 |
commit | 0d338d1a7e159e9f425f9be2b5e5b8ffe9ce2433 (patch) | |
tree | 3fea9a33b309716f517761b3b75d028f3680c9a7 /sbin | |
parent | a6fa8f7ccfb7f91fd05c44d5831c87445fab7dc0 (diff) | |
download | FreeBSD-src-0d338d1a7e159e9f425f9be2b5e5b8ffe9ce2433.zip FreeBSD-src-0d338d1a7e159e9f425f9be2b5e5b8ffe9ce2433.tar.gz |
Add the '-b' flag to 'camcontrol devlist'. This prints only the existing
buses and their parent sims, useful for creating a sim->bus->device map.
Obtained from: Netflix
MFC after: 3 days
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/camcontrol/camcontrol.8 | 5 | ||||
-rw-r--r-- | sbin/camcontrol/camcontrol.c | 34 |
2 files changed, 31 insertions, 8 deletions
diff --git a/sbin/camcontrol/camcontrol.8 b/sbin/camcontrol/camcontrol.8 index 3b5eafe..856edc4 100644 --- a/sbin/camcontrol/camcontrol.8 +++ b/sbin/camcontrol/camcontrol.8 @@ -41,6 +41,7 @@ .Op command args .Nm .Ic devlist +.Op Fl b .Op Fl v .Nm .Ic periphlist @@ -361,6 +362,10 @@ With the .Fl v argument, SCSI bus number, adapter name and unit numbers are printed as well. +On the other hand, with the +.Fl b +argument, only the bus adapter, and unit information will be printed, and +device information will be omitted. .It Ic periphlist List all peripheral drivers attached to a given physical device (logical unit). diff --git a/sbin/camcontrol/camcontrol.c b/sbin/camcontrol/camcontrol.c index f3e1011..e96eb0d 100644 --- a/sbin/camcontrol/camcontrol.c +++ b/sbin/camcontrol/camcontrol.c @@ -202,7 +202,7 @@ static struct camcontrol_opts option_table[] = { {"defects", CAM_CMD_READ_DEFECTS, CAM_ARG_NONE, readdefect_opts}, {"defectlist", CAM_CMD_READ_DEFECTS, CAM_ARG_NONE, readdefect_opts}, #endif /* MINIMALISTIC */ - {"devlist", CAM_CMD_DEVTREE, CAM_ARG_NONE, NULL}, + {"devlist", CAM_CMD_DEVTREE, CAM_ARG_NONE, "-b"}, #ifndef MINIMALISTIC {"periphlist", CAM_CMD_DEVLIST, CAM_ARG_NONE, NULL}, {"modepage", CAM_CMD_MODE_PAGE, CAM_ARG_NONE, "bdelm:P:"}, @@ -254,7 +254,7 @@ camcontrol_optret getoption(struct camcontrol_opts *table, char *arg, #ifndef MINIMALISTIC static int getdevlist(struct cam_device *device); #endif /* MINIMALISTIC */ -static int getdevtree(void); +static int getdevtree(int argc, char **argv, char *combinedopt); #ifndef MINIMALISTIC static int testunitready(struct cam_device *device, int retry_count, int timeout, int quiet); @@ -411,7 +411,7 @@ getdevlist(struct cam_device *device) #endif /* MINIMALISTIC */ static int -getdevtree(void) +getdevtree(int argc, char **argv, char *combinedopt) { union ccb ccb; int bufsize, fd; @@ -419,6 +419,19 @@ getdevtree(void) int need_close = 0; int error = 0; int skip_device = 0; + int busonly = 0; + char c; + + while ((c = getopt(argc, argv, combinedopt)) != -1) { + switch(c) { + case 'b': + if ((arglist & CAM_ARG_VERBOSE) == 0) + busonly = 1; + break; + default: + break; + } + } if ((fd = open(XPT_DEVICE, O_RDWR)) == -1) { warn("couldn't open %s", XPT_DEVICE); @@ -478,7 +491,8 @@ getdevtree(void) * Only print the bus information if the * user turns on the verbose flag. */ - if ((arglist & CAM_ARG_VERBOSE) == 0) + if ((busonly == 0) && + (arglist & CAM_ARG_VERBOSE) == 0) break; bus_result = @@ -489,11 +503,12 @@ getdevtree(void) need_close = 0; } - fprintf(stdout, "scbus%d on %s%d bus %d:\n", + fprintf(stdout, "scbus%d on %s%d bus %d%s\n", bus_result->path_id, bus_result->dev_name, bus_result->unit_number, - bus_result->bus_id); + bus_result->bus_id, + (busonly ? "" : ":")); break; } case DEV_MATCH_DEVICE: { @@ -501,6 +516,9 @@ getdevtree(void) char vendor[16], product[48], revision[16]; char fw[5], tmpstr[256]; + if (busonly == 1) + break; + dev_result = &ccb.cdm.matches[i].result.device_result; @@ -582,7 +600,7 @@ getdevtree(void) periph_result = &ccb.cdm.matches[i].result.periph_result; - if (skip_device != 0) + if (busonly || skip_device != 0) break; if (need_close > 1) @@ -8178,7 +8196,7 @@ main(int argc, char **argv) break; #endif /* MINIMALISTIC */ case CAM_CMD_DEVTREE: - error = getdevtree(); + error = getdevtree(argc, argv, combinedopt); break; #ifndef MINIMALISTIC case CAM_CMD_TUR: |