diff --git a/Userspace/libc/include/netinet/in.h b/Userspace/libc/include/netinet/in.h
new file mode 100644
index 00000000..b2b0d63f
--- /dev/null
+++ b/Userspace/libc/include/netinet/in.h
@@ -0,0 +1,147 @@
+/*
+ This file is part of Fennix C Library.
+
+ Fennix C Library is free software: you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ Fennix C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Fennix C Library. If not, see .
+*/
+
+#ifndef NETINET_IN_H
+#define NETINET_IN_H
+
+#include
+#include
+
+typedef uint16_t in_port_t;
+typedef uint32_t in_addr_t;
+
+struct in_addr
+{
+ in_addr_t s_addr;
+};
+
+struct sockaddr_in
+{
+ sa_family_t sin_family;
+ in_port_t sin_port;
+ struct in_addr sin_addr;
+};
+
+struct in6_addr
+{
+ uint8_t s6_addr[16];
+};
+
+struct sockaddr_in6
+{
+ sa_family_t sin6_family;
+ in_port_t sin6_port;
+ uint32_t sin6_flowinfo;
+ struct in6_addr sin6_addr;
+ uint32_t sin6_scope_id;
+};
+
+extern const struct in6_addr in6addr_any;
+extern const struct in6_addr in6addr_loopback;
+
+#define IN6ADDR_ANY_INIT \
+ { \
+ {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}} \
+ }
+
+#define IN6ADDR_LOOPBACK_INIT \
+ { \
+ {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}} \
+ }
+
+struct ipv6_mreq
+{
+ struct in6_addr ipv6mr_multiaddr;
+ unsigned ipv6mr_interface;
+};
+
+#define IPPROTO_IP 0
+#define IPPROTO_IPV6 41
+#define IPPROTO_ICMP 1
+#define IPPROTO_RAW 255
+#define IPPROTO_TCP 6
+#define IPPROTO_UDP 17
+
+#define INADDR_ANY ((in_addr_t)0x00000000)
+#define INADDR_BROADCAST ((in_addr_t)0xffffffff)
+
+#define INET_ADDRSTRLEN 16
+#define INET6_ADDRSTRLEN 46
+
+#define IPV6_JOIN_GROUP 20
+#define IPV6_LEAVE_GROUP 21
+#define IPV6_MULTICAST_HOPS 18
+#define IPV6_MULTICAST_IF 17
+#define IPV6_MULTICAST_LOOP 19
+#define IPV6_UNICAST_HOPS 16
+#define IPV6_V6ONLY 26
+
+#define IN6_IS_ADDR_UNSPECIFIED(a) \
+ (((const uint32_t *)(a))[0] == 0 && \
+ ((const uint32_t *)(a))[1] == 0 && \
+ ((const uint32_t *)(a))[2] == 0 && \
+ ((const uint32_t *)(a))[3] == 0)
+
+#define IN6_IS_ADDR_LOOPBACK(a) \
+ (((const uint32_t *)(a))[0] == 0 && \
+ ((const uint32_t *)(a))[1] == 0 && \
+ ((const uint32_t *)(a))[2] == 0 && \
+ ((const uint32_t *)(a))[3] == htonl(1))
+
+#define IN6_IS_ADDR_MULTICAST(a) \
+ (((const uint8_t *)(a))[0] == 0xff)
+
+#define IN6_IS_ADDR_LINKLOCAL(a) \
+ ((((const uint8_t *)(a))[0] == 0xfe) && \
+ (((const uint8_t *)(a))[1] == 0x80))
+
+#define IN6_IS_ADDR_SITELOCAL(a) \
+ ((((const uint8_t *)(a))[0] == 0xfe) && \
+ (((const uint8_t *)(a))[1] == 0xc0))
+
+#define IN6_IS_ADDR_V4MAPPED(a) \
+ ((((const uint32_t *)(a))[0] == 0) && \
+ (((const uint32_t *)(a))[1] == 0) && \
+ (((const uint32_t *)(a))[2] == htonl(0xffff)))
+
+#define IN6_IS_ADDR_V4COMPAT(a) \
+ ((((const uint32_t *)(a))[0] == 0) && \
+ (((const uint32_t *)(a))[1] == 0) && \
+ (((const uint32_t *)(a))[2] == 0) && \
+ (ntohl(((const uint32_t *)(a))[3]) > 1))
+
+#define IN6_IS_ADDR_MC_NODELOCAL(a) \
+ (IN6_IS_ADDR_MULTICAST(a) && \
+ ((((const uint8_t *)(a))[1] & 0xf) == 1))
+
+#define IN6_IS_ADDR_MC_LINKLOCAL(a) \
+ (IN6_IS_ADDR_MULTICAST(a) && \
+ ((((const uint8_t *)(a))[1] & 0xf) == 2))
+
+#define IN6_IS_ADDR_MC_SITELOCAL(a) \
+ (IN6_IS_ADDR_MULTICAST(a) && \
+ ((((const uint8_t *)(a))[1] & 0xf) == 5))
+
+#define IN6_IS_ADDR_MC_ORGLOCAL(a) \
+ (IN6_IS_ADDR_MULTICAST(a) && \
+ ((((const uint8_t *)(a))[1] & 0xf) == 8))
+
+#define IN6_IS_ADDR_MC_GLOBAL(a) \
+ (IN6_IS_ADDR_MULTICAST(a) && \
+ ((((const uint8_t *)(a))[1] & 0xf) == 0xe))
+
+#endif // NETINET_IN_H