blob: e7bf47946e2a795e9b2ff92da92980b61880951f [file] [log] [blame]
Ratan Gupta4af36762017-04-20 19:12:29 +05301#pragma once
William A. Kennington IIIc2e5e0e2019-04-22 01:26:06 -07002#include "types.hpp"
Ratan Gupta4af36762017-04-20 19:12:29 +05303
William A. Kennington IIIc2e5e0e2019-04-22 01:26:06 -07004#include <linux/netlink.h>
5
6#include <cstdint>
7#include <optional>
Ratan Gupta4af36762017-04-20 19:12:29 +05308#include <sdbusplus/bus.hpp>
9#include <sdbusplus/server/object.hpp>
William A. Kennington IIIe25f8b42022-10-11 14:43:28 -070010#include <stdplus/zstring.hpp>
William A. Kennington IIIc2e5e0e2019-04-22 01:26:06 -070011#include <string_view>
12#include <vector>
Patrick Venture189d44e2018-07-09 12:30:59 -070013#include <xyz/openbmc_project/Network/IP/server.hpp>
14#include <xyz/openbmc_project/Object/Delete/server.hpp>
Ratan Gupta4af36762017-04-20 19:12:29 +053015
16namespace phosphor
17{
18namespace network
19{
20
Patrick Williamsc38b0712022-07-22 19:26:54 -050021using IPIfaces = sdbusplus::server::object_t<
Gunnar Mills57d9c502018-09-14 14:42:34 -050022 sdbusplus::xyz::openbmc_project::Network::server::IP,
23 sdbusplus::xyz::openbmc_project::Object::server::Delete>;
Ratan Gupta4af36762017-04-20 19:12:29 +053024
25using IP = sdbusplus::xyz::openbmc_project::Network::server::IP;
26
27class EthernetInterface;
28
William A. Kennington IIIc2e5e0e2019-04-22 01:26:06 -070029/* @class AddressFilter
30 */
31struct AddressFilter
32{
33 unsigned interface = 0;
34 std::optional<uint8_t> scope;
35};
36
37/** @class AddressInfo
38 * @brief Information about a addresses from the kernel
39 */
40struct AddressInfo
41{
42 unsigned interface;
43 InAddrAny address;
44 uint8_t prefix;
45 uint8_t scope;
46 uint32_t flags;
47};
48
49/** @brief Returns a list of the current system neighbor table
50 */
51std::vector<AddressInfo> getCurrentAddresses(const AddressFilter& filter);
52
Ratan Gupta4af36762017-04-20 19:12:29 +053053/** @class IPAddress
54 * @brief OpenBMC IPAddress implementation.
55 * @details A concrete implementation for the
56 * xyz.openbmc_project.Network.IPProtocol
57 * xyz.openbmc_project.Network.IP Dbus interfaces.
58 */
59class IPAddress : public IPIfaces
60{
Gunnar Mills57d9c502018-09-14 14:42:34 -050061 public:
62 IPAddress() = delete;
63 IPAddress(const IPAddress&) = delete;
64 IPAddress& operator=(const IPAddress&) = delete;
65 IPAddress(IPAddress&&) = delete;
66 IPAddress& operator=(IPAddress&&) = delete;
67 virtual ~IPAddress() = default;
Ratan Gupta4af36762017-04-20 19:12:29 +053068
Gunnar Mills57d9c502018-09-14 14:42:34 -050069 /** @brief Constructor to put object onto bus at a dbus path.
70 * @param[in] bus - Bus to attach to.
71 * @param[in] objPath - Path to attach at.
72 * @param[in] parent - Parent object.
73 * @param[in] type - ipaddress type(v4/v6).
74 * @param[in] ipAddress - ipadress.
75 * @param[in] origin - origin of ipaddress(dhcp/static/SLAAC/LinkLocal).
76 * @param[in] prefixLength - Length of prefix.
Gunnar Mills57d9c502018-09-14 14:42:34 -050077 */
William A. Kennington IIIe25f8b42022-10-11 14:43:28 -070078 IPAddress(sdbusplus::bus_t& bus, stdplus::const_zstring objPath,
Gunnar Mills57d9c502018-09-14 14:42:34 -050079 EthernetInterface& parent, IP::Protocol type,
William A. Kennington IIIe25f8b42022-10-11 14:43:28 -070080 std::string_view ipAddress, IP::AddressOrigin origin,
81 uint8_t prefixLength);
Ratan Gupta4af36762017-04-20 19:12:29 +053082
William A. Kennington III5e72d082022-09-01 13:10:17 -070083 std::string address(std::string ipAddress) override;
84 uint8_t prefixLength(uint8_t) override;
85 std::string gateway(std::string gateway) override;
86 IP::Protocol type(IP::Protocol type) override;
87 IP::AddressOrigin origin(IP::AddressOrigin origin) override;
88
Gunnar Mills57d9c502018-09-14 14:42:34 -050089 /** @brief Delete this d-bus object.
90 */
91 void delete_() override;
Ratan Gupta4af36762017-04-20 19:12:29 +053092
Ravi Teja2fd2f7d2019-06-06 03:27:55 -050093 using IP::address;
94 using IP::gateway;
95 using IP::origin;
96 using IP::prefixLength;
97 using IP::type;
98
Gunnar Mills57d9c502018-09-14 14:42:34 -050099 private:
100 /** @brief Parent Object. */
101 EthernetInterface& parent;
Ratan Gupta4af36762017-04-20 19:12:29 +0530102};
103
William A. Kennington IIIc2e5e0e2019-04-22 01:26:06 -0700104namespace detail
105{
106
107void parseAddress(const AddressFilter& filter, const nlmsghdr& hdr,
108 std::string_view msg, std::vector<AddressInfo>& addresses);
109
110} // namespace detail
Ratan Gupta4af36762017-04-20 19:12:29 +0530111} // namespace network
112} // namespace phosphor