#pragma once
#include <sdeventplus/event.hpp>
#include <sdeventplus/source/io.hpp>
#include <stdplus/fd/managed.hpp>

namespace phosphor
{
namespace network
{
class Manager;
namespace netlink
{

constexpr auto BUFSIZE = 4096;

/** General rtnetlink server which waits for the POLLIN event
    and calls the  call back once it gets the event.
    Usage would be create the server with the  call back
    and call the run method.
 */
class Server
{
  public:
    /** @brief Constructor
     *
     *  @details Sets up the server to handle incoming RTNETLINK events
     *
     *  @param[in] eventPtr - Unique ptr reference to sd_event.
     *  @param[in] manager  - The network manager that receives updates
     */
    Server(sdeventplus::Event& event, Manager& manager);

    /** @brief Gets the socket associated with this netlink server */
    inline stdplus::Fd& getSock()
    {
        return sock;
    }

  private:
    stdplus::ManagedFd sock;
    sdeventplus::source::IO io;
};

} // namespace netlink
} // namespace network
} // namespace phosphor
