Reimplement UUID based on systemd UUID
...rather than a randomly generated one
Change-Id: I85493ac29d21f5fa9f347edc21129901f9d0d911
Signed-off-by: Ed Tanous <ed.tanous@intel.com>
diff --git a/redfish-core/lib/service_root.hpp b/redfish-core/lib/service_root.hpp
index 62796ee..d6cf44e 100644
--- a/redfish-core/lib/service_root.hpp
+++ b/redfish-core/lib/service_root.hpp
@@ -15,6 +15,7 @@
*/
#pragma once
+#include <systemd/sd-id128.h>
#include "node.hpp"
namespace redfish {
@@ -31,16 +32,16 @@
Node::json["RedfishVersion"] = "1.1.0";
Node::json["Links"]["Sessions"] = {
{"@odata.id", "/redfish/v1/SessionService/Sessions"}};
- Node::json["UUID"] =
- app.template get_middleware<crow::PersistentData::Middleware>()
- .system_uuid;
- entityPrivileges = {{boost::beast::http::verb::get, {}},
- {boost::beast::http::verb::head, {}},
- {boost::beast::http::verb::patch, {{"ConfigureComponents"}}},
- {boost::beast::http::verb::put, {{"ConfigureComponents"}}},
- {boost::beast::http::verb::delete_, {{"ConfigureComponents"}}},
- {boost::beast::http::verb::post, {{"ConfigureComponents"}}}};
+ Node::json["UUID"] = get_uuid();
+
+ entityPrivileges = {
+ {boost::beast::http::verb::get, {}},
+ {boost::beast::http::verb::head, {}},
+ {boost::beast::http::verb::patch, {{"ConfigureComponents"}}},
+ {boost::beast::http::verb::put, {{"ConfigureComponents"}}},
+ {boost::beast::http::verb::delete_, {{"ConfigureComponents"}}},
+ {boost::beast::http::verb::post, {{"ConfigureComponents"}}}};
}
private:
@@ -49,6 +50,27 @@
res.json_value = Node::json;
res.end();
}
+
+ const std::string get_uuid() {
+ // If we are using a version of systemd that can get the app specific uuid,
+ // use that
+#ifdef sd_id128_get_machine_app_specific
+ std::array<char, SD_ID128_STRING_MAX> string;
+ sd_id128_t id = SD_ID128_NULL;
+
+ // This ID needs to match the one in ipmid
+ int r = sd_id128_get_machine_app_specific(
+ SD_ID128_MAKE(e0, e1, 73, 76, 64, 61, 47, da, a5, 0c, d0, cc, 64, 12,
+ 45, 78),
+ &id);
+ if (r < 0) {
+ return "00000000-0000-0000-0000-000000000000";
+ }
+ return string.data();
+#else
+ return "00000000-0000-0000-0000-000000000000";
+#endif
+ }
};
} // namespace redfish