1#ifndef _NETINET_IN_H 2#define _NETINET_IN_H 3 4#ifdef __cplusplus 5extern "C" { 6#endif 7 8#include <features.h> 9#include <inttypes.h> 10#include <sys/socket.h> 11 12typedef uint16_t in_port_t; 13typedef uint32_t in_addr_t; 14struct in_addr { in_addr_t s_addr; }; 15 16struct sockaddr_in { 17 sa_family_t sin_family; 18 in_port_t sin_port; 19 struct in_addr sin_addr; 20 uint8_t sin_zero[8]; 21}; 22 23struct in6_addr { 24 union { 25 uint8_t __s6_addr[16]; 26 uint16_t __s6_addr16[8]; 27 uint32_t __s6_addr32[4]; 28 } __in6_union; 29}; 30#define s6_addr __in6_union.__s6_addr 31#define s6_addr16 __in6_union.__s6_addr16 32#define s6_addr32 __in6_union.__s6_addr32 33 34struct sockaddr_in6 { 35 sa_family_t sin6_family; 36 in_port_t sin6_port; 37 uint32_t sin6_flowinfo; 38 struct in6_addr sin6_addr; 39 uint32_t sin6_scope_id; 40}; 41 42struct ipv6_mreq { 43 struct in6_addr ipv6mr_multiaddr; 44 unsigned ipv6mr_interface; 45}; 46 47#define INADDR_ANY ((in_addr_t) 0x00000000) 48#define INADDR_BROADCAST ((in_addr_t) 0xffffffff) 49#define INADDR_NONE ((in_addr_t) 0xffffffff) 50#define INADDR_LOOPBACK ((in_addr_t) 0x7f000001) 51 52#define INADDR_UNSPEC_GROUP ((in_addr_t) 0xe0000000) 53#define INADDR_ALLHOSTS_GROUP ((in_addr_t) 0xe0000001) 54#define INADDR_ALLRTRS_GROUP ((in_addr_t) 0xe0000002) 55#define INADDR_MAX_LOCAL_GROUP ((in_addr_t) 0xe00000ff) 56 57#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } 58#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } 59 60extern const struct in6_addr in6addr_any, in6addr_loopback; 61 62#undef INET_ADDRSTRLEN 63#undef INET6_ADDRSTRLEN 64#define INET_ADDRSTRLEN 16 65#define INET6_ADDRSTRLEN 46 66 67uint32_t htonl(uint32_t); 68uint16_t htons(uint16_t); 69uint32_t ntohl(uint32_t); 70uint16_t ntohs(uint16_t); 71 72#define IPPROTO_IP 0 73#define IPPROTO_HOPOPTS 0 74#define IPPROTO_ICMP 1 75#define IPPROTO_IGMP 2 76#define IPPROTO_IPIP 4 77#define IPPROTO_TCP 6 78#define IPPROTO_EGP 8 79#define IPPROTO_PUP 12 80#define IPPROTO_UDP 17 81#define IPPROTO_IDP 22 82#define IPPROTO_TP 29 83#define IPPROTO_DCCP 33 84#define IPPROTO_IPV6 41 85#define IPPROTO_ROUTING 43 86#define IPPROTO_FRAGMENT 44 87#define IPPROTO_RSVP 46 88#define IPPROTO_GRE 47 89#define IPPROTO_ESP 50 90#define IPPROTO_AH 51 91#define IPPROTO_ICMPV6 58 92#define IPPROTO_NONE 59 93#define IPPROTO_DSTOPTS 60 94#define IPPROTO_MTP 92 95#define IPPROTO_BEETPH 94 96#define IPPROTO_ENCAP 98 97#define IPPROTO_PIM 103 98#define IPPROTO_COMP 108 99#define IPPROTO_SCTP 132 100#define IPPROTO_MH 135 101#define IPPROTO_UDPLITE 136 102#define IPPROTO_MPLS 137 103#define IPPROTO_RAW 255 104#define IPPROTO_MAX 256 105 106#define IN6_IS_ADDR_UNSPECIFIED(a) \ 107 (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \ 108 ((uint32_t *) (a))[2] == 0 && ((uint32_t *) (a))[3] == 0) 109 110#define IN6_IS_ADDR_LOOPBACK(a) \ 111 (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \ 112 ((uint32_t *) (a))[2] == 0 && \ 113 ((uint8_t *) (a))[12] == 0 && ((uint8_t *) (a))[13] == 0 && \ 114 ((uint8_t *) (a))[14] == 0 && ((uint8_t *) (a))[15] == 1 ) 115 116#define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff) 117 118#define IN6_IS_ADDR_LINKLOCAL(a) \ 119 ((((uint8_t *) (a))[0]) == 0xfe && (((uint8_t *) (a))[1] & 0xc0) == 0x80) 120 121#define IN6_IS_ADDR_SITELOCAL(a) \ 122 ((((uint8_t *) (a))[0]) == 0xfe && (((uint8_t *) (a))[1] & 0xc0) == 0xc0) 123 124#define IN6_IS_ADDR_V4MAPPED(a) \ 125 (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \ 126 ((uint8_t *) (a))[8] == 0 && ((uint8_t *) (a))[9] == 0 && \ 127 ((uint8_t *) (a))[10] == 0xff && ((uint8_t *) (a))[11] == 0xff) 128 129#define IN6_IS_ADDR_V4COMPAT(a) \ 130 (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \ 131 ((uint32_t *) (a))[2] == 0 && ((uint8_t *) (a))[15] > 1) 132 133#define IN6_IS_ADDR_MC_NODELOCAL(a) \ 134 (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x1)) 135 136#define IN6_IS_ADDR_MC_LINKLOCAL(a) \ 137 (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x2)) 138 139#define IN6_IS_ADDR_MC_SITELOCAL(a) \ 140 (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x5)) 141 142#define IN6_IS_ADDR_MC_ORGLOCAL(a) \ 143 (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x8)) 144 145#define IN6_IS_ADDR_MC_GLOBAL(a) \ 146 (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0xe)) 147 148#define __ARE_4_EQUAL(a,b) \ 149 (!( (0[a]-0[b]) | (1[a]-1[b]) | (2[a]-2[b]) | (3[a]-3[b]) )) 150#define IN6_ARE_ADDR_EQUAL(a,b) \ 151 __ARE_4_EQUAL((const uint32_t *)(a), (const uint32_t *)(b)) 152 153#define IN_CLASSA(a) ((((in_addr_t)(a)) & 0x80000000) == 0) 154#define IN_CLASSA_NET 0xff000000 155#define IN_CLASSA_NSHIFT 24 156#define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET) 157#define IN_CLASSA_MAX 128 158#define IN_CLASSB(a) ((((in_addr_t)(a)) & 0xc0000000) == 0x80000000) 159#define IN_CLASSB_NET 0xffff0000 160#define IN_CLASSB_NSHIFT 16 161#define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET) 162#define IN_CLASSB_MAX 65536 163#define IN_CLASSC(a) ((((in_addr_t)(a)) & 0xe0000000) == 0xc0000000) 164#define IN_CLASSC_NET 0xffffff00 165#define IN_CLASSC_NSHIFT 8 166#define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET) 167#define IN_CLASSD(a) ((((in_addr_t)(a)) & 0xf0000000) == 0xe0000000) 168#define IN_MULTICAST(a) IN_CLASSD(a) 169#define IN_EXPERIMENTAL(a) ((((in_addr_t)(a)) & 0xe0000000) == 0xe0000000) 170#define IN_BADCLASS(a) ((((in_addr_t)(a)) & 0xf0000000) == 0xf0000000) 171 172#define IN_LOOPBACKNET 127 173 174 175#define IP_TOS 1 176#define IP_TTL 2 177#define IP_HDRINCL 3 178#define IP_OPTIONS 4 179#define IP_ROUTER_ALERT 5 180#define IP_RECVOPTS 6 181#define IP_RETOPTS 7 182#define IP_PKTINFO 8 183#define IP_PKTOPTIONS 9 184#define IP_PMTUDISC 10 185#define IP_MTU_DISCOVER 10 186#define IP_RECVERR 11 187#define IP_RECVTTL 12 188#define IP_RECVTOS 13 189#define IP_MTU 14 190#define IP_FREEBIND 15 191#define IP_IPSEC_POLICY 16 192#define IP_XFRM_POLICY 17 193#define IP_PASSSEC 18 194#define IP_TRANSPARENT 19 195#define IP_ORIGDSTADDR 20 196#define IP_RECVORIGDSTADDR IP_ORIGDSTADDR 197#define IP_MINTTL 21 198#define IP_NODEFRAG 22 199#define IP_CHECKSUM 23 200#define IP_BIND_ADDRESS_NO_PORT 24 201#define IP_MULTICAST_IF 32 202#define IP_MULTICAST_TTL 33 203#define IP_MULTICAST_LOOP 34 204#define IP_ADD_MEMBERSHIP 35 205#define IP_DROP_MEMBERSHIP 36 206#define IP_UNBLOCK_SOURCE 37 207#define IP_BLOCK_SOURCE 38 208#define IP_ADD_SOURCE_MEMBERSHIP 39 209#define IP_DROP_SOURCE_MEMBERSHIP 40 210#define IP_MSFILTER 41 211#define IP_MULTICAST_ALL 49 212#define IP_UNICAST_IF 50 213 214#define IP_RECVRETOPTS IP_RETOPTS 215 216#define IP_PMTUDISC_DONT 0 217#define IP_PMTUDISC_WANT 1 218#define IP_PMTUDISC_DO 2 219#define IP_PMTUDISC_PROBE 3 220#define IP_PMTUDISC_INTERFACE 4 221#define IP_PMTUDISC_OMIT 5 222 223#define IP_DEFAULT_MULTICAST_TTL 1 224#define IP_DEFAULT_MULTICAST_LOOP 1 225#define IP_MAX_MEMBERSHIPS 20 226 227struct ip_opts { 228 struct in_addr ip_dst; 229 char ip_opts[40]; 230}; 231 232#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 233 234#define MCAST_JOIN_GROUP 42 235#define MCAST_BLOCK_SOURCE 43 236#define MCAST_UNBLOCK_SOURCE 44 237#define MCAST_LEAVE_GROUP 45 238#define MCAST_JOIN_SOURCE_GROUP 46 239#define MCAST_LEAVE_SOURCE_GROUP 47 240#define MCAST_MSFILTER 48 241 242#define MCAST_EXCLUDE 0 243#define MCAST_INCLUDE 1 244 245struct ip_mreq { 246 struct in_addr imr_multiaddr; 247 struct in_addr imr_interface; 248}; 249 250struct ip_mreqn { 251 struct in_addr imr_multiaddr; 252 struct in_addr imr_address; 253 int imr_ifindex; 254}; 255 256struct ip_mreq_source { 257 struct in_addr imr_multiaddr; 258 struct in_addr imr_interface; 259 struct in_addr imr_sourceaddr; 260}; 261 262struct ip_msfilter { 263 struct in_addr imsf_multiaddr; 264 struct in_addr imsf_interface; 265 uint32_t imsf_fmode; 266 uint32_t imsf_numsrc; 267 struct in_addr imsf_slist[1]; 268}; 269#define IP_MSFILTER_SIZE(numsrc) \ 270 (sizeof(struct ip_msfilter) - sizeof(struct in_addr) \ 271 + (numsrc) * sizeof(struct in_addr)) 272 273struct group_req { 274 uint32_t gr_interface; 275 struct sockaddr_storage gr_group; 276}; 277 278struct group_source_req { 279 uint32_t gsr_interface; 280 struct sockaddr_storage gsr_group; 281 struct sockaddr_storage gsr_source; 282}; 283 284struct group_filter { 285 uint32_t gf_interface; 286 struct sockaddr_storage gf_group; 287 uint32_t gf_fmode; 288 uint32_t gf_numsrc; 289 struct sockaddr_storage gf_slist[1]; 290}; 291#define GROUP_FILTER_SIZE(numsrc) \ 292 (sizeof(struct group_filter) - sizeof(struct sockaddr_storage) \ 293 + (numsrc) * sizeof(struct sockaddr_storage)) 294 295struct in_pktinfo { 296 int ipi_ifindex; 297 struct in_addr ipi_spec_dst; 298 struct in_addr ipi_addr; 299}; 300 301struct in6_pktinfo { 302 struct in6_addr ipi6_addr; 303 unsigned ipi6_ifindex; 304}; 305 306struct ip6_mtuinfo { 307 struct sockaddr_in6 ip6m_addr; 308 uint32_t ip6m_mtu; 309}; 310#endif 311 312#define IPV6_ADDRFORM 1 313#define IPV6_2292PKTINFO 2 314#define IPV6_2292HOPOPTS 3 315#define IPV6_2292DSTOPTS 4 316#define IPV6_2292RTHDR 5 317#define IPV6_2292PKTOPTIONS 6 318#define IPV6_CHECKSUM 7 319#define IPV6_2292HOPLIMIT 8 320#define IPV6_NEXTHOP 9 321#define IPV6_AUTHHDR 10 322#define IPV6_UNICAST_HOPS 16 323#define IPV6_MULTICAST_IF 17 324#define IPV6_MULTICAST_HOPS 18 325#define IPV6_MULTICAST_LOOP 19 326#define IPV6_JOIN_GROUP 20 327#define IPV6_LEAVE_GROUP 21 328#define IPV6_ROUTER_ALERT 22 329#define IPV6_MTU_DISCOVER 23 330#define IPV6_MTU 24 331#define IPV6_RECVERR 25 332#define IPV6_V6ONLY 26 333#define IPV6_JOIN_ANYCAST 27 334#define IPV6_LEAVE_ANYCAST 28 335#define IPV6_IPSEC_POLICY 34 336#define IPV6_XFRM_POLICY 35 337#define IPV6_HDRINCL 36 338 339#define IPV6_RECVPKTINFO 49 340#define IPV6_PKTINFO 50 341#define IPV6_RECVHOPLIMIT 51 342#define IPV6_HOPLIMIT 52 343#define IPV6_RECVHOPOPTS 53 344#define IPV6_HOPOPTS 54 345#define IPV6_RTHDRDSTOPTS 55 346#define IPV6_RECVRTHDR 56 347#define IPV6_RTHDR 57 348#define IPV6_RECVDSTOPTS 58 349#define IPV6_DSTOPTS 59 350#define IPV6_RECVPATHMTU 60 351#define IPV6_PATHMTU 61 352#define IPV6_DONTFRAG 62 353#define IPV6_RECVTCLASS 66 354#define IPV6_TCLASS 67 355#define IPV6_AUTOFLOWLABEL 70 356#define IPV6_ADDR_PREFERENCES 72 357#define IPV6_MINHOPCOUNT 73 358#define IPV6_ORIGDSTADDR 74 359#define IPV6_RECVORIGDSTADDR IPV6_ORIGDSTADDR 360#define IPV6_TRANSPARENT 75 361#define IPV6_UNICAST_IF 76 362 363#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP 364#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP 365#define IPV6_RXHOPOPTS IPV6_HOPOPTS 366#define IPV6_RXDSTOPTS IPV6_DSTOPTS 367 368#define IPV6_PMTUDISC_DONT 0 369#define IPV6_PMTUDISC_WANT 1 370#define IPV6_PMTUDISC_DO 2 371#define IPV6_PMTUDISC_PROBE 3 372#define IPV6_PMTUDISC_INTERFACE 4 373#define IPV6_PMTUDISC_OMIT 5 374 375#define IPV6_PREFER_SRC_TMP 0x0001 376#define IPV6_PREFER_SRC_PUBLIC 0x0002 377#define IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100 378#define IPV6_PREFER_SRC_COA 0x0004 379#define IPV6_PREFER_SRC_HOME 0x0400 380#define IPV6_PREFER_SRC_CGA 0x0008 381#define IPV6_PREFER_SRC_NONCGA 0x0800 382 383#define IPV6_RTHDR_LOOSE 0 384#define IPV6_RTHDR_STRICT 1 385 386#define IPV6_RTHDR_TYPE_0 0 387 388#define __UAPI_DEF_IN_ADDR 0 389#define __UAPI_DEF_IN_IPPROTO 0 390#define __UAPI_DEF_IN_PKTINFO 0 391#define __UAPI_DEF_IP_MREQ 0 392#define __UAPI_DEF_SOCKADDR_IN 0 393#define __UAPI_DEF_IN_CLASS 0 394#define __UAPI_DEF_IN6_ADDR 0 395#define __UAPI_DEF_IN6_ADDR_ALT 0 396#define __UAPI_DEF_SOCKADDR_IN6 0 397#define __UAPI_DEF_IPV6_MREQ 0 398#define __UAPI_DEF_IPPROTO_V6 0 399#define __UAPI_DEF_IPV6_OPTIONS 0 400#define __UAPI_DEF_IN6_PKTINFO 0 401#define __UAPI_DEF_IP6_MTUINFO 0 402 403#ifdef __cplusplus 404} 405#endif 406 407#endif 408