--- ipmitool-1.8.9/lib/ipmi_sel.c.orig	2007-03-06 14:15:37.000000000 -0800
+++ ipmitool-1.8.9/lib/ipmi_sel.c	2007-05-23 14:23:51.001946000 -0700
@@ -401,6 +401,27 @@ ipmi_sel_add_entries_fromfile(struct ipm
 	return rc;
 }
 
+static int
+ipmi_sel_add_oem_nots(struct ipmi_intf * intf, const char *oem_data)
+{
+	int rc = 0;
+	int i;
+	struct sel_event_record sel_event;
+
+	memset(&sel_event, 0, sizeof(struct sel_event_record));
+	sel_event.record_id = 0x0000;
+	sel_event.record_type = 0xE0; // OEM 
+	memset(sel_event.sel_type.oem_nots_type.oem_defined, '\0',
+			SEL_OEM_NOTS_DATA_LEN);
+	
+	for (i=0; i < SEL_OEM_NOTS_DATA_LEN && oem_data[i] != '\0'; i++) {
+		sel_event.sel_type.oem_nots_type.oem_defined[i] = oem_data[i];
+	}
+
+	rc = ipmi_sel_add_entry(intf, &sel_event);
+
+	return rc;
+}
 static struct ipmi_event_sensor_types oem_kontron_event_reading_types[] __attribute__((unused)) = { 
    { 0x70 , 0x00 , 0xff, IPMI_EVENT_CLASS_DISCRETE , "OEM Firmware Info 1", "Reserved" },
    { 0x71 , 0x00 , 0xff, IPMI_EVENT_CLASS_DISCRETE , "OEM Firmware Info 2", "Reserved" },
@@ -1905,7 +1926,7 @@ int ipmi_sel_main(struct ipmi_intf * int
 		rc = ipmi_sel_get_info(intf);
 	else if (strncmp(argv[0], "help", 4) == 0)
 		lprintf(LOG_ERR, "SEL Commands:  "
-				"info clear delete list elist get add time save readraw writeraw");
+				"info clear delete list elist get add oem time save readraw writeraw");
 	else if (strncmp(argv[0], "info", 4) == 0)
 		rc = ipmi_sel_get_info(intf);
 	else if (strncmp(argv[0], "save", 4) == 0) {
@@ -1922,6 +1943,13 @@ int ipmi_sel_main(struct ipmi_intf * int
 		}
 		rc = ipmi_sel_add_entries_fromfile(intf, argv[1]);
 	}
+	else if (strncmp(argv[0], "oem", 3) == 0) {
+		if (argc < 2) {
+			lprintf(LOG_NOTICE, "usage: sel oem <oem string data up to 13 chars>");
+			return 0;
+		}
+		rc = ipmi_sel_add_oem_nots(intf, argv[1]);
+	}
 	else if (strncmp(argv[0], "writeraw", 8) == 0) {
 		if (argc < 2) {
 			lprintf(LOG_NOTICE, "usage: sel writeraw <filename>");
