Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 2 Jan 2014 01:40:20 +0000 (UTC)
From:      Scott Long <scottl@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r260177 - stable/10/sbin/camcontrol
Message-ID:  <201401020140.s021eK0C037882@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: scottl
Date: Thu Jan  2 01:40:19 2014
New Revision: 260177
URL: http://svnweb.freebsd.org/changeset/base/260177

Log:
  MFC r260059, r260087:
  
  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

Modified:
  stable/10/sbin/camcontrol/camcontrol.8
  stable/10/sbin/camcontrol/camcontrol.c

Modified: stable/10/sbin/camcontrol/camcontrol.8
==============================================================================
--- stable/10/sbin/camcontrol/camcontrol.8	Wed Jan  1 22:56:49 2014	(r260176)
+++ stable/10/sbin/camcontrol/camcontrol.8	Thu Jan  2 01:40:19 2014	(r260177)
@@ -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).

Modified: stable/10/sbin/camcontrol/camcontrol.c
==============================================================================
--- stable/10/sbin/camcontrol/camcontrol.c	Wed Jan  1 22:56:49 2014	(r260176)
+++ stable/10/sbin/camcontrol/camcontrol.c	Thu Jan  2 01:40:19 2014	(r260177)
@@ -202,7 +202,7 @@ static struct camcontrol_opts option_tab
 	{"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 camco
 #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;
+	int 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:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201401020140.s021eK0C037882>