Hello,
If it can be of interest, here is a patch specific to kontron board MCs
(at least CP6012). This OEM command allows to overload the BIOS boot order.
Regards,
--
BenoƮt Guillon [EMAIL PROTECTED]
TCT/3S tel. : 33 (0)4 98 16 33 90
THALES COMPUTERS
diff -u -r ipmitool-1.8.9/lib/ipmi_kontronoem.c ipmitool-1.8.9p1/lib/ipmi_kontronoem.c
--- ipmitool-1.8.9/lib/ipmi_kontronoem.c 2006-05-17 01:43:37.000000000 +0200
+++ ipmitool-1.8.9p1/lib/ipmi_kontronoem.c 2007-04-11 19:18:17.000000000 +0200
@@ -65,6 +65,9 @@
static int ipmi_kontron_set_serial_number(struct ipmi_intf * intf);
static int ipmi_kontron_set_mfg_date (struct ipmi_intf * intf);
+static void ipmi_kontron_nextboot_help(void);
+static int ipmi_kontron_nextboot_set(struct ipmi_intf * intf,
+ int argc, char **argv);
int
@@ -77,7 +80,7 @@
else if (strncmp(argv[0], "help", 4) == 0)
ipmi_kontron_help();
- else if(!strncmp(argv[0], "setsn", 5))
+ else if (!strncmp(argv[0], "setsn", 5))
{
if(argc >= 1)
{
@@ -95,7 +98,7 @@
printf("fru setsn\n");
}
}
- else if(!strncmp(argv[0], "setmfgdate", 5))
+ else if (!strncmp(argv[0], "setmfgdate", 5))
{
if(argc >= 1)
{
@@ -112,7 +115,24 @@
{
printf("fru setmfgdate\n");
}
-
+ }
+ else if (!strncmp(argv[0], "nextboot", sizeof("nextboot")-1))
+ {
+ if (argc > 1)
+ {
+ if ((rc = ipmi_kontron_nextboot_set(intf, argc-1, argv+1)) == 0)
+ {
+ printf("Nextboot set successfully\n");
+ }
+ else
+ {
+ printf("Nextboot set failed\n");
+ }
+ }
+ else
+ {
+ ipmi_kontron_nextboot_help();
+ }
}
else
@@ -128,7 +148,7 @@
static void ipmi_kontron_help(void)
{
- printf("Kontron Commands: setsn setmfgdate\n");
+ printf("Kontron Commands: setsn setmfgdate nextboot\n");
}
/* ipmi_fru_set_serial_number - Set the Serial Number in FRU
@@ -583,4 +603,80 @@
free(fru_data);
return(1);
-}
+}
+
+
+static char *bootdev[] = {"BIOS", "FDD", "HDD", "CDROM", "network", 0};
+
+static void
+ipmi_kontron_nextboot_help(void)
+{
+ int i;
+ printf("nextboot <device>\n"
+ "Supported devices:\n");
+ for (i = 0; bootdev[i] != 0; i++) {
+ printf("- %s\n", bootdev[i]);
+ }
+}
+
+/* ipmi_kontron_next_boot_set - Select the next boot order on CP6012
+ *
+ * @intf: ipmi interface
+ * @id: fru id
+ *
+ * returns -1 on error
+ * returns 1 if successful
+ */
+static int
+ipmi_kontron_nextboot_set(struct ipmi_intf * intf, int argc, char **argv)
+{
+ struct ipmi_rs *rsp;
+ struct ipmi_rq req;
+ uint8_t msg_data[8];
+ int i;
+
+ memset(msg_data, 0, sizeof(msg_data));
+ msg_data[0] = 0xb4;
+ msg_data[1] = 0x90;
+ msg_data[2] = 0x91;
+ msg_data[3] = 0x8b;
+ msg_data[4] = 0x9d;
+ msg_data[5] = 0xFF;
+ msg_data[6] = 0xFF; /* any */
+
+ for (i = 0; bootdev[i] != 0; i++) {
+ if (strcmp(argv[0], bootdev[i]) == 0) {
+ msg_data[5] = i;
+ break;
+ }
+ }
+
+ /* Invalid device selected? */
+ if (msg_data[5] == 0xFF) {
+ printf("Unknown boot device: %s\n", argv[0]);
+ return -1;
+ }
+
+ memset(&req, 0, sizeof(req));
+ req.msg.netfn = 0x3E;
+ req.msg.cmd = 0x02;
+ req.msg.data = msg_data;
+ req.msg.data_len = 7;
+
+ /* Set Lun temporary, necessary for this oem command */
+ req.msg.lun = 0x03;
+
+ rsp = intf->sendrecv(intf, &req);
+ if (rsp == NULL)
+ {
+ printf("Device not present (No Response)\n");
+ return(-1);
+ }
+ if (rsp->ccode > 0) {
+ printf("Device not present (%s)\n",
+ val2str(rsp->ccode, completion_code_vals));
+ return(-1);
+ }
+ return 0;
+}
+
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Ipmitool-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ipmitool-devel