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