#pragma once #include #include #include #include #include #include #include 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; 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& 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