#ifndef _NETINET_IN_H_
#define _NETINET_IN_H_
#include <net/if.h>
#include <endian.h>
#include <stdint.h>
#include <sys/types.h>
#include <netinet6/in6.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef uint16_t in_port_t;
typedef uint32_t in_addr_t;
#if __GNUC__ >= 4
# define __net_swap_int32(arg) (uint32_t)__builtin_bswap32(arg)
# define __net_swap_int16(arg) (uint16_t)__builtin_bswap16(arg)
#else
extern unsigned long __swap_int32(unsigned long);
extern uint16_t __swap_int16(uint16_t);
# define __net_swap_int32(arg) __swap_int32(arg)
# define __net_swap_int16(arg) __swap_int16(arg)
#endif
#ifndef htonl
# if BYTE_ORDER == LITTLE_ENDIAN
# define htonl(x) ((uint32_t)__net_swap_int32(x))
# define ntohl(x) ((uint32_t)__net_swap_int32(x))
# define htons(x) __net_swap_int16(x)
# define ntohs(x) __net_swap_int16(x)
# elif BYTE_ORDER == BIG_ENDIAN
# define htonl(x) (x)
# define ntohl(x) (x)
# define htons(x) (x)
# define ntohs(x) (x)
# else
# error Unknown byte order.
# endif
#endif
#define IPPROTO_IP 0
#define IPPROTO_HOPOPTS 0
#define IPPROTO_ICMP 1
#define IPPROTO_IGMP 2
#define IPPROTO_TCP 6
#define IPPROTO_UDP 17
#define IPPROTO_IPV6 41
#define IPPROTO_ROUTING 43
#define IPPROTO_FRAGMENT 44
#define IPPROTO_ESP 50
#define IPPROTO_AH 51
#define IPPROTO_ICMPV6 58
#define IPPROTO_NONE 59
#define IPPROTO_DSTOPTS 60
#define IPPROTO_ETHERIP 97
#define IPPROTO_RAW 255
#define IPPROTO_MAX 256
#define IPPORT_RESERVED 1024
struct in_addr {
in_addr_t s_addr;
};
struct sockaddr_in {
uint8_t sin_len;
uint8_t sin_family;
uint16_t sin_port;
struct in_addr sin_addr;
int8_t sin_zero[24];
};
struct ip_mreq {
struct in_addr imr_multiaddr;
struct in_addr imr_interface;
};
struct ip_mreq_source {
struct in_addr imr_multiaddr;
struct in_addr imr_sourceaddr;
struct in_addr imr_interface;
};
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;
};
#define IP_OPTIONS 1
#define IP_HDRINCL 2
#define IP_TOS 3
#define IP_TTL 4
#define IP_RECVOPTS 5
#define IP_RECVRETOPTS 6
#define IP_RECVDSTADDR 7
#define IP_RETOPTS 8
#define IP_MULTICAST_IF 9
#define IP_MULTICAST_TTL 10
#define IP_MULTICAST_LOOP 11
#define IP_ADD_MEMBERSHIP 12
#define IP_DROP_MEMBERSHIP 13
#define IP_BLOCK_SOURCE 14
#define IP_UNBLOCK_SOURCE 15
#define IP_ADD_SOURCE_MEMBERSHIP 16
#define IP_DROP_SOURCE_MEMBERSHIP 17
#define MCAST_JOIN_GROUP 18
#define MCAST_BLOCK_SOURCE 19
#define MCAST_UNBLOCK_SOURCE 20
#define MCAST_LEAVE_GROUP 21
#define MCAST_JOIN_SOURCE_GROUP 22
#define MCAST_LEAVE_SOURCE_GROUP 23
#define IPV6_MULTICAST_IF 24
#define IPV6_MULTICAST_HOPS 25
#define IPV6_MULTICAST_LOOP 26
#define IPV6_UNICAST_HOPS 27
#define IPV6_JOIN_GROUP 28
#define IPV6_LEAVE_GROUP 29
#define IPV6_V6ONLY 30
#define IPV6_PKTINFO 31
#define IPV6_RECVPKTINFO 32
#define IPV6_HOPLIMIT 33
#define IPV6_RECVHOPLIMIT 34
#define IPV6_HOPOPTS 35
#define IPV6_DSTOPTS 36
#define IPV6_RTHDR 37
#define IP_DONTFRAG 38
#define INADDR_ANY ((in_addr_t)0x00000000)
#define INADDR_LOOPBACK ((in_addr_t)0x7f000001)
#define INADDR_BROADCAST ((in_addr_t)0xffffffff)
#define INADDR_UNSPEC_GROUP ((in_addr_t)0xe0000000)
#define INADDR_ALLHOSTS_GROUP ((in_addr_t)0xe0000001)
#define INADDR_ALLROUTERS_GROUP ((in_addr_t)0xe0000002)
#define INADDR_MAX_LOCAL_GROUP ((in_addr_t)0xe00000ff)
#define IN_LOOPBACKNET 127
#define INADDR_NONE ((in_addr_t)0xffffffff)
#define IN_CLASSA(i) (((in_addr_t)(i) & 0x80000000) == 0)
#define IN_CLASSA_NET 0xff000000
#define IN_CLASSA_NSHIFT 24
#define IN_CLASSA_HOST 0x00ffffff
#define IN_CLASSA_MAX 128
#define IN_CLASSB(i) (((in_addr_t)(i) & 0xc0000000) == 0x80000000)
#define IN_CLASSB_NET 0xffff0000
#define IN_CLASSB_NSHIFT 16
#define IN_CLASSB_HOST 0x0000ffff
#define IN_CLASSB_MAX 65536
#define IN_CLASSC(i) (((in_addr_t)(i) & 0xe0000000) == 0xc0000000)
#define IN_CLASSC_NET 0xffffff00
#define IN_CLASSC_NSHIFT 8
#define IN_CLASSC_HOST 0x000000ff
#define IN_CLASSD(i) (((in_addr_t)(i) & 0xf0000000) == 0xe0000000)
#define IN_CLASSD_NET 0xf0000000
#define IN_CLASSD_NSHIFT 28
#define IN_CLASSD_HOST 0x0fffffff
#define IN_MULTICAST(i) IN_CLASSD(i)
#define IN_EXPERIMENTAL(i) (((in_addr_t)(i) & 0xf0000000) == 0xf0000000)
#define IN_BADCLASS(i) (((in_addr_t)(i) & 0xf0000000) == 0xf0000000)
#define IP_MAX_MEMBERSHIPS 20
#define INET_ADDRSTRLEN 16
#ifdef __cplusplus
}
#endif
#endif