xref: /openbmc/bmcweb/features/redfish/include/utils/systemd_utils.hpp (revision 7bffdb7e9da69ae5416cda8df826372c33716beb)
1*7bffdb7eSBernard Wong /*
2*7bffdb7eSBernard Wong // Copyright (c) 2019 Intel Corporation
3*7bffdb7eSBernard Wong //
4*7bffdb7eSBernard Wong // Licensed under the Apache License, Version 2.0 (the "License");
5*7bffdb7eSBernard Wong // you may not use this file except in compliance with the License.
6*7bffdb7eSBernard Wong // You may obtain a copy of the License at
7*7bffdb7eSBernard Wong //
8*7bffdb7eSBernard Wong //      http://www.apache.org/licenses/LICENSE-2.0
9*7bffdb7eSBernard Wong //
10*7bffdb7eSBernard Wong // Unless required by applicable law or agreed to in writing, software
11*7bffdb7eSBernard Wong // distributed under the License is distributed on an "AS IS" BASIS,
12*7bffdb7eSBernard Wong // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*7bffdb7eSBernard Wong // See the License for the specific language governing permissions and
14*7bffdb7eSBernard Wong // limitations under the License.
15*7bffdb7eSBernard Wong */
16*7bffdb7eSBernard Wong #pragma once
17*7bffdb7eSBernard Wong 
18*7bffdb7eSBernard Wong #include <systemd/sd-id128.h>
19*7bffdb7eSBernard Wong 
20*7bffdb7eSBernard Wong namespace redfish
21*7bffdb7eSBernard Wong {
22*7bffdb7eSBernard Wong 
23*7bffdb7eSBernard Wong namespace systemd_utils
24*7bffdb7eSBernard Wong {
25*7bffdb7eSBernard Wong 
26*7bffdb7eSBernard Wong /**
27*7bffdb7eSBernard Wong  * @brief Retrieve service root UUID
28*7bffdb7eSBernard Wong  *
29*7bffdb7eSBernard Wong  * @return Service root UUID
30*7bffdb7eSBernard Wong  */
31*7bffdb7eSBernard Wong 
32*7bffdb7eSBernard Wong const std::string getUuid()
33*7bffdb7eSBernard Wong {
34*7bffdb7eSBernard Wong     std::string ret;
35*7bffdb7eSBernard Wong     // This ID needs to match the one in ipmid
36*7bffdb7eSBernard Wong     sd_id128_t appId = SD_ID128_MAKE(e0, e1, 73, 76, 64, 61, 47, da, a5, 0c, d0,
37*7bffdb7eSBernard Wong                                      cc, 64, 12, 45, 78);
38*7bffdb7eSBernard Wong     sd_id128_t machineId = SD_ID128_NULL;
39*7bffdb7eSBernard Wong 
40*7bffdb7eSBernard Wong     if (sd_id128_get_machine_app_specific(appId, &machineId) == 0)
41*7bffdb7eSBernard Wong     {
42*7bffdb7eSBernard Wong         std::array<char, SD_ID128_STRING_MAX> str;
43*7bffdb7eSBernard Wong         ret = sd_id128_to_string(machineId, str.data());
44*7bffdb7eSBernard Wong         ret.insert(8, 1, '-');
45*7bffdb7eSBernard Wong         ret.insert(13, 1, '-');
46*7bffdb7eSBernard Wong         ret.insert(18, 1, '-');
47*7bffdb7eSBernard Wong         ret.insert(23, 1, '-');
48*7bffdb7eSBernard Wong     }
49*7bffdb7eSBernard Wong 
50*7bffdb7eSBernard Wong     return ret;
51*7bffdb7eSBernard Wong }
52*7bffdb7eSBernard Wong 
53*7bffdb7eSBernard Wong } // namespace systemd_utils
54*7bffdb7eSBernard Wong } // namespace redfish
55