1 #ifndef _SOCK_ADDR_EQ_H_INCLUDED_
2 #define _SOCK_ADDR_EQ_H_INCLUDED_
17 #include <sys/socket.h>
18 #include <netinet/in.h>
24 #define SOCK_ADDR_PTR(ptr) ((struct sockaddr *)(ptr))
25 #define SOCK_ADDR_FAMILY(ptr) SOCK_ADDR_PTR(ptr)->sa_family
27 #define SOCK_ADDR_LEN(ptr) SOCK_ADDR_PTR(ptr)->sa_len
30 #define SOCK_ADDR_IN_PTR(sa) ((struct sockaddr_in *)(sa))
31 #define SOCK_ADDR_IN_FAMILY(sa) SOCK_ADDR_IN_PTR(sa)->sin_family
32 #define SOCK_ADDR_IN_PORT(sa) SOCK_ADDR_IN_PTR(sa)->sin_port
33 #define SOCK_ADDR_IN_ADDR(sa) SOCK_ADDR_IN_PTR(sa)->sin_addr
34 #define IN_ADDR(ia) (*((struct in_addr *) (ia)))
43 #define SOCK_ADDR_LEN(sa) \
44 (SOCK_ADDR_PTR(sa)->sa_family == AF_INET6 ? \
45 sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in))
48 #define SOCK_ADDR_PORT(sa) \
49 (SOCK_ADDR_PTR(sa)->sa_family == AF_INET6 ? \
50 SOCK_ADDR_IN6_PORT(sa) : SOCK_ADDR_IN_PORT(sa))
51 #define SOCK_ADDR_PORTP(sa) \
52 (SOCK_ADDR_PTR(sa)->sa_family == AF_INET6 ? \
53 &SOCK_ADDR_IN6_PORT(sa) : &SOCK_ADDR_IN_PORT(sa))
55 #define SOCK_ADDR_IN6_PTR(sa) ((struct sockaddr_in6 *)(sa))
56 #define SOCK_ADDR_IN6_FAMILY(sa) SOCK_ADDR_IN6_PTR(sa)->sin6_family
57 #define SOCK_ADDR_IN6_PORT(sa) SOCK_ADDR_IN6_PTR(sa)->sin6_port
58 #define SOCK_ADDR_IN6_ADDR(sa) SOCK_ADDR_IN6_PTR(sa)->sin6_addr
59 #define IN6_ADDR(ia) (*((struct in6_addr *) (ia)))
61 #define SOCK_ADDR_EQ_ADDR(sa, sb) \
62 ((SOCK_ADDR_FAMILY(sa) == AF_INET && SOCK_ADDR_FAMILY(sb) == AF_INET \
63 && SOCK_ADDR_IN_ADDR(sa).s_addr == SOCK_ADDR_IN_ADDR(sb).s_addr) \
64 || (SOCK_ADDR_FAMILY(sa) == AF_INET6 && SOCK_ADDR_FAMILY(sb) == AF_INET6 \
65 && memcmp((char *) &(SOCK_ADDR_IN6_ADDR(sa)), \
66 (char *) &(SOCK_ADDR_IN6_ADDR(sb)), \
67 sizeof(SOCK_ADDR_IN6_ADDR(sa))) == 0))
69 #define SOCK_ADDR_EQ_PORT(sa, sb) \
70 ((SOCK_ADDR_FAMILY(sa) == AF_INET && SOCK_ADDR_FAMILY(sb) == AF_INET \
71 && SOCK_ADDR_IN_PORT(sa) == SOCK_ADDR_IN_PORT(sb)) \
72 || (SOCK_ADDR_FAMILY(sa) == AF_INET6 && SOCK_ADDR_FAMILY(sb) == AF_INET6 \
73 && SOCK_ADDR_IN6_PORT(sa) == SOCK_ADDR_IN6_PORT(sb)))
78 #define SOCK_ADDR_LEN(sa) sizeof(struct sockaddr_in)
81 #define SOCK_ADDR_PORT(sa) SOCK_ADDR_IN_PORT(sa))
82 #define SOCK_ADDR_PORTP(sa) &SOCK_ADDR_IN_PORT(sa))
84 #define SOCK_ADDR_EQ_ADDR(sa, sb) \
85 (SOCK_ADDR_FAMILY(sa) == AF_INET && SOCK_ADDR_FAMILY(sb) == AF_INET \
86 && SOCK_ADDR_IN_ADDR(sa).s_addr == SOCK_ADDR_IN_ADDR(sb).s_addr)
88 #define SOCK_ADDR_EQ_PORT(sa, sb) \
89 (SOCK_ADDR_FAMILY(sa) == AF_INET && SOCK_ADDR_FAMILY(sb) == AF_INET \
90 && SOCK_ADDR_IN_PORT(sa) == SOCK_ADDR_IN_PORT(sb))
int sock_addr_cmp_port(const struct sockaddr *, const struct sockaddr *)
int sock_addr_cmp_addr(const struct sockaddr *, const struct sockaddr *)
int sock_addr_in_loopback(const struct sockaddr *)