Kernel/LibC: Implement basic ioctl for network addresses
This commit is contained in:
@@ -112,6 +112,8 @@ namespace Kernel
|
||||
BAN::ErrorOr<void> chown(uid_t, gid_t);
|
||||
bool has_data() const;
|
||||
|
||||
BAN::ErrorOr<long> ioctl(int request, void* arg);
|
||||
|
||||
protected:
|
||||
virtual void on_close_impl() {}
|
||||
|
||||
@@ -138,6 +140,8 @@ namespace Kernel
|
||||
virtual BAN::ErrorOr<void> chown_impl(uid_t, gid_t) { return BAN::Error::from_errno(ENOTSUP); }
|
||||
virtual bool has_data_impl() const { dwarnln("nonblock not supported"); return true; }
|
||||
|
||||
virtual BAN::ErrorOr<long> ioctl_impl(int request, void* arg) { return BAN::Error::from_errno(ENOTSUP); }
|
||||
|
||||
protected:
|
||||
mutable RecursivePrioritySpinLock m_lock;
|
||||
|
||||
|
||||
@@ -11,6 +11,9 @@ namespace Kernel
|
||||
|
||||
class NetworkInterface : public CharacterDevice
|
||||
{
|
||||
BAN_NON_COPYABLE(NetworkInterface);
|
||||
BAN_NON_MOVABLE(NetworkInterface);
|
||||
|
||||
public:
|
||||
enum class Type
|
||||
{
|
||||
@@ -22,7 +25,12 @@ namespace Kernel
|
||||
virtual ~NetworkInterface() {}
|
||||
|
||||
virtual BAN::MACAddress get_mac_address() const = 0;
|
||||
|
||||
BAN::IPv4Address get_ipv4_address() const { return m_ipv4_address; }
|
||||
void set_ipv4_address(BAN::IPv4Address new_address) { m_ipv4_address = new_address; }
|
||||
|
||||
BAN::IPv4Address get_netmask() const { return m_netmask; }
|
||||
void set_netmask(BAN::IPv4Address new_netmask) { m_netmask = new_netmask; }
|
||||
|
||||
virtual bool link_up() = 0;
|
||||
virtual int link_speed() = 0;
|
||||
@@ -42,6 +50,7 @@ namespace Kernel
|
||||
char m_name[10];
|
||||
|
||||
BAN::IPv4Address m_ipv4_address { 0 };
|
||||
BAN::IPv4Address m_netmask { 0 };
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -35,6 +35,8 @@ namespace Kernel
|
||||
virtual BAN::ErrorOr<ssize_t> sendto_impl(const sys_sendto_t*) override;
|
||||
virtual BAN::ErrorOr<ssize_t> recvfrom_impl(sys_recvfrom_t*) override;
|
||||
|
||||
virtual BAN::ErrorOr<long> ioctl_impl(int request, void* arg) override;
|
||||
|
||||
protected:
|
||||
NetworkInterface* m_interface = nullptr;
|
||||
uint16_t m_port = PORT_NONE;
|
||||
|
||||
@@ -117,6 +117,8 @@ namespace Kernel
|
||||
BAN::ErrorOr<long> sys_sendto(const sys_sendto_t*);
|
||||
BAN::ErrorOr<long> sys_recvfrom(sys_recvfrom_t*);
|
||||
|
||||
BAN::ErrorOr<long> sys_ioctl(int fildes, int request, void* arg);
|
||||
|
||||
BAN::ErrorOr<long> sys_pipe(int fildes[2]);
|
||||
BAN::ErrorOr<long> sys_dup(int fildes);
|
||||
BAN::ErrorOr<long> sys_dup2(int fildes, int fildes2);
|
||||
|
||||
Reference in New Issue
Block a user