diff --git a/Kernel/API/POSIX/net/if.h b/Kernel/API/POSIX/net/if.h new file mode 100644 index 0000000000..fdc5896177 --- /dev/null +++ b/Kernel/API/POSIX/net/if.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2018-2021, Andreas Kling + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +struct ifconf { + int ifc_len; + union { + void* ifc_buf; + struct ifreq* ifc_req; + }; +}; + +struct ifreq { +#define IFNAMSIZ 16 + char ifr_name[IFNAMSIZ]; + union { + struct sockaddr ifru_addr; + struct sockaddr ifru_dstaddr; + struct sockaddr ifru_broadaddr; + struct sockaddr ifru_netmask; + struct sockaddr ifru_hwaddr; + short ifru_flags; + int ifru_metric; + int64_t ifru_vnetid; + uint64_t ifru_media; + void* ifru_data; + unsigned int ifru_index; + } ifr_ifru; + +#define ifr_addr ifr_ifru.ifru_addr // address +#define ifr_dstaddr ifr_ifru.ifru_dstaddr // other end of p-to-p link +#define ifr_broadaddr ifr_ifru.ifru_broadaddr // broadcast address +#define ifr_netmask ifr_ifru.ifru_netmask // network mask +#define ifr_flags ifr_ifru.ifru_flags // flags +#define ifr_metric ifr_ifru.ifru_metric // metric +#define ifr_mtu ifr_ifru.ifru_metric // mtu (overload) +#define ifr_hardmtu ifr_ifru.ifru_metric // hardmtu (overload) +#define ifr_media ifr_ifru.ifru_media // media options +#define ifr_rdomainid ifr_ifru.ifru_metric // VRF instance (overload) +#define ifr_vnetid ifr_ifru.ifru_vnetid // Virtual Net Id +#define ifr_ttl ifr_ifru.ifru_metric // tunnel TTL (overload) +#define ifr_data ifr_ifru.ifru_data // for use by interface +#define ifr_index ifr_ifru.ifru_index // interface index +#define ifr_llprio ifr_ifru.ifru_metric // link layer priority +#define ifr_hwaddr ifr_ifru.ifru_hwaddr // MAC address +}; + +#ifdef __cplusplus +} +#endif diff --git a/Kernel/API/POSIX/net/if_arp.h b/Kernel/API/POSIX/net/if_arp.h new file mode 100644 index 0000000000..ff5d08af73 --- /dev/null +++ b/Kernel/API/POSIX/net/if_arp.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2018-2021, Andreas Kling + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +struct arpreq { + struct sockaddr arp_pa; /* protocol address */ + struct sockaddr arp_ha; /* hardware address */ + struct sockaddr arp_netmask; /* netmask of protocol address */ + int arp_flags; /* flags */ + char arp_dev[16]; +}; + +#ifdef __cplusplus +} +#endif diff --git a/Kernel/API/POSIX/net/route.h b/Kernel/API/POSIX/net/route.h new file mode 100644 index 0000000000..0073e7e892 --- /dev/null +++ b/Kernel/API/POSIX/net/route.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2020, Marios Prokopakis + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct rtentry { + struct sockaddr rt_gateway; /* the gateway address */ + struct sockaddr rt_genmask; /* the target network mask */ + unsigned short int rt_flags; + char* rt_dev; + /* FIXME: complete the struct */ +}; + +#define RTF_UP 0x1 /* do not delete the route */ +#define RTF_GATEWAY 0x2 /* the route is a gateway and not an end host */ + +#ifdef __cplusplus +} +#endif diff --git a/Kernel/UnixTypes.h b/Kernel/UnixTypes.h index 414e08296a..70178bdbff 100644 --- a/Kernel/UnixTypes.h +++ b/Kernel/UnixTypes.h @@ -10,6 +10,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -163,63 +166,9 @@ struct sched_param { int sched_priority; }; -struct ifreq { -#define IFNAMSIZ 16 - char ifr_name[IFNAMSIZ]; - union { - struct sockaddr ifru_addr; - struct sockaddr ifru_dstaddr; - struct sockaddr ifru_broadaddr; - struct sockaddr ifru_netmask; - struct sockaddr ifru_hwaddr; - short ifru_flags; - int ifru_metric; - int64_t ifru_vnetid; - uint64_t ifru_media; - void* ifru_data; - unsigned int ifru_index; - } ifr_ifru; - -#define ifr_addr ifr_ifru.ifru_addr // address -#define ifr_dstaddr ifr_ifru.ifru_dstaddr // other end of p-to-p link -#define ifr_broadaddr ifr_ifru.ifru_broadaddr // broadcast address -#define ifr_netmask ifr_ifru.ifru_netmask // network mask -#define ifr_flags ifr_ifru.ifru_flags // flags -#define ifr_metric ifr_ifru.ifru_metric // metric -#define ifr_mtu ifr_ifru.ifru_metric // mtu (overload) -#define ifr_hardmtu ifr_ifru.ifru_metric // hardmtu (overload) -#define ifr_media ifr_ifru.ifru_media // media options -#define ifr_rdomainid ifr_ifru.ifru_metric // VRF instance (overload) -#define ifr_vnetid ifr_ifru.ifru_vnetid // Virtual Net Id -#define ifr_ttl ifr_ifru.ifru_metric // tunnel TTL (overload) -#define ifr_data ifr_ifru.ifru_data // for use by interface -#define ifr_index ifr_ifru.ifru_index // interface index -#define ifr_llprio ifr_ifru.ifru_metric // link layer priority -#define ifr_hwaddr ifr_ifru.ifru_hwaddr // MAC address -}; - -struct rtentry { - struct sockaddr rt_gateway; /* the gateway address */ - struct sockaddr rt_genmask; /* the target network mask */ - unsigned short int rt_flags; - char* rt_dev; - /* FIXME: complete the struct */ -}; - -#define RTF_UP 0x1 /* do not delete the route */ -#define RTF_GATEWAY 0x2 /* the route is a gateway and not an end host */ - #define AT_FDCWD -100 #define AT_SYMLINK_NOFOLLOW 0x100 -struct arpreq { - struct sockaddr arp_pa; /* protocol address */ - struct sockaddr arp_ha; /* hardware address */ - struct sockaddr arp_netmask; /* netmask of protocol address */ - int arp_flags; /* flags */ - char arp_dev[16]; -}; - #define PURGE_ALL_VOLATILE 0x1 #define PURGE_ALL_CLEAN_INODE 0x2 diff --git a/Userland/Libraries/LibC/net/if.h b/Userland/Libraries/LibC/net/if.h index e8d1e69f14..ff32ea69fe 100644 --- a/Userland/Libraries/LibC/net/if.h +++ b/Userland/Libraries/LibC/net/if.h @@ -1,60 +1,16 @@ /* - * Copyright (c) 2018-2020, Andreas Kling + * Copyright (c) 2018-2021, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once -#include -#include +#include __BEGIN_DECLS -struct ifreq { -#define IFNAMSIZ 16 - char ifr_name[IFNAMSIZ]; - union { - struct sockaddr ifru_addr; - struct sockaddr ifru_dstaddr; - struct sockaddr ifru_broadaddr; - struct sockaddr ifru_netmask; - struct sockaddr ifru_hwaddr; - short ifru_flags; - int ifru_metric; - int64_t ifru_vnetid; - uint64_t ifru_media; - void* ifru_data; - unsigned int ifru_index; - } ifr_ifru; - -#define ifr_addr ifr_ifru.ifru_addr // address -#define ifr_dstaddr ifr_ifru.ifru_dstaddr // other end of p-to-p link -#define ifr_broadaddr ifr_ifru.ifru_broadaddr // broadcast address -#define ifr_netmask ifr_ifru.ifru_netmask // network mask -#define ifr_flags ifr_ifru.ifru_flags // flags -#define ifr_metric ifr_ifru.ifru_metric // metric -#define ifr_mtu ifr_ifru.ifru_metric // mtu (overload) -#define ifr_hardmtu ifr_ifru.ifru_metric // hardmtu (overload) -#define ifr_media ifr_ifru.ifru_media // media options -#define ifr_rdomainid ifr_ifru.ifru_metric // VRF instance (overload) -#define ifr_vnetid ifr_ifru.ifru_vnetid // Virtual Net Id -#define ifr_ttl ifr_ifru.ifru_metric // tunnel TTL (overload) -#define ifr_data ifr_ifru.ifru_data // for use by interface -#define ifr_index ifr_ifru.ifru_index // interface index -#define ifr_llprio ifr_ifru.ifru_metric // link layer priority -#define ifr_hwaddr ifr_ifru.ifru_hwaddr // MAC address -}; - -struct ifconf { - int ifc_len; - union { - void* ifc_buf; - struct ifreq* ifc_req; - }; -}; - -unsigned int if_nametoindex(const char* ifname); +unsigned int if_nametoindex(char const* ifname); char* if_indextoname(unsigned int ifindex, char* ifname); __END_DECLS diff --git a/Userland/Libraries/LibC/net/if_arp.h b/Userland/Libraries/LibC/net/if_arp.h new file mode 100644 index 0000000000..8cfd5037f0 --- /dev/null +++ b/Userland/Libraries/LibC/net/if_arp.h @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2018-2021, Andreas Kling + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include diff --git a/Userland/Libraries/LibC/net/route.h b/Userland/Libraries/LibC/net/route.h index aa82d81c92..cc6c0faa3b 100644 --- a/Userland/Libraries/LibC/net/route.h +++ b/Userland/Libraries/LibC/net/route.h @@ -6,23 +6,4 @@ #pragma once -#include - -struct rtentry { - struct sockaddr rt_gateway; /* the gateway address */ - struct sockaddr rt_genmask; /* the target network mask */ - unsigned short int rt_flags; - char* rt_dev; - /* FIXME: complete the struct */ -}; - -#define RTF_UP 0x1 /* do not delete the route */ -#define RTF_GATEWAY 0x2 /* the route is a gateway and not an end host */ - -struct arpreq { - struct sockaddr arp_pa; /* protocol address */ - struct sockaddr arp_ha; /* hardware address */ - struct sockaddr arp_netmask; /* netmask of protocol address */ - int arp_flags; /* flags */ - char arp_dev[16]; -}; +#include diff --git a/Userland/Utilities/arp.cpp b/Userland/Utilities/arp.cpp index 015f1853d4..970174c090 100644 --- a/Userland/Utilities/arp.cpp +++ b/Userland/Utilities/arp.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include