xref: /openbmc/phosphor-networkd/src/util.hpp (revision 9b2a20d3)
11bbe3d1eSWilliam A. Kennington III #pragma once
21bbe3d1eSWilliam A. Kennington III #include "types.hpp"
31bbe3d1eSWilliam A. Kennington III 
401c816f2SWilliam A. Kennington III #include <stdplus/raw.hpp>
569f4554bSWilliam A. Kennington III #include <stdplus/zstring.hpp>
689d734b9SPatrick Williams 
789d734b9SPatrick Williams #include <optional>
81bbe3d1eSWilliam A. Kennington III #include <string>
91bbe3d1eSWilliam A. Kennington III #include <string_view>
1095530ec9SWilliam A. Kennington III #include <unordered_set>
111bbe3d1eSWilliam A. Kennington III 
121bbe3d1eSWilliam A. Kennington III namespace phosphor
131bbe3d1eSWilliam A. Kennington III {
141bbe3d1eSWilliam A. Kennington III namespace network
151bbe3d1eSWilliam A. Kennington III {
1620efa79fSWilliam A. Kennington III namespace config
1720efa79fSWilliam A. Kennington III {
1820efa79fSWilliam A. Kennington III class Parser;
1920efa79fSWilliam A. Kennington III }
201bbe3d1eSWilliam A. Kennington III 
211bbe3d1eSWilliam A. Kennington III /* @brief converts a sockaddr for the specified address family into
221bbe3d1eSWilliam A. Kennington III  *        a type_safe InAddrAny.
2397b5dc68SWilliam A. Kennington III  * @param[in] family - The address family of the buf
241bbe3d1eSWilliam A. Kennington III  * @param[in] buf - The network byte order address
251bbe3d1eSWilliam A. Kennington III  */
26*9b2a20d3SWilliam A. Kennington III constexpr stdplus::InAnyAddr addrFromBuf(int family, std::string_view buf)
2701c816f2SWilliam A. Kennington III {
2801c816f2SWilliam A. Kennington III     switch (family)
2901c816f2SWilliam A. Kennington III     {
3001c816f2SWilliam A. Kennington III         case AF_INET:
31*9b2a20d3SWilliam A. Kennington III             return stdplus::raw::copyFromStrict<stdplus::In4Addr>(buf);
3201c816f2SWilliam A. Kennington III         case AF_INET6:
33*9b2a20d3SWilliam A. Kennington III             return stdplus::raw::copyFromStrict<stdplus::In6Addr>(buf);
3401c816f2SWilliam A. Kennington III     }
3501c816f2SWilliam A. Kennington III     throw std::invalid_argument("Unrecognized family");
3601c816f2SWilliam A. Kennington III }
371bbe3d1eSWilliam A. Kennington III 
381bbe3d1eSWilliam A. Kennington III /** @brief Converts the interface name into a u-boot environment
391bbe3d1eSWilliam A. Kennington III  *         variable that would hold its ethernet address.
401bbe3d1eSWilliam A. Kennington III  *
411bbe3d1eSWilliam A. Kennington III  *  @param[in] intf - interface name
421bbe3d1eSWilliam A. Kennington III  *  @return The name of th environment key
431bbe3d1eSWilliam A. Kennington III  */
4469f4554bSWilliam A. Kennington III std::optional<std::string> interfaceToUbootEthAddr(std::string_view intf);
451bbe3d1eSWilliam A. Kennington III 
46a520a39dSWilliam A. Kennington III /** @brief read the IPv6AcceptRA value from the configuration file
47a520a39dSWilliam A. Kennington III  *  @param[in] config - The parsed configuration.
481bbe3d1eSWilliam A. Kennington III  */
49a520a39dSWilliam A. Kennington III bool getIPv6AcceptRA(const config::Parser& config);
50a520a39dSWilliam A. Kennington III 
51a520a39dSWilliam A. Kennington III /** @brief read the DHCP value from the configuration file
52a520a39dSWilliam A. Kennington III  *  @param[in] config - The parsed configuration.
53a520a39dSWilliam A. Kennington III  */
548060c0daSWilliam A. Kennington III struct DHCPVal
558060c0daSWilliam A. Kennington III {
568060c0daSWilliam A. Kennington III     bool v4, v6;
578060c0daSWilliam A. Kennington III };
588060c0daSWilliam A. Kennington III DHCPVal getDHCPValue(const config::Parser& config);
591bbe3d1eSWilliam A. Kennington III 
60e94c9ffcSWilliam A. Kennington III /** @brief Read a boolean DHCP property from a conf file
61e94c9ffcSWilliam A. Kennington III  *  @param[in] config - The parsed configuration.
62e94c9ffcSWilliam A. Kennington III  *  @param[in] key - The property name.
63e94c9ffcSWilliam A. Kennington III  */
64e94c9ffcSWilliam A. Kennington III bool getDHCPProp(const config::Parser& config, std::string_view key);
65e94c9ffcSWilliam A. Kennington III 
661bbe3d1eSWilliam A. Kennington III namespace internal
671bbe3d1eSWilliam A. Kennington III {
681bbe3d1eSWilliam A. Kennington III 
691bbe3d1eSWilliam A. Kennington III /* @brief runs the given command in child process.
701bbe3d1eSWilliam A. Kennington III  * @param[in] path - path of the binary file which needs to be execeuted.
711bbe3d1eSWilliam A. Kennington III  * @param[in] args - arguments of the command.
721bbe3d1eSWilliam A. Kennington III  */
7369f4554bSWilliam A. Kennington III void executeCommandinChildProcess(stdplus::const_zstring path, char** args);
741bbe3d1eSWilliam A. Kennington III 
751bbe3d1eSWilliam A. Kennington III /** @brief Get ignored interfaces from environment */
761bbe3d1eSWilliam A. Kennington III std::string_view getIgnoredInterfacesEnv();
771bbe3d1eSWilliam A. Kennington III 
781bbe3d1eSWilliam A. Kennington III /** @brief Parse the comma separated interface names */
7995530ec9SWilliam A. Kennington III std::unordered_set<std::string_view>
8095530ec9SWilliam A. Kennington III     parseInterfaces(std::string_view interfaces);
811bbe3d1eSWilliam A. Kennington III 
821bbe3d1eSWilliam A. Kennington III /** @brief Get the ignored interfaces */
8395530ec9SWilliam A. Kennington III const std::unordered_set<std::string_view>& getIgnoredInterfaces();
841bbe3d1eSWilliam A. Kennington III 
851bbe3d1eSWilliam A. Kennington III } // namespace internal
861bbe3d1eSWilliam A. Kennington III 
871bbe3d1eSWilliam A. Kennington III /* @brief runs the given command in child process.
881bbe3d1eSWilliam A. Kennington III  * @param[in] path -path of the binary file which needs to be execeuted.
891bbe3d1eSWilliam A. Kennington III  * @param[in] tArgs - arguments of the command.
901bbe3d1eSWilliam A. Kennington III  */
911bbe3d1eSWilliam A. Kennington III template <typename... ArgTypes>
9269f4554bSWilliam A. Kennington III void execute(stdplus::const_zstring path, ArgTypes&&... tArgs)
931bbe3d1eSWilliam A. Kennington III {
941bbe3d1eSWilliam A. Kennington III     using expandType = char*[];
951bbe3d1eSWilliam A. Kennington III 
961bbe3d1eSWilliam A. Kennington III     expandType args = {const_cast<char*>(tArgs)..., nullptr};
971bbe3d1eSWilliam A. Kennington III 
981bbe3d1eSWilliam A. Kennington III     internal::executeCommandinChildProcess(path, args);
991bbe3d1eSWilliam A. Kennington III }
1001bbe3d1eSWilliam A. Kennington III 
1011bbe3d1eSWilliam A. Kennington III } // namespace network
1021bbe3d1eSWilliam A. Kennington III 
1031bbe3d1eSWilliam A. Kennington III } // namespace phosphor
104