blob: 32d54cf95a218464439d6a3c90fb57bfcb71f924 [file] [log] [blame]
William A. Kennington III2e09d272022-10-14 17:15:00 -07001#pragma once
2#include "types.hpp"
3
William A. Kennington IIIfd862be2022-10-09 18:40:55 -07004#include <net/ethernet.h>
William A. Kennington III2e09d272022-10-14 17:15:00 -07005
6#include <cstdint>
7#include <optional>
8#include <stdplus/zstring.hpp>
9#include <stdplus/zstring_view.hpp>
William A. Kennington IIIfd862be2022-10-09 18:40:55 -070010#include <string>
William A. Kennington III2e09d272022-10-14 17:15:00 -070011#include <string_view>
William A. Kennington IIIfd862be2022-10-09 18:40:55 -070012#include <vector>
13
14struct nlmsghdr;
William A. Kennington III2e09d272022-10-14 17:15:00 -070015
16namespace phosphor::network::system
17{
William A. Kennington III2e09d272022-10-14 17:15:00 -070018struct EthInfo
19{
20 bool autoneg;
21 uint16_t speed;
22};
23EthInfo getEthInfo(stdplus::zstring_view ifname);
24
25bool intfIsRunning(std::string_view ifname);
26
William A. Kennington III2e09d272022-10-14 17:15:00 -070027std::optional<unsigned> getMTU(stdplus::zstring_view ifname);
28
29void setMTU(std::string_view ifname, unsigned mtu);
30
31void setNICUp(std::string_view ifname, bool up);
32
William A. Kennington IIIfd862be2022-10-09 18:40:55 -070033/** @class InterfaceInfo
34 * @brief Information about interfaces from the kernel
35 */
36struct InterfaceInfo
37{
38 unsigned idx;
39 unsigned flags;
40 std::optional<std::string> name = std::nullopt;
41 std::optional<ether_addr> mac = std::nullopt;
42 std::optional<unsigned> mtu = std::nullopt;
William A. Kennington III09f3a4a2022-10-25 02:59:16 -070043 std::optional<unsigned> parent_idx = std::nullopt;
44 std::optional<std::string> kind = std::nullopt;
45 std::optional<uint16_t> vlan_id = std::nullopt;
William A. Kennington IIIfd862be2022-10-09 18:40:55 -070046
47 constexpr bool operator==(const InterfaceInfo& rhs) const noexcept
48 {
49 return idx == rhs.idx && flags == rhs.flags && name == rhs.name &&
William A. Kennington III09f3a4a2022-10-25 02:59:16 -070050 mac == rhs.mac && mtu == rhs.mtu &&
51 parent_idx == rhs.parent_idx && kind == rhs.kind &&
52 vlan_id == rhs.vlan_id;
William A. Kennington IIIfd862be2022-10-09 18:40:55 -070053 }
54};
55
56namespace detail
57{
58InterfaceInfo parseInterface(const nlmsghdr& hdr, std::string_view msg);
59bool validateNewInterface(const InterfaceInfo& info);
60} // namespace detail
61
William A. Kennington III2e09d272022-10-14 17:15:00 -070062/** @brief Get all the interfaces from the system.
63 * @returns list of interface names.
64 */
William A. Kennington IIIfd862be2022-10-09 18:40:55 -070065std::vector<InterfaceInfo> getInterfaces();
William A. Kennington III2e09d272022-10-14 17:15:00 -070066
67} // namespace phosphor::network::system