Kernel/LibC: Implement basic socket binding

This commit is contained in:
2024-02-02 01:31:58 +02:00
parent cf28ecd5a6
commit ab150b458a
13 changed files with 119 additions and 7 deletions

View File

@@ -35,6 +35,8 @@ namespace Kernel
const dev_t m_rdev;
char m_name[10];
uint32_t m_ipv4_address {};
};
}

View File

@@ -6,6 +6,8 @@
#include <kernel/Networking/NetworkSocket.h>
#include <kernel/PCI.h>
#include <netinet/in.h>
namespace Kernel
{
@@ -24,7 +26,9 @@ namespace Kernel
static NetworkManager& get();
BAN::ErrorOr<void> add_interface(PCI::Device& pci_device);
BAN::ErrorOr<void> bind_socket(int port, BAN::RefPtr<NetworkSocket>);
void unbind_socket(uint16_t port, BAN::RefPtr<NetworkSocket>);
BAN::ErrorOr<void> bind_socket(uint16_t port, BAN::RefPtr<NetworkSocket>);
BAN::ErrorOr<BAN::RefPtr<NetworkSocket>> create_socket(SocketType, mode_t, uid_t, gid_t);
@@ -33,7 +37,7 @@ namespace Kernel
private:
BAN::Vector<BAN::RefPtr<NetworkInterface>> m_interfaces;
BAN::HashMap<int, BAN::RefPtr<NetworkSocket>> m_bound_sockets;
BAN::HashMap<int, BAN::WeakPtr<NetworkSocket>> m_bound_sockets;
};
}

View File

@@ -1,21 +1,28 @@
#pragma once
#include <BAN/WeakPtr.h>
#include <kernel/FS/TmpFS/Inode.h>
#include <kernel/Networking/NetworkInterface.h>
namespace Kernel
{
class NetworkSocket : public TmpInode
class NetworkSocket : public TmpInode, public BAN::Weakable<NetworkSocket>
{
public:
void bind_interface(NetworkInterface*);
void bind_interface_and_port(NetworkInterface*, uint16_t port);
~NetworkSocket();
protected:
NetworkSocket(mode_t mode, uid_t uid, gid_t gid);
virtual void on_close_impl() override;
virtual BAN::ErrorOr<void> bind_impl(const sockaddr* address, socklen_t address_len) override;
protected:
NetworkInterface* m_interface = nullptr;
NetworkInterface* m_interface = nullptr;
uint16_t m_port = 0;
};
}