add netinet/igmp.h and multicast groups to netinet/in.h
[musl] / include / netinet / in.h
index 62cbfa8..db96144 100644 (file)
@@ -5,15 +5,13 @@
 extern "C" {
 #endif
 
-#define __NEED_in_addr_t
-#define __NEED_in_port_t
-#define __NEED_sa_family_t
-#define __NEED_struct_in_addr
-#define __NEED_uint8_t
-#define __NEED_uint16_t
-#define __NEED_uint32_t
+#include <features.h>
+#include <inttypes.h>
+#include <sys/socket.h>
 
-#include <bits/alltypes.h>
+typedef uint16_t in_port_t;
+typedef uint32_t in_addr_t;
+struct in_addr { in_addr_t s_addr; };
 
 struct sockaddr_in
 {
@@ -55,6 +53,11 @@ struct ipv6_mreq
 #define INADDR_NONE       ((in_addr_t) 0xffffffff)
 #define INADDR_LOOPBACK   ((in_addr_t) 0x7f000001)
 
+#define INADDR_UNSPEC_GROUP     ((in_addr_t) 0xe0000000)
+#define INADDR_ALLHOSTS_GROUP   ((in_addr_t) 0xe0000001)
+#define INADDR_ALLRTRS_GROUP    ((in_addr_t) 0xe0000002)
+#define INADDR_MAX_LOCAL_GROUP  ((in_addr_t) 0xe00000ff)
+
 #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 } } }
 
@@ -71,6 +74,7 @@ uint32_t ntohl(uint32_t);
 uint16_t ntohs(uint16_t);
 
 #define IPPROTO_IP       0
+#define IPPROTO_HOPOPTS  0
 #define IPPROTO_ICMP     1
 #define IPPROTO_IGMP     2
 #define IPPROTO_IPIP     4
@@ -80,6 +84,7 @@ uint16_t ntohs(uint16_t);
 #define IPPROTO_UDP      17
 #define IPPROTO_IDP      22
 #define IPPROTO_TP       29
+#define IPPROTO_DCCP     33
 #define IPPROTO_IPV6     41
 #define IPPROTO_ROUTING  43
 #define IPPROTO_FRAGMENT 44
@@ -91,9 +96,13 @@ uint16_t ntohs(uint16_t);
 #define IPPROTO_NONE     59
 #define IPPROTO_DSTOPTS  60
 #define IPPROTO_MTP      92
+#define IPPROTO_BEETPH   94
 #define IPPROTO_ENCAP    98
 #define IPPROTO_PIM      103
 #define IPPROTO_COMP     108
+#define IPPROTO_SCTP     132
+#define IPPROTO_MH       135
+#define IPPROTO_UDPLITE  136
 #define IPPROTO_RAW      255
 #define IPPROTO_MAX      256
 
@@ -199,6 +208,21 @@ uint16_t ntohs(uint16_t);
 #define IP_ADD_SOURCE_MEMBERSHIP  39
 #define IP_DROP_SOURCE_MEMBERSHIP 40
 #define IP_MSFILTER        41
+#define IP_MULTICAST_ALL   49
+#define IP_UNICAST_IF      50
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#define MCAST_JOIN_GROUP   42
+#define MCAST_BLOCK_SOURCE 43
+#define MCAST_UNBLOCK_SOURCE      44
+#define MCAST_LEAVE_GROUP  45
+#define MCAST_JOIN_SOURCE_GROUP   46
+#define MCAST_LEAVE_SOURCE_GROUP  47
+#define MCAST_MSFILTER     48
+
+#define MCAST_EXCLUDE 0
+#define MCAST_INCLUDE 1
+#endif
 
 #define IP_RECVRETOPTS IP_RETOPTS
 
@@ -232,6 +256,47 @@ struct ip_mreqn
        int imr_ifindex;
 };
 
+struct ip_mreq_source {
+       struct in_addr imr_multiaddr;
+       struct in_addr imr_interface;
+       struct in_addr imr_sourceaddr;
+};
+
+struct ip_msfilter {
+       struct in_addr imsf_multiaddr;
+       struct in_addr imsf_interface;
+       uint32_t imsf_fmode;
+       uint32_t imsf_numsrc;
+       struct in_addr imsf_slist[1];
+};
+#define IP_MSFILTER_SIZE(numsrc) \
+       (sizeof(struct ip_msfilter) - sizeof(struct in_addr) \
+       + (numsrc) * sizeof(struct in_addr))
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+struct group_req {
+       uint32_t gr_interface;
+       struct sockaddr_storage gr_group;
+};
+
+struct group_source_req {
+       uint32_t gsr_interface;
+       struct sockaddr_storage gsr_group;
+       struct sockaddr_storage gsr_source;
+};
+
+struct group_filter {
+       uint32_t gf_interface;
+       struct sockaddr_storage gf_group;
+       uint32_t gf_fmode;
+       uint32_t gf_numsrc;
+       struct sockaddr_storage gf_slist[1];
+};
+#define GROUP_FILTER_SIZE(numsrc) \
+       (sizeof(struct group_filter) - sizeof(struct sockaddr_storage) \
+       + (numsrc) * sizeof(struct sockaddr_storage))
+#endif
+
 struct in_pktinfo
 {
        int ipi_ifindex;