blob: 3bbb021ce1fab9b8dfb2bdbb9decb4e46b10657f [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;
43
44 constexpr bool operator==(const InterfaceInfo& rhs) const noexcept
45 {
46 return idx == rhs.idx && flags == rhs.flags && name == rhs.name &&
47 mac == rhs.mac && mtu == rhs.mtu;
48 }
49};
50
51namespace detail
52{
53InterfaceInfo parseInterface(const nlmsghdr& hdr, std::string_view msg);
54bool validateNewInterface(const InterfaceInfo& info);
55} // namespace detail
56
William A. Kennington III2e09d272022-10-14 17:15:00 -070057/** @brief Get all the interfaces from the system.
58 * @returns list of interface names.
59 */
William A. Kennington IIIfd862be2022-10-09 18:40:55 -070060std::vector<InterfaceInfo> getInterfaces();
William A. Kennington III2e09d272022-10-14 17:15:00 -070061
62} // namespace phosphor::network::system