xref: /openbmc/google-misc/dhcp-done/subprojects/ncsid/src/net_config.h (revision 1285115c16180bd28a3cfe79d9db8d10c84fe2ed)
1*1285115cSWilliam A. Kennington III /*
2*1285115cSWilliam A. Kennington III  * Copyright 2021 Google LLC
3*1285115cSWilliam A. Kennington III  *
4*1285115cSWilliam A. Kennington III  * Licensed under the Apache License, Version 2.0 (the "License");
5*1285115cSWilliam A. Kennington III  * you may not use this file except in compliance with the License.
6*1285115cSWilliam A. Kennington III  * You may obtain a copy of the License at
7*1285115cSWilliam A. Kennington III  *
8*1285115cSWilliam A. Kennington III  *      http://www.apache.org/licenses/LICENSE-2.0
9*1285115cSWilliam A. Kennington III  *
10*1285115cSWilliam A. Kennington III  * Unless required by applicable law or agreed to in writing, software
11*1285115cSWilliam A. Kennington III  * distributed under the License is distributed on an "AS IS" BASIS,
12*1285115cSWilliam A. Kennington III  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*1285115cSWilliam A. Kennington III  * See the License for the specific language governing permissions and
14*1285115cSWilliam A. Kennington III  * limitations under the License.
15*1285115cSWilliam A. Kennington III  */
16*1285115cSWilliam A. Kennington III 
17*1285115cSWilliam A. Kennington III #pragma once
18*1285115cSWilliam A. Kennington III 
19*1285115cSWilliam A. Kennington III #include "platforms/nemora/portable/net_types.h"
20*1285115cSWilliam A. Kennington III 
21*1285115cSWilliam A. Kennington III #include <net_iface.h>
22*1285115cSWilliam A. Kennington III 
23*1285115cSWilliam A. Kennington III #include <sdbusplus/bus.hpp>
24*1285115cSWilliam A. Kennington III 
25*1285115cSWilliam A. Kennington III #include <experimental/optional>
26*1285115cSWilliam A. Kennington III #include <list>
27*1285115cSWilliam A. Kennington III #include <map>
28*1285115cSWilliam A. Kennington III #include <optional>
29*1285115cSWilliam A. Kennington III #include <string>
30*1285115cSWilliam A. Kennington III #include <vector>
31*1285115cSWilliam A. Kennington III 
32*1285115cSWilliam A. Kennington III // The API for configuring and querying network.
33*1285115cSWilliam A. Kennington III 
34*1285115cSWilliam A. Kennington III namespace net
35*1285115cSWilliam A. Kennington III {
36*1285115cSWilliam A. Kennington III 
37*1285115cSWilliam A. Kennington III using DBusObjectPath = std::string;
38*1285115cSWilliam A. Kennington III using DBusService = std::string;
39*1285115cSWilliam A. Kennington III using DBusInterface = std::string;
40*1285115cSWilliam A. Kennington III using ObjectTree =
41*1285115cSWilliam A. Kennington III     std::map<DBusObjectPath, std::map<DBusService, std::vector<DBusInterface>>>;
42*1285115cSWilliam A. Kennington III 
43*1285115cSWilliam A. Kennington III class ConfigBase
44*1285115cSWilliam A. Kennington III {
45*1285115cSWilliam A. Kennington III   public:
46*1285115cSWilliam A. Kennington III     virtual ~ConfigBase() = default;
47*1285115cSWilliam A. Kennington III 
48*1285115cSWilliam A. Kennington III     virtual int get_mac_addr(mac_addr_t* mac) = 0;
49*1285115cSWilliam A. Kennington III 
50*1285115cSWilliam A. Kennington III     virtual int set_mac_addr(const mac_addr_t& mac) = 0;
51*1285115cSWilliam A. Kennington III 
52*1285115cSWilliam A. Kennington III     // Called each time is_nic_hostless state is sampled.
53*1285115cSWilliam A. Kennington III     virtual int set_nic_hostless(bool is_nic_hostless) = 0;
54*1285115cSWilliam A. Kennington III };
55*1285115cSWilliam A. Kennington III 
56*1285115cSWilliam A. Kennington III // Calls phosphord-networkd
57*1285115cSWilliam A. Kennington III class PhosphorConfig : public ConfigBase
58*1285115cSWilliam A. Kennington III {
59*1285115cSWilliam A. Kennington III   public:
60*1285115cSWilliam A. Kennington III     explicit PhosphorConfig(const std::string& iface_name);
61*1285115cSWilliam A. Kennington III 
62*1285115cSWilliam A. Kennington III     // Reads the MAC address from phosphor-networkd interface or internal
63*1285115cSWilliam A. Kennington III     // cache, and store in the mac pointer.
64*1285115cSWilliam A. Kennington III     // Returns -1 if failed, 0 if succeeded.
65*1285115cSWilliam A. Kennington III     int get_mac_addr(mac_addr_t* mac) override;
66*1285115cSWilliam A. Kennington III 
67*1285115cSWilliam A. Kennington III     // Sets the MAC address over phosphor-networkd, and update internal
68*1285115cSWilliam A. Kennington III     // cache.
69*1285115cSWilliam A. Kennington III     // Returns -1 if failed, 0 if succeeded.
70*1285115cSWilliam A. Kennington III     int set_mac_addr(const mac_addr_t& mac) override;
71*1285115cSWilliam A. Kennington III 
72*1285115cSWilliam A. Kennington III     virtual int set_nic_hostless(bool is_nic_hostless) override;
73*1285115cSWilliam A. Kennington III 
74*1285115cSWilliam A. Kennington III   private:
75*1285115cSWilliam A. Kennington III     sdbusplus::message::message new_networkd_call(sdbusplus::bus::bus* dbus,
76*1285115cSWilliam A. Kennington III                                                   bool get = false) const;
77*1285115cSWilliam A. Kennington III 
78*1285115cSWilliam A. Kennington III     const std::string iface_name_;
79*1285115cSWilliam A. Kennington III     const std::string iface_path_;
80*1285115cSWilliam A. Kennington III 
81*1285115cSWilliam A. Kennington III     // Stores the currently configured nic state, if previously set
82*1285115cSWilliam A. Kennington III     std::optional<bool> was_nic_hostless_;
83*1285115cSWilliam A. Kennington III 
84*1285115cSWilliam A. Kennington III     // The MAC address obtained from NIC.
85*1285115cSWilliam A. Kennington III     // ncsid will commit this MAC address over DBus to phosphor-networkd
86*1285115cSWilliam A. Kennington III     // and expect it to be persisted. If actual host MAC address changes or
87*1285115cSWilliam A. Kennington III     // BMC MAC address is overwritten, a daemon reboot is needed to reset
88*1285115cSWilliam A. Kennington III     // the MAC.
89*1285115cSWilliam A. Kennington III     //   Initialized to nullopt which evaluates to false. Once a value is
90*1285115cSWilliam A. Kennington III     // set, bool() evaluates to true.
91*1285115cSWilliam A. Kennington III     std::experimental::optional<mac_addr_t> shared_host_mac_;
92*1285115cSWilliam A. Kennington III 
93*1285115cSWilliam A. Kennington III     // List of outstanding pids for config jobs
94*1285115cSWilliam A. Kennington III     std::list<pid_t> running_pids_;
95*1285115cSWilliam A. Kennington III 
96*1285115cSWilliam A. Kennington III     // Holds a reference to the bus for issuing commands to update network
97*1285115cSWilliam A. Kennington III     // config
98*1285115cSWilliam A. Kennington III     sdbusplus::bus::bus bus;
99*1285115cSWilliam A. Kennington III };
100*1285115cSWilliam A. Kennington III 
101*1285115cSWilliam A. Kennington III } // namespace net
102