xref: /openbmc/google-misc/ncsid/subprojects/dhcp-done/update-dhcp-status.cpp (revision b86429c404528da10dbdfad8b8e38e1f550431e9)
11e76060aSYuxiao Zhang #include "file-io.hpp"
21e76060aSYuxiao Zhang 
31e76060aSYuxiao Zhang #include <stdplus/print.hpp>
41e76060aSYuxiao Zhang 
51e76060aSYuxiao Zhang #include <cstring>
61e76060aSYuxiao Zhang #include <iostream>
71e76060aSYuxiao Zhang 
81e76060aSYuxiao Zhang static void printUsage()
91e76060aSYuxiao Zhang {
101e76060aSYuxiao Zhang     stdplus::println(stderr, "Usage: update_dhcp_status <state> <message>");
11*b86429c4SYuxiao Zhang     stdplus::println(
12*b86429c4SYuxiao Zhang         stderr,
13*b86429c4SYuxiao Zhang         "<state> is one of 'DONE', 'POWERCYCLE', 'REBOOT' or 'ONGOING'");
141e76060aSYuxiao Zhang }
151e76060aSYuxiao Zhang 
161e76060aSYuxiao Zhang static int genStatusCode(char* state)
171e76060aSYuxiao Zhang {
181e76060aSYuxiao Zhang     if (std::strcmp(state, "DONE") == 0)
191e76060aSYuxiao Zhang     {
201e76060aSYuxiao Zhang         return 0;
211e76060aSYuxiao Zhang     }
221e76060aSYuxiao Zhang     else if (std::strcmp(state, "POWERCYCLE") == 0)
231e76060aSYuxiao Zhang     {
241e76060aSYuxiao Zhang         return 1;
251e76060aSYuxiao Zhang     }
261e76060aSYuxiao Zhang     else if (std::strcmp(state, "ONGOING") == 0)
271e76060aSYuxiao Zhang     {
281e76060aSYuxiao Zhang         return 2;
291e76060aSYuxiao Zhang     }
30*b86429c4SYuxiao Zhang     else if (std::strcmp(state, "REBOOT") == 0)
31*b86429c4SYuxiao Zhang     {
32*b86429c4SYuxiao Zhang         return 3;
33*b86429c4SYuxiao Zhang     }
341e76060aSYuxiao Zhang 
351e76060aSYuxiao Zhang     return -1;
361e76060aSYuxiao Zhang }
371e76060aSYuxiao Zhang 
381e76060aSYuxiao Zhang int main(int argc, char* argv[])
391e76060aSYuxiao Zhang {
401e76060aSYuxiao Zhang     if (argc != 3)
411e76060aSYuxiao Zhang     {
421e76060aSYuxiao Zhang         printUsage();
431e76060aSYuxiao Zhang         return 1;
441e76060aSYuxiao Zhang     }
451e76060aSYuxiao Zhang 
461e76060aSYuxiao Zhang     int statusCode = genStatusCode(argv[1]);
471e76060aSYuxiao Zhang 
481e76060aSYuxiao Zhang     if (statusCode == -1)
491e76060aSYuxiao Zhang     {
501e76060aSYuxiao Zhang         printUsage();
511e76060aSYuxiao Zhang         return 1;
521e76060aSYuxiao Zhang     }
531e76060aSYuxiao Zhang 
541e76060aSYuxiao Zhang     try
551e76060aSYuxiao Zhang     {
561e76060aSYuxiao Zhang         std::string status;
571e76060aSYuxiao Zhang         status.push_back(statusCode);
581e76060aSYuxiao Zhang         status.append(argv[2]);
591e76060aSYuxiao Zhang         fileWrite(statusFile, status);
601e76060aSYuxiao Zhang     }
611e76060aSYuxiao Zhang     catch (const std::exception& e)
621e76060aSYuxiao Zhang     {
631e76060aSYuxiao Zhang         stdplus::println(stderr, "Failed to update status file {}", e.what());
641e76060aSYuxiao Zhang         return 1;
651e76060aSYuxiao Zhang     }
661e76060aSYuxiao Zhang 
671e76060aSYuxiao Zhang     return 0;
681e76060aSYuxiao Zhang }
69