xref: /openbmc/phosphor-networkd/src/types.hpp (revision 9b2a20d3)
11bbe3d1eSWilliam A. Kennington III #pragma once
2b7d6a1a7SWilliam A. Kennington III #include <stdplus/net/addr/ether.hpp>
3*9b2a20d3SWilliam A. Kennington III #include <stdplus/net/addr/ip.hpp>
4*9b2a20d3SWilliam A. Kennington III #include <stdplus/net/addr/subnet.hpp>
5b7d6a1a7SWilliam A. Kennington III 
6bb0eaccbSWilliam A. Kennington III #include <array>
7de70ccf6SWilliam A. Kennington III #include <optional>
81bbe3d1eSWilliam A. Kennington III #include <string>
9dd9ef815SWilliam A. Kennington III #include <unordered_map>
101bbe3d1eSWilliam A. Kennington III 
11*9b2a20d3SWilliam A. Kennington III namespace phosphor::network
12454a0deeSWilliam A. Kennington III {
131bbe3d1eSWilliam A. Kennington III 
14454a0deeSWilliam A. Kennington III /** @class InterfaceInfo
15454a0deeSWilliam A. Kennington III  *  @brief Information about interfaces from the kernel
16454a0deeSWilliam A. Kennington III  */
17454a0deeSWilliam A. Kennington III struct InterfaceInfo
18454a0deeSWilliam A. Kennington III {
199c441fd4SWilliam A. Kennington III     unsigned short type;
20454a0deeSWilliam A. Kennington III     unsigned idx;
21454a0deeSWilliam A. Kennington III     unsigned flags;
22454a0deeSWilliam A. Kennington III     std::optional<std::string> name = std::nullopt;
23b7d6a1a7SWilliam A. Kennington III     std::optional<stdplus::EtherAddr> mac = std::nullopt;
24454a0deeSWilliam A. Kennington III     std::optional<unsigned> mtu = std::nullopt;
25454a0deeSWilliam A. Kennington III     std::optional<unsigned> parent_idx = std::nullopt;
26454a0deeSWilliam A. Kennington III     std::optional<std::string> kind = std::nullopt;
27454a0deeSWilliam A. Kennington III     std::optional<uint16_t> vlan_id = std::nullopt;
28454a0deeSWilliam A. Kennington III 
29454a0deeSWilliam A. Kennington III     constexpr bool operator==(const InterfaceInfo& rhs) const noexcept
30454a0deeSWilliam A. Kennington III     {
31454a0deeSWilliam A. Kennington III         return idx == rhs.idx && flags == rhs.flags && name == rhs.name &&
32454a0deeSWilliam A. Kennington III                mac == rhs.mac && mtu == rhs.mtu &&
33454a0deeSWilliam A. Kennington III                parent_idx == rhs.parent_idx && kind == rhs.kind &&
34454a0deeSWilliam A. Kennington III                vlan_id == rhs.vlan_id;
35454a0deeSWilliam A. Kennington III     }
36454a0deeSWilliam A. Kennington III };
37454a0deeSWilliam A. Kennington III 
386a92363eSWilliam A. Kennington III /** @class AddressInfo
396a92363eSWilliam A. Kennington III  *  @brief Information about a addresses from the kernel
406a92363eSWilliam A. Kennington III  */
416a92363eSWilliam A. Kennington III struct AddressInfo
426a92363eSWilliam A. Kennington III {
436a92363eSWilliam A. Kennington III     unsigned ifidx;
44*9b2a20d3SWilliam A. Kennington III     stdplus::SubnetAny ifaddr;
456a92363eSWilliam A. Kennington III     uint8_t scope;
466a92363eSWilliam A. Kennington III     uint32_t flags;
47454a0deeSWilliam A. Kennington III 
48454a0deeSWilliam A. Kennington III     constexpr bool operator==(const AddressInfo& rhs) const noexcept
49454a0deeSWilliam A. Kennington III     {
50454a0deeSWilliam A. Kennington III         return ifidx == rhs.ifidx && ifaddr == rhs.ifaddr &&
51454a0deeSWilliam A. Kennington III                scope == rhs.scope && flags == rhs.flags;
52454a0deeSWilliam A. Kennington III     }
536a92363eSWilliam A. Kennington III };
546a92363eSWilliam A. Kennington III 
55a8426902SWilliam A. Kennington III /** @class NeighborInfo
56a8426902SWilliam A. Kennington III  *  @brief Information about a neighbor from the kernel
57a8426902SWilliam A. Kennington III  */
58a8426902SWilliam A. Kennington III struct NeighborInfo
59a8426902SWilliam A. Kennington III {
60a8426902SWilliam A. Kennington III     unsigned ifidx;
61454a0deeSWilliam A. Kennington III     uint16_t state;
62*9b2a20d3SWilliam A. Kennington III     std::optional<stdplus::InAnyAddr> addr;
63b7d6a1a7SWilliam A. Kennington III     std::optional<stdplus::EtherAddr> mac;
64454a0deeSWilliam A. Kennington III 
65454a0deeSWilliam A. Kennington III     constexpr bool operator==(const NeighborInfo& rhs) const noexcept
66454a0deeSWilliam A. Kennington III     {
67454a0deeSWilliam A. Kennington III         return ifidx == rhs.ifidx && state == rhs.state && addr == rhs.addr &&
68454a0deeSWilliam A. Kennington III                mac == rhs.mac;
69454a0deeSWilliam A. Kennington III     }
70a8426902SWilliam A. Kennington III };
71a8426902SWilliam A. Kennington III 
7213d665caSWilliam A. Kennington III /** @brief Contains all of the object information about the interface */
7313d665caSWilliam A. Kennington III struct AllIntfInfo
7413d665caSWilliam A. Kennington III {
7513d665caSWilliam A. Kennington III     InterfaceInfo intf;
76*9b2a20d3SWilliam A. Kennington III     std::optional<stdplus::In4Addr> defgw4 = std::nullopt;
77*9b2a20d3SWilliam A. Kennington III     std::optional<stdplus::In6Addr> defgw6 = std::nullopt;
78*9b2a20d3SWilliam A. Kennington III     std::unordered_map<stdplus::SubnetAny, AddressInfo> addrs = {};
79*9b2a20d3SWilliam A. Kennington III     std::unordered_map<stdplus::InAnyAddr, NeighborInfo> staticNeighs = {};
8013d665caSWilliam A. Kennington III };
8113d665caSWilliam A. Kennington III 
8213d665caSWilliam A. Kennington III } // namespace phosphor::network
83