xref: /openbmc/phosphor-networkd/src/types.hpp (revision f5151aa5)
11bbe3d1eSWilliam A. Kennington III #pragma once
2*f5151aa5SWilliam A. Kennington III #include <function2/function2.hpp>
3b7d6a1a7SWilliam A. Kennington III #include <stdplus/net/addr/ether.hpp>
49b2a20d3SWilliam A. Kennington III #include <stdplus/net/addr/ip.hpp>
59b2a20d3SWilliam A. Kennington III #include <stdplus/net/addr/subnet.hpp>
6b7d6a1a7SWilliam A. Kennington III 
7bb0eaccbSWilliam A. Kennington III #include <array>
8de70ccf6SWilliam A. Kennington III #include <optional>
91bbe3d1eSWilliam A. Kennington III #include <string>
10dd9ef815SWilliam A. Kennington III #include <unordered_map>
111bbe3d1eSWilliam A. Kennington III 
129b2a20d3SWilliam A. Kennington III namespace phosphor::network
13454a0deeSWilliam A. Kennington III {
141bbe3d1eSWilliam A. Kennington III 
15*f5151aa5SWilliam A. Kennington III class DelayedExecutor
16*f5151aa5SWilliam A. Kennington III {
17*f5151aa5SWilliam A. Kennington III   public:
18*f5151aa5SWilliam A. Kennington III     virtual ~DelayedExecutor() = default;
19*f5151aa5SWilliam A. Kennington III 
20*f5151aa5SWilliam A. Kennington III     virtual void schedule() = 0;
21*f5151aa5SWilliam A. Kennington III     virtual void setCallback(fu2::unique_function<void()>&& cb) = 0;
22*f5151aa5SWilliam A. Kennington III };
23*f5151aa5SWilliam A. Kennington III 
24454a0deeSWilliam A. Kennington III /** @class InterfaceInfo
25454a0deeSWilliam A. Kennington III  *  @brief Information about interfaces from the kernel
26454a0deeSWilliam A. Kennington III  */
27454a0deeSWilliam A. Kennington III struct InterfaceInfo
28454a0deeSWilliam A. Kennington III {
299c441fd4SWilliam A. Kennington III     unsigned short type;
30454a0deeSWilliam A. Kennington III     unsigned idx;
31454a0deeSWilliam A. Kennington III     unsigned flags;
32454a0deeSWilliam A. Kennington III     std::optional<std::string> name = std::nullopt;
33b7d6a1a7SWilliam A. Kennington III     std::optional<stdplus::EtherAddr> mac = std::nullopt;
34454a0deeSWilliam A. Kennington III     std::optional<unsigned> mtu = std::nullopt;
35454a0deeSWilliam A. Kennington III     std::optional<unsigned> parent_idx = std::nullopt;
36454a0deeSWilliam A. Kennington III     std::optional<std::string> kind = std::nullopt;
37454a0deeSWilliam A. Kennington III     std::optional<uint16_t> vlan_id = std::nullopt;
38454a0deeSWilliam A. Kennington III 
operator ==phosphor::network::InterfaceInfo39454a0deeSWilliam A. Kennington III     constexpr bool operator==(const InterfaceInfo& rhs) const noexcept
40454a0deeSWilliam A. Kennington III     {
41454a0deeSWilliam A. Kennington III         return idx == rhs.idx && flags == rhs.flags && name == rhs.name &&
42454a0deeSWilliam A. Kennington III                mac == rhs.mac && mtu == rhs.mtu &&
43454a0deeSWilliam A. Kennington III                parent_idx == rhs.parent_idx && kind == rhs.kind &&
44454a0deeSWilliam A. Kennington III                vlan_id == rhs.vlan_id;
45454a0deeSWilliam A. Kennington III     }
46454a0deeSWilliam A. Kennington III };
47454a0deeSWilliam A. Kennington III 
486a92363eSWilliam A. Kennington III /** @class AddressInfo
496a92363eSWilliam A. Kennington III  *  @brief Information about a addresses from the kernel
506a92363eSWilliam A. Kennington III  */
516a92363eSWilliam A. Kennington III struct AddressInfo
526a92363eSWilliam A. Kennington III {
536a92363eSWilliam A. Kennington III     unsigned ifidx;
549b2a20d3SWilliam A. Kennington III     stdplus::SubnetAny ifaddr;
556a92363eSWilliam A. Kennington III     uint8_t scope;
566a92363eSWilliam A. Kennington III     uint32_t flags;
57454a0deeSWilliam A. Kennington III 
operator ==phosphor::network::AddressInfo58454a0deeSWilliam A. Kennington III     constexpr bool operator==(const AddressInfo& rhs) const noexcept
59454a0deeSWilliam A. Kennington III     {
60454a0deeSWilliam A. Kennington III         return ifidx == rhs.ifidx && ifaddr == rhs.ifaddr &&
61454a0deeSWilliam A. Kennington III                scope == rhs.scope && flags == rhs.flags;
62454a0deeSWilliam A. Kennington III     }
636a92363eSWilliam A. Kennington III };
646a92363eSWilliam A. Kennington III 
65a8426902SWilliam A. Kennington III /** @class NeighborInfo
66a8426902SWilliam A. Kennington III  *  @brief Information about a neighbor from the kernel
67a8426902SWilliam A. Kennington III  */
68a8426902SWilliam A. Kennington III struct NeighborInfo
69a8426902SWilliam A. Kennington III {
70a8426902SWilliam A. Kennington III     unsigned ifidx;
71454a0deeSWilliam A. Kennington III     uint16_t state;
729b2a20d3SWilliam A. Kennington III     std::optional<stdplus::InAnyAddr> addr;
73b7d6a1a7SWilliam A. Kennington III     std::optional<stdplus::EtherAddr> mac;
74454a0deeSWilliam A. Kennington III 
operator ==phosphor::network::NeighborInfo75454a0deeSWilliam A. Kennington III     constexpr bool operator==(const NeighborInfo& rhs) const noexcept
76454a0deeSWilliam A. Kennington III     {
77454a0deeSWilliam A. Kennington III         return ifidx == rhs.ifidx && state == rhs.state && addr == rhs.addr &&
78454a0deeSWilliam A. Kennington III                mac == rhs.mac;
79454a0deeSWilliam A. Kennington III     }
80a8426902SWilliam A. Kennington III };
81a8426902SWilliam A. Kennington III 
8213d665caSWilliam A. Kennington III /** @brief Contains all of the object information about the interface */
8313d665caSWilliam A. Kennington III struct AllIntfInfo
8413d665caSWilliam A. Kennington III {
8513d665caSWilliam A. Kennington III     InterfaceInfo intf;
869b2a20d3SWilliam A. Kennington III     std::optional<stdplus::In4Addr> defgw4 = std::nullopt;
879b2a20d3SWilliam A. Kennington III     std::optional<stdplus::In6Addr> defgw6 = std::nullopt;
889b2a20d3SWilliam A. Kennington III     std::unordered_map<stdplus::SubnetAny, AddressInfo> addrs = {};
899b2a20d3SWilliam A. Kennington III     std::unordered_map<stdplus::InAnyAddr, NeighborInfo> staticNeighs = {};
9013d665caSWilliam A. Kennington III };
9113d665caSWilliam A. Kennington III 
9213d665caSWilliam A. Kennington III } // namespace phosphor::network
93