#pragma once #include #include #include #include #include #include namespace Kernel { class NetworkManager { BAN_NON_COPYABLE(NetworkManager); BAN_NON_MOVABLE(NetworkManager); public: static BAN::ErrorOr initialize(); static NetworkManager& get(); BAN::ErrorOr add_interface(PCI::Device& pci_device); BAN::Vector>& interfaces() { return m_interfaces; } BAN::ErrorOr> create_socket(Socket::Domain, Socket::Type, mode_t, uid_t, gid_t); BAN::ErrorOr connect_sockets(Socket::Domain, BAN::RefPtr, BAN::RefPtr); void on_receive(NetworkInterface&, BAN::ConstByteSpan, uint32_t validated_cksums); private: NetworkManager() {} BAN::ErrorOr add_interface(BAN::RefPtr); private: BAN::UniqPtr m_ipv4_layer; BAN::Vector> m_interfaces; friend class BAN::UniqPtr; }; }