| #pragma once |
| |
| #include <asm/types.h> |
| #include <linux/netlink.h> |
| #include <sys/socket.h> |
| |
| #include <iostream> |
| #include <list> |
| #include <map> |
| #include <string> |
| |
| namespace phosphor |
| { |
| namespace network |
| { |
| namespace route |
| { |
| constexpr auto BUFSIZE = 4096; |
| |
| struct Entry |
| { |
| // destination network |
| std::string destination; |
| // gateway for this network. |
| std::string gateway; |
| // interface for this route |
| std::string interface; |
| Entry(const std::string& dest, const std::string& gtw, |
| const std::string& intf) : |
| destination(dest), |
| gateway(gtw), interface(intf) |
| { |
| } |
| |
| bool operator==(const Entry& rhs) |
| { |
| return this->destination == rhs.destination && |
| this->gateway == rhs.gateway && this->interface == rhs.interface; |
| } |
| }; |
| |
| // Map of network address and the route entry |
| using Map = std::map<std::string, struct Entry>; |
| |
| class Table |
| { |
| public: |
| Table(); |
| ~Table() = default; |
| Table(const Table&) = default; |
| Table& operator=(const Table&) = default; |
| Table(Table&&) = default; |
| Table& operator=(Table&&) = default; |
| |
| /** |
| * @brief gets the list of routes. |
| * |
| * @returns list of routes. |
| */ |
| Map getRoutes(); |
| |
| /** |
| * @brief gets the default v4 gateway. |
| * |
| * @returns the default v4 gateway. |
| */ |
| std::string getDefaultGateway() const |
| { |
| return defaultGateway; |
| }; |
| |
| /** |
| * @brief gets the default v6 gateway. |
| * |
| * @returns the default v6 gateway. |
| */ |
| std::string getDefaultGateway6() const |
| { |
| return defaultGateway6; |
| }; |
| |
| /** |
| * @brief get the gateway for the network. |
| * @param[in] addressFamily - ip address family(AF_INET/AF_INET6) |
| * @param[in] ipaddress - ip address. |
| * @param[in] prefix - prefix length. |
| * @returns the gatway for the given network. |
| */ |
| std::string getGateway(int addressFamily, const std::string& ipaddress, |
| uint8_t prefix) const; |
| |
| private: |
| /** |
| * @brief read the routing data from the socket and fill the buffer. |
| * |
| * @param[in] bufPtr - unique pointer to confidentiality algorithm |
| * instance |
| */ |
| int readNetLinkSock(int sockFd, std::array<char, BUFSIZE>& buff); |
| /** |
| * @brief Parse the route and add it to the route list. |
| * |
| * @param[in] nlHdr - net link message header. |
| */ |
| void parseRoutes(const struct nlmsghdr* nlHdr); |
| |
| std::string defaultGateway; // default gateway |
| std::string defaultGateway6; // default gateway |
| Map routeList; // List of routes |
| }; |
| |
| } // namespace route |
| } // namespace network |
| } // namespace phosphor |