Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Oct 2017 15:30:35 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r324986 - head/sbin/reboot
Message-ID:  <201710251530.v9PFUZWG018619@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Wed Oct 25 15:30:35 2017
New Revision: 324986
URL: https://svnweb.freebsd.org/changeset/base/324986

Log:
  Add power cycle support to reboot/halt as -c.
  
  When -c is specified, the system will be power cycled if the
  underlying hardware supports it. Otherwise the system will be halted
  or rebooted depending on which command was used.
  
  Sponsored by: Netflix

Modified:
  head/sbin/reboot/reboot.8
  head/sbin/reboot/reboot.c

Modified: head/sbin/reboot/reboot.8
==============================================================================
--- head/sbin/reboot/reboot.8	Wed Oct 25 15:30:30 2017	(r324985)
+++ head/sbin/reboot/reboot.8	Wed Oct 25 15:30:35 2017	(r324986)
@@ -28,7 +28,7 @@
 .\"	@(#)reboot.8	8.1 (Berkeley) 6/9/93
 .\" $FreeBSD$
 .\"
-.Dd March 19, 2017
+.Dd October 23, 2017
 .Dt REBOOT 8
 .Os
 .Sh NAME
@@ -42,7 +42,7 @@
 .Op Fl lNnpq
 .Op Fl k Ar kernel
 .Nm
-.Op Fl dlNnpqr
+.Op Fl cdlNnpqr
 .Op Fl k Ar kernel
 .Nm fasthalt
 .Op Fl lNnpq
@@ -66,6 +66,20 @@ accounting database.
 .Pp
 The options are as follows:
 .Bl -tag -width indent
+.It Fl c
+The system will turn off the power and then turn it back on if it can.
+If the power down action fails, the system
+will halt or reboot normally, depending on whether
+.Nm halt
+or
+.Nm
+was called.
+At the present time, only the
+.Xr ipmi 4
+driver implements the power cycle functionality and only on hardware
+with a BMC that supports power cycling.
+Unlike power off, the amount of hardware that supports power cycling
+is small.
 .It Fl d
 The system is requested to create a crash dump.
 This option is
@@ -162,6 +176,7 @@ reboot -r
 .Sh SEE ALSO
 .Xr kenv 1 ,
 .Xr getutxent 3 ,
+.Xr ipmi 4 ,
 .Xr boot 8 ,
 .Xr dumpon 8 ,
 .Xr nextboot 8 ,

Modified: head/sbin/reboot/reboot.c
==============================================================================
--- head/sbin/reboot/reboot.c	Wed Oct 25 15:30:30 2017	(r324985)
+++ head/sbin/reboot/reboot.c	Wed Oct 25 15:30:35 2017	(r324986)
@@ -77,8 +77,11 @@ main(int argc, char *argv[])
 	} else
 		howto = 0;
 	lflag = nflag = qflag = Nflag = 0;
-	while ((ch = getopt(argc, argv, "dk:lNnpqr")) != -1)
+	while ((ch = getopt(argc, argv, "cdk:lNnpqr")) != -1)
 		switch(ch) {
+		case 'c':
+			howto |= RB_POWERCYCLE;
+			break;
 		case 'd':
 			howto |= RB_DUMP;
 			break;
@@ -116,8 +119,10 @@ main(int argc, char *argv[])
 		errx(1, "cannot dump (-d) when halting; must reboot instead");
 	if (Nflag && (howto & RB_NOSYNC) != 0)
 		errx(1, "-N cannot be used with -n");
+	if ((howto & RB_POWEROFF) && (howto & RB_POWERCYCLE))
+		errx(1, "-c and -p cannot be used together");
 	if ((howto & RB_REROOT) != 0 && howto != RB_REROOT)
-		errx(1, "-r cannot be used with -d, -n, or -p");
+		errx(1, "-r cannot be used with -c, -d, -n, or -p");
 	if (geteuid()) {
 		errno = EPERM;
 		err(1, NULL);
@@ -151,6 +156,12 @@ main(int argc, char *argv[])
 		} else if (howto & RB_REROOT) {
 			openlog("reroot", 0, LOG_AUTH | LOG_CONS);
 			syslog(LOG_CRIT, "rerooted by %s", user);
+		} else if (howto & RB_POWEROFF) {
+			openlog("reboot", 0, LOG_AUTH | LOG_CONS);
+			syslog(LOG_CRIT, "powered off by %s", user);
+		} else if (howto & RB_POWERCYCLE) {
+			openlog("reboot", 0, LOG_AUTH | LOG_CONS);
+			syslog(LOG_CRIT, "power cycled by %s", user);
 		} else {
 			openlog("reboot", 0, LOG_AUTH | LOG_CONS);
 			syslog(LOG_CRIT, "rebooted by %s", user);



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