sensorhandler: add reserve_sdr

Change-Id: I58300910e4cdb0c889e030615a034443816ae5db
Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/sensorhandler.cpp b/sensorhandler.cpp
index c1657da..da6cfd9 100644
--- a/sensorhandler.cpp
+++ b/sensorhandler.cpp
@@ -24,7 +24,6 @@
     char dbusname[32];
 } ;
 
-
 sensorTypemap_t g_SensorTypeMap[] = {
 
     {0x01, 0x6F, "Temp"},
@@ -695,32 +694,62 @@
     return IPMI_CC_OK;
 }
 
+ipmi_ret_t ipmi_sen_reserve_sdr(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+                                ipmi_request_t request,
+                                ipmi_response_t response,
+                                ipmi_data_len_t data_len,
+                                ipmi_context_t context)
+{
+    // A constant reservation ID is okay until we implement add/remove SDR.
+    const uint16_t reservation_id = 1;
+    *(uint16_t*)response = reservation_id;
+
+    printf("Created new IPMI SDR reservation ID %d\n", *(uint16_t*)response);
+    return IPMI_CC_OK;
+}
 
 void register_netfn_sen_functions()
 {
     // <Wildcard Command>
-    printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",NETFUN_SENSOR, IPMI_CMD_WILDCARD);
-    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_WILDCARD, NULL, ipmi_sen_wildcard,
+    printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",
+           NETFUN_SENSOR, IPMI_CMD_WILDCARD);
+    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_WILDCARD,
+                           nullptr, ipmi_sen_wildcard,
                            PRIVILEGE_USER);
 
     // <Get Sensor Type>
-    printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",NETFUN_SENSOR, IPMI_CMD_GET_SENSOR_TYPE);
-    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_GET_SENSOR_TYPE, NULL, ipmi_sen_get_sensor_type,
+    printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",
+           NETFUN_SENSOR, IPMI_CMD_GET_SENSOR_TYPE);
+    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_GET_SENSOR_TYPE,
+                           nullptr, ipmi_sen_get_sensor_type,
                            PRIVILEGE_USER);
 
     // <Set Sensor Reading and Event Status>
-    printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",NETFUN_SENSOR, IPMI_CMD_SET_SENSOR);
-    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_SET_SENSOR, NULL, ipmi_sen_set_sensor,
+    printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",
+           NETFUN_SENSOR, IPMI_CMD_SET_SENSOR);
+    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_SET_SENSOR,
+                           nullptr, ipmi_sen_set_sensor,
                            PRIVILEGE_OPERATOR);
 
     // <Get Sensor Reading>
-    printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",NETFUN_SENSOR, IPMI_CMD_GET_SENSOR_READING);
-    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_GET_SENSOR_READING, NULL,
-                           ipmi_sen_get_sensor_reading, PRIVILEGE_USER);
+    printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",
+           NETFUN_SENSOR, IPMI_CMD_GET_SENSOR_READING);
+    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_GET_SENSOR_READING,
+                           nullptr, ipmi_sen_get_sensor_reading,
+                           PRIVILEGE_USER);
+
+    // <Reserve SDR>
+    printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",
+           NETFUN_SENSOR, IPMI_CMD_RESERVE_SDR_REPO);
+    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_RESERVE_SDR_REPO,
+                           nullptr, ipmi_sen_reserve_sdr,
+                           PRIVILEGE_USER);
 
     // <Get SDR Info>
-    printf("Registering NetFn:[0x%X], Cmd:[0x%x]\n",NETFUN_SENSOR, IPMI_CMD_GET_SDR_INFO);
-    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_GET_SDR_INFO, NULL,
-                           ipmi_sen_get_sdr_info, PRIVILEGE_USER);
+    printf("Registering NetFn:[0x%X], Cmd:[0x%x]\n",
+           NETFUN_SENSOR, IPMI_CMD_GET_SDR_INFO);
+    ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_GET_SDR_INFO,
+                           nullptr, ipmi_sen_get_sdr_info,
+                           PRIVILEGE_USER);
     return;
 }