1 #pragma once
2 #include "types.hpp"
3
4 #include <stdplus/raw.hpp>
5 #include <stdplus/zstring_view.hpp>
6
7 #include <optional>
8 #include <string>
9 #include <string_view>
10 #include <unordered_set>
11
12 namespace phosphor
13 {
14 namespace network
15 {
16 namespace config
17 {
18 class Parser;
19 }
20
21 /* @brief converts a sockaddr for the specified address family into
22 * a type_safe InAddrAny.
23 * @param[in] family - The address family of the buf
24 * @param[in] buf - The network byte order address
25 */
addrFromBuf(int family,std::string_view buf)26 constexpr stdplus::InAnyAddr addrFromBuf(int family, std::string_view buf)
27 {
28 switch (family)
29 {
30 case AF_INET:
31 return stdplus::raw::copyFromStrict<stdplus::In4Addr>(buf);
32 case AF_INET6:
33 return stdplus::raw::copyFromStrict<stdplus::In6Addr>(buf);
34 }
35 throw std::invalid_argument("Unrecognized family");
36 }
37
38 /** @brief Converts the interface name into a u-boot environment
39 * variable that would hold its ethernet address.
40 *
41 * @param[in] intf - interface name
42 * @return The name of th environment key
43 */
44 std::optional<std::string> interfaceToUbootEthAddr(std::string_view intf);
45
46 /** @brief read the IPv6AcceptRA value from the configuration file
47 * @param[in] config - The parsed configuration.
48 */
49 bool getIPv6AcceptRA(const config::Parser& config);
50
51 /** @brief read the DHCP value from the configuration file
52 * @param[in] config - The parsed configuration.
53 */
54 struct DHCPVal
55 {
56 bool v4, v6;
57 };
58
59 enum class DHCPType
60 {
61 v4,
62 v6
63 };
64
65 DHCPVal getDHCPValue(const config::Parser& config);
66
67 /** @brief Read a boolean DHCP property from a conf file
68 * @param[in] config - The parsed configuration.
69 * @param[in] nwType - The network type.
70 * @param[in] key - The property name.
71 */
72 bool getDHCPProp(const config::Parser& config, DHCPType dhcpType,
73 std::string_view key);
74
75 namespace internal
76 {
77
78 /* @brief runs the given command in child process.
79 * @param[in] path - path of the binary file which needs to be execeuted.
80 * @param[in] args - arguments of the command.
81 */
82 void executeCommandinChildProcess(stdplus::zstring_view path, char** args);
83
84 /** @brief Get ignored interfaces from environment */
85 std::string_view getIgnoredInterfacesEnv();
86
87 /** @brief Parse the comma separated interface names */
88 std::unordered_set<std::string_view>
89 parseInterfaces(std::string_view interfaces);
90
91 /** @brief Get the ignored interfaces */
92 const std::unordered_set<std::string_view>& getIgnoredInterfaces();
93
94 } // namespace internal
95
96 /* @brief runs the given command in child process.
97 * @param[in] path -path of the binary file which needs to be execeuted.
98 * @param[in] tArgs - arguments of the command.
99 */
100 template <typename... ArgTypes>
execute(stdplus::zstring_view path,ArgTypes &&...tArgs)101 void execute(stdplus::zstring_view path, ArgTypes&&... tArgs)
102 {
103 using expandType = char*[];
104
105 expandType args = {const_cast<char*>(tArgs)..., nullptr};
106
107 internal::executeCommandinChildProcess(path, args);
108 }
109
110 } // namespace network
111
112 } // namespace phosphor
113