From 2ee8b6c8b466c8cdce278a868239d4538e12b30d Mon Sep 17 00:00:00 2001
From: Bananymous <oskari.alaranta@bananymous.com>
Date: Mon, 2 Jun 2025 11:33:22 +0300
Subject: [PATCH] LibC: Add more definitions to netinet/in.h

These are non-standard but a lot of UNIX-likes have them networking
software attempts to use them
---
 userspace/libraries/LibC/include/netinet/in.h | 73 +++++++++++++++----
 1 file changed, 60 insertions(+), 13 deletions(-)

diff --git a/userspace/libraries/LibC/include/netinet/in.h b/userspace/libraries/LibC/include/netinet/in.h
index 38de5ece..b2539d4e 100644
--- a/userspace/libraries/LibC/include/netinet/in.h
+++ b/userspace/libraries/LibC/include/netinet/in.h
@@ -10,20 +10,54 @@ __BEGIN_DECLS
 #include <bits/inet_common.h>
 #include <sys/socket.h>
 
-#define IPPROTO_IP		1
-#define IPPROTO_IPV6	2
-#define IPPROTO_ICMP	3
-#define IPPROTO_RAW		4
-#define IPPROTO_TCP		5
-#define IPPROTO_UDP		6
+#define IPPROTO_IP   1
+#define IPPROTO_IPV6 2
+#define IPPROTO_ICMP 3
+#define IPPROTO_RAW  4
+#define IPPROTO_TCP  5
+#define IPPROTO_UDP  6
 
-#define IPV6_JOIN_GROUP		1
-#define IPV6_LEAVE_GROUP	2
-#define IPV6_MULTICAST_HOPS	3
-#define IPV6_MULTICAST_IF	4
-#define IPV6_MULTICAST_LOOP	5
-#define IPV6_UNICAST_HOPS	6
-#define IPV6_V6ONLY			7
+enum
+{
+	IP_ADD_MEMBERSHIP,
+#define IP_ADD_MEMBERSHIP IP_ADD_MEMBERSHIP
+	IP_ADD_SOURCE_MEMBERSHIP,
+#define IP_ADD_SOURCE_MEMBERSHIP IP_ADD_SOURCE_MEMBERSHIP
+	IP_DROP_MEMBERSHIP,
+#define IP_DROP_MEMBERSHIP IP_DROP_MEMBERSHIP
+	IP_DROP_SOURCE_MEMBERSHIP,
+#define IP_DROP_SOURCE_MEMBERSHIP IP_DROP_SOURCE_MEMBERSHIP
+	IP_MULTICAST_IF,
+#define IP_MULTICAST_IF IP_MULTICAST_IF
+	IP_MULTICAST_LOOP,
+#define IP_MULTICAST_LOOP IP_MULTICAST_LOOP
+	IP_MULTICAST_TTL,
+#define IP_MULTICAST_TTL IP_MULTICAST_TTL
+	IP_TTL,
+#define IP_TTL IP_TTL
+};
+
+enum
+{
+	IPV6_ADD_MEMBERSHIP,
+#define IPV6_ADD_MEMBERSHIP IPV6_ADD_MEMBERSHIP
+	IPV6_DROP_MEMBERSHIP,
+#define IPV6_DROP_MEMBERSHIP IPV6_DROP_MEMBERSHIP
+	IPV6_JOIN_GROUP,
+#define IPV6_JOIN_GROUP IPV6_JOIN_GROUP
+	IPV6_LEAVE_GROUP,
+#define IPV6_LEAVE_GROUP IPV6_LEAVE_GROUP
+	IPV6_MULTICAST_HOPS,
+#define IPV6_MULTICAST_HOPS IPV6_MULTICAST_HOPS
+	IPV6_MULTICAST_IF,
+#define IPV6_MULTICAST_IF IPV6_MULTICAST_IF
+	IPV6_MULTICAST_LOOP,
+#define IPV6_MULTICAST_LOOP IPV6_MULTICAST_LOOP
+	IPV6_UNICAST_HOPS,
+#define IPV6_UNICAST_HOPS IPV6_UNICAST_HOPS
+	IPV6_V6ONLY,
+#define IPV6_V6ONLY IPV6_V6ONLY
+};
 
 #define INADDR_ANY			0
 #define INADDR_NONE			0xFFFFFFFF
@@ -78,6 +112,19 @@ struct ipv6_mreq
 	unsigned		ipv6mr_interface;	/* Interface index. */
 };
 
+struct ip_mreq
+{
+	struct in_addr imr_multiaddr; /* IP multicast group address. */
+	struct in_addr imr_interface; /* IP address of local interface. */
+};
+
+struct ip_mreq_source
+{
+	struct in_addr imr_multiaddr;  /* IP multicast group address. */
+	struct in_addr imr_interface;  /* IP address of local interface. */
+	struct in_addr imr_sourceaddr; /* IP address of multicast source. */
+};
+
 __END_DECLS
 
 #endif