net: Convert network connection to use sockaddr

As the net_conn needs port information, use struct sockaddr
internally as it has the port numbers built in.

Change-Id: Idb1c87afa956dfe55dc8d533d867fa7845545b12
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This commit is contained in:
Jukka Rissanen 2016-06-22 16:33:56 +03:00
commit 1932d4c3ec
4 changed files with 121 additions and 79 deletions

View file

@ -370,13 +370,14 @@ int net_conn_unregister(void *handle)
#if NET_DEBUG #if NET_DEBUG
static inline static inline
void prepare_register_debug_print(char *dst, char *src, void prepare_register_debug_print(char *dst, char *src,
const struct net_addr *remote_addr, const struct sockaddr *remote_addr,
const struct net_addr *local_addr) const struct sockaddr *local_addr)
{ {
if (remote_addr && remote_addr->family == AF_INET6) { if (remote_addr && remote_addr->family == AF_INET6) {
#if defined(CONFIG_NET_IPV6) #if defined(CONFIG_NET_IPV6)
snprintf(dst, sizeof(dst), snprintf(dst, sizeof(dst),
net_sprint_ipv6_addr(&remote_addr->in6_addr)); net_sprint_ipv6_addr(&net_sin6(remote_addr)->
sin6_addr));
#else #else
snprintf(dst, sizeof(dst), "?"); snprintf(dst, sizeof(dst), "?");
#endif #endif
@ -384,7 +385,8 @@ void prepare_register_debug_print(char *dst, char *src,
} else if (remote_addr && remote_addr->family == AF_INET) { } else if (remote_addr && remote_addr->family == AF_INET) {
#if defined(CONFIG_NET_IPV4) #if defined(CONFIG_NET_IPV4)
snprintf(dst, sizeof(dst), snprintf(dst, sizeof(dst),
net_sprint_ipv4_addr(&remote_addr->in_addr)); net_sprint_ipv4_addr(&net_sin(remote_addr)->
sin_addr));
#else #else
snprintf(dst, sizeof(dst), "?"); snprintf(dst, sizeof(dst), "?");
#endif #endif
@ -396,7 +398,8 @@ void prepare_register_debug_print(char *dst, char *src,
if (local_addr && local_addr->family == AF_INET6) { if (local_addr && local_addr->family == AF_INET6) {
#if defined(CONFIG_NET_IPV6) #if defined(CONFIG_NET_IPV6)
snprintf(src, sizeof(src), snprintf(src, sizeof(src),
net_sprint_ipv6_addr(&local_addr->in6_addr)); net_sprint_ipv6_addr(&net_sin6(local_addr)->
sin6_addr));
#else #else
snprintf(src, sizeof(src), "?"); snprintf(src, sizeof(src), "?");
#endif #endif
@ -404,7 +407,8 @@ void prepare_register_debug_print(char *dst, char *src,
} else if (local_addr && local_addr->family == AF_INET) { } else if (local_addr && local_addr->family == AF_INET) {
#if defined(CONFIG_NET_IPV4) #if defined(CONFIG_NET_IPV4)
snprintf(src, sizeof(src), snprintf(src, sizeof(src),
net_sprint_ipv4_addr(&local_addr->in_addr)); net_sprint_ipv4_addr(&net_sin(local_addr)->
sin_addr));
#else #else
snprintf(src, sizeof(src), "?"); snprintf(src, sizeof(src), "?");
#endif #endif
@ -416,8 +420,8 @@ void prepare_register_debug_print(char *dst, char *src,
#endif /* NET_DEBUG */ #endif /* NET_DEBUG */
int net_conn_register(enum ip_protocol proto, int net_conn_register(enum ip_protocol proto,
const struct net_addr *remote_addr, const struct sockaddr *remote_addr,
const struct net_addr *local_addr, const struct sockaddr *local_addr,
uint16_t remote_port, uint16_t remote_port,
uint16_t local_port, uint16_t local_port,
net_conn_cb_t cb, net_conn_cb_t cb,
@ -442,12 +446,13 @@ int net_conn_register(enum ip_protocol proto,
conns[i].flags |= NET_CONN_REMOTE_ADDR_SET; conns[i].flags |= NET_CONN_REMOTE_ADDR_SET;
memcpy(&conns[i].remote_addr, remote_addr, memcpy(&conns[i].remote_addr, remote_addr,
sizeof(struct net_addr)); sizeof(struct sockaddr));
#if defined(CONFIG_NET_IPV6) #if defined(CONFIG_NET_IPV6)
if (remote_addr->family == AF_INET6) { if (remote_addr->family == AF_INET6) {
if (net_is_ipv6_addr_unspecified( if (net_is_ipv6_addr_unspecified(
&remote_addr->in6_addr)) { &net_sin6(remote_addr)->
sin6_addr)) {
rank |= NET_RANK_REMOTE_UNSPEC_ADDR; rank |= NET_RANK_REMOTE_UNSPEC_ADDR;
} else { } else {
rank |= NET_RANK_REMOTE_SPEC_ADDR; rank |= NET_RANK_REMOTE_SPEC_ADDR;
@ -457,7 +462,8 @@ int net_conn_register(enum ip_protocol proto,
#if defined(CONFIG_NET_IPV4) #if defined(CONFIG_NET_IPV4)
if (remote_addr->family == AF_INET) { if (remote_addr->family == AF_INET) {
if (!remote_addr->in_addr.s_addr[0]) { if (!net_sin(remote_addr)->
sin_addr.s_addr[0]) {
rank |= NET_RANK_REMOTE_UNSPEC_ADDR; rank |= NET_RANK_REMOTE_UNSPEC_ADDR;
} else { } else {
rank |= NET_RANK_REMOTE_SPEC_ADDR; rank |= NET_RANK_REMOTE_SPEC_ADDR;
@ -476,12 +482,13 @@ int net_conn_register(enum ip_protocol proto,
conns[i].flags |= NET_CONN_LOCAL_ADDR_SET; conns[i].flags |= NET_CONN_LOCAL_ADDR_SET;
memcpy(&conns[i].local_addr, local_addr, memcpy(&conns[i].local_addr, local_addr,
sizeof(struct net_addr)); sizeof(struct sockaddr));
#if defined(CONFIG_NET_IPV6) #if defined(CONFIG_NET_IPV6)
if (local_addr->family == AF_INET6) { if (local_addr->family == AF_INET6) {
if (net_is_ipv6_addr_unspecified( if (net_is_ipv6_addr_unspecified(
&local_addr->in6_addr)) { &net_sin6(local_addr)->
sin6_addr)) {
rank |= NET_RANK_LOCAL_UNSPEC_ADDR; rank |= NET_RANK_LOCAL_UNSPEC_ADDR;
} else { } else {
rank |= NET_RANK_LOCAL_SPEC_ADDR; rank |= NET_RANK_LOCAL_SPEC_ADDR;
@ -491,7 +498,7 @@ int net_conn_register(enum ip_protocol proto,
#if defined(CONFIG_NET_IPV4) #if defined(CONFIG_NET_IPV4)
if (local_addr->family == AF_INET) { if (local_addr->family == AF_INET) {
if (!local_addr->in_addr.s_addr[0]) { if (!net_sin(local_addr)->sin_addr.s_addr[0]) {
rank |= NET_RANK_LOCAL_UNSPEC_ADDR; rank |= NET_RANK_LOCAL_UNSPEC_ADDR;
} else { } else {
rank |= NET_RANK_LOCAL_SPEC_ADDR; rank |= NET_RANK_LOCAL_SPEC_ADDR;
@ -509,15 +516,17 @@ int net_conn_register(enum ip_protocol proto,
if (remote_port) { if (remote_port) {
rank |= NET_RANK_REMOTE_PORT; rank |= NET_RANK_REMOTE_PORT;
net_sin(&conns[i].remote_addr)->sin_port =
htons(remote_port);
} }
if (local_port) { if (local_port) {
rank |= NET_RANK_LOCAL_PORT; rank |= NET_RANK_LOCAL_PORT;
net_sin(&conns[i].local_addr)->sin_port =
htons(local_port);
} }
conns[i].flags |= NET_CONN_IN_USE; conns[i].flags |= NET_CONN_IN_USE;
conns[i].remote_port = remote_port;
conns[i].local_port = local_port;
conns[i].cb = cb; conns[i].cb = cb;
conns[i].user_data = user_data; conns[i].user_data = user_data;
conns[i].rank = rank; conns[i].rank = rank;
@ -535,8 +544,9 @@ int net_conn_register(enum ip_protocol proto,
remote_addr, remote_addr,
local_addr); local_addr);
NET_DBG("[%d/%u/0x%02x] remote %p/%s/%u local %p/%s/%u " NET_DBG("[%d/%d/%u/0x%02x] remote %p/%s/%u "
"cb %p ud %p", i, proto, rank, "local %p/%s/%u cb %p ud %p",
i, remote_addr->family, proto, rank,
remote_addr, dst, remote_port, remote_addr, dst, remote_port,
local_addr, src, local_port, local_addr, src, local_port,
cb, user_data); cb, user_data);
@ -553,7 +563,8 @@ int net_conn_register(enum ip_protocol proto,
return -ENOENT; return -ENOENT;
} }
static bool check_addr(struct net_buf *buf, struct net_addr *addr, static bool check_addr(struct net_buf *buf,
struct sockaddr *addr,
bool is_remote) bool is_remote)
{ {
if (addr->family != net_nbuf_family(buf)) { if (addr->family != net_nbuf_family(buf)) {
@ -570,8 +581,10 @@ static bool check_addr(struct net_buf *buf, struct net_addr *addr,
addr6 = &NET_IPV6_BUF(buf)->dst; addr6 = &NET_IPV6_BUF(buf)->dst;
} }
if (!net_is_ipv6_addr_unspecified(&addr->in6_addr)) { if (!net_is_ipv6_addr_unspecified(
if (!net_ipv6_addr_cmp(&addr->in6_addr, addr6)) { &net_sin6(addr)->sin6_addr)) {
if (!net_ipv6_addr_cmp(&net_sin6(addr)->sin6_addr,
addr6)) {
return false; return false;
} }
} }
@ -590,8 +603,9 @@ static bool check_addr(struct net_buf *buf, struct net_addr *addr,
addr4 = &NET_IPV4_BUF(buf)->dst; addr4 = &NET_IPV4_BUF(buf)->dst;
} }
if (addr->in_addr.s_addr[0]) { if (net_sin(addr)->sin_addr.s_addr[0]) {
if (!net_ipv4_addr_cmp(&addr->in_addr, addr4)) { if (!net_ipv4_addr_cmp(&net_sin(addr)->sin_addr,
addr4)) {
return false; return false;
} }
} }
@ -649,16 +663,16 @@ enum net_verdict net_conn_input(enum ip_protocol proto, struct net_buf *buf)
continue; continue;
} }
if (conns[i].remote_port) { if (net_sin(&conns[i].remote_addr)->sin_port) {
if (conns[i].remote_port != if (net_sin(&conns[i].remote_addr)->sin_port !=
ntohs(NET_CONN_BUF(buf)->src_port)) { NET_CONN_BUF(buf)->src_port) {
continue; continue;
} }
} }
if (conns[i].local_port) { if (net_sin(&conns[i].local_addr)->sin_port) {
if (conns[i].local_port != if (net_sin(&conns[i].local_addr)->sin_port !=
ntohs(NET_CONN_BUF(buf)->dst_port)) { NET_CONN_BUF(buf)->dst_port) {
continue; continue;
} }
} }
@ -701,7 +715,7 @@ enum net_verdict net_conn_input(enum ip_protocol proto, struct net_buf *buf)
conns[best_match].rank); conns[best_match].rank);
#endif /* CONFIG_NET_CONN_CACHE */ #endif /* CONFIG_NET_CONN_CACHE */
if (conns[best_match].cb(buf, if (conns[best_match].cb(&conns[best_match], buf,
conns[best_match].user_data) == NET_DROP) { conns[best_match].user_data) == NET_DROP) {
goto drop; goto drop;
} }

View file

@ -35,6 +35,8 @@
extern "C" { extern "C" {
#endif #endif
struct net_conn;
/** /**
* @brief Function that is called by connection subsystem when UDP/TCP * @brief Function that is called by connection subsystem when UDP/TCP
* packet is received and which matches local and remote IP address * packet is received and which matches local and remote IP address
@ -51,16 +53,10 @@ typedef enum net_verdict (*net_conn_cb_t)(struct net_buf *buf,
*/ */
struct net_conn { struct net_conn {
/** Remote IP address */ /** Remote IP address */
struct net_addr remote_addr; struct sockaddr remote_addr;
/** Local IP address */ /** Local IP address */
struct net_addr local_addr; struct sockaddr local_addr;
/** Remote port */
uint16_t remote_port;
/** Local port */
uint16_t local_port;
/** Callback to be called when matching UDP packet is received */ /** Callback to be called when matching UDP packet is received */
net_conn_cb_t cb; net_conn_cb_t cb;
@ -103,8 +99,8 @@ struct net_conn {
* @return Return 0 if the registration succeed, <0 otherwise. * @return Return 0 if the registration succeed, <0 otherwise.
*/ */
int net_conn_register(enum ip_protocol proto, int net_conn_register(enum ip_protocol proto,
const struct net_addr *remote_addr, const struct sockaddr *remote_addr,
const struct net_addr *local_addr, const struct sockaddr *local_addr,
uint16_t remote_port, uint16_t remote_port,
uint16_t local_port, uint16_t local_port,
net_conn_cb_t cb, net_conn_cb_t cb,

View file

@ -49,8 +49,8 @@ extern "C" {
* *
* @return Return 0 if the registration succeed, <0 otherwise. * @return Return 0 if the registration succeed, <0 otherwise.
*/ */
static inline int net_udp_register(const struct net_addr *remote_addr, static inline int net_udp_register(const struct sockaddr *remote_addr,
const struct net_addr *local_addr, const struct sockaddr *local_addr,
uint16_t remote_port, uint16_t remote_port,
uint16_t local_port, uint16_t local_port,
net_conn_cb_t cb, net_conn_cb_t cb,

View file

@ -131,8 +131,8 @@ NET_DEVICE_INIT(net_udp_test, "net_udp_test",
&net_udp_if_api, _ETH_L2_LAYER, 127); &net_udp_if_api, _ETH_L2_LAYER, 127);
struct ud { struct ud {
const struct net_addr *remote_addr; const struct sockaddr *remote_addr;
const struct net_addr *local_addr; const struct sockaddr *local_addr;
uint16_t remote_port; uint16_t remote_port;
uint16_t local_port; uint16_t local_port;
char *test; char *test;
@ -329,6 +329,31 @@ static bool send_ipv4_udp_msg(struct net_if *iface,
return !fail; return !fail;
} }
static void set_port(sa_family_t family, struct sockaddr *raddr,
struct sockaddr *laddr, uint16_t rport,
uint16_t lport)
{
if (family == AF_INET6) {
if (raddr) {
((struct sockaddr_in6 *)raddr)->
sin6_port = htons(rport);
}
if (laddr) {
((struct sockaddr_in6 *)laddr)->
sin6_port = htons(lport);
}
} else if (family == AF_INET) {
if (raddr) {
((struct sockaddr_in *)raddr)->
sin_port = htons(rport);
}
if (laddr) {
((struct sockaddr_in *)laddr)->
sin_port = htons(lport);
}
}
}
void main_fiber(void) void main_fiber(void)
{ {
void *handlers[CONFIG_NET_MAX_CONN]; void *handlers[CONFIG_NET_MAX_CONN];
@ -338,43 +363,43 @@ void main_fiber(void)
int ret, i = 0; int ret, i = 0;
bool st; bool st;
struct net_addr any_addr6; struct sockaddr_in6 any_addr6;
const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT; const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT;
struct net_addr my_addr6; struct sockaddr_in6 my_addr6;
struct in6_addr in6addr_my = { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, struct in6_addr in6addr_my = { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0x1 } } }; 0, 0, 0, 0, 0, 0, 0, 0x1 } } };
struct net_addr peer_addr6; struct sockaddr_in6 peer_addr6;
struct in6_addr in6addr_peer = { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, struct in6_addr in6addr_peer = { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0,
0, 0, 0, 0x4e, 0x11, 0, 0, 0x2 } } }; 0, 0, 0, 0x4e, 0x11, 0, 0, 0x2 } } };
struct net_addr any_addr4; struct sockaddr_in any_addr4;
const struct in_addr in4addr_any = { { { 0 } } }; const struct in_addr in4addr_any = { { { 0 } } };
struct net_addr my_addr4; struct sockaddr_in my_addr4;
struct in_addr in4addr_my = { { { 192, 0, 2, 1 } } }; struct in_addr in4addr_my = { { { 192, 0, 2, 1 } } };
struct net_addr peer_addr4; struct sockaddr_in peer_addr4;
struct in_addr in4addr_peer = { { { 192, 0, 2, 9 } } }; struct in_addr in4addr_peer = { { { 192, 0, 2, 9 } } };
net_ipaddr_copy(&any_addr6.in6_addr, &in6addr_any); net_ipaddr_copy(&any_addr6.sin6_addr, &in6addr_any);
any_addr6.family = AF_INET6; any_addr6.sin6_family = AF_INET6;
net_ipaddr_copy(&my_addr6.in6_addr, &in6addr_my); net_ipaddr_copy(&my_addr6.sin6_addr, &in6addr_my);
my_addr6.family = AF_INET6; my_addr6.sin6_family = AF_INET6;
net_ipaddr_copy(&peer_addr6.in6_addr, &in6addr_peer); net_ipaddr_copy(&peer_addr6.sin6_addr, &in6addr_peer);
peer_addr6.family = AF_INET6; peer_addr6.sin6_family = AF_INET6;
net_ipaddr_copy(&any_addr4.in_addr, &in4addr_any); net_ipaddr_copy(&any_addr4.sin_addr, &in4addr_any);
any_addr4.family = AF_INET; any_addr4.sin_family = AF_INET;
net_ipaddr_copy(&my_addr4.in_addr, &in4addr_my); net_ipaddr_copy(&my_addr4.sin_addr, &in4addr_my);
my_addr4.family = AF_INET; my_addr4.sin_family = AF_INET;
net_ipaddr_copy(&peer_addr4.in_addr, &in4addr_peer); net_ipaddr_copy(&peer_addr4.sin_addr, &in4addr_peer);
peer_addr4.family = AF_INET; peer_addr4.sin_family = AF_INET;
nano_sem_init(&recv_lock); nano_sem_init(&recv_lock);
@ -392,17 +417,22 @@ void main_fiber(void)
return; return;
} }
#define REGISTER(raddr, laddr, rport, lport) \ #define REGISTER(family, raddr, laddr, rport, lport) \
({ \ ({ \
static struct ud user_data; \ static struct ud user_data; \
\ \
user_data.remote_addr = raddr; \ user_data.remote_addr = (struct sockaddr *)raddr; \
user_data.local_addr = laddr; \ user_data.local_addr = (struct sockaddr *)laddr; \
user_data.remote_port = rport; \ user_data.remote_port = rport; \
user_data.local_port = lport; \ user_data.local_port = lport; \
user_data.test = #raddr"-"#laddr"-"#rport"-"#lport; \ user_data.test = #raddr"-"#laddr"-"#rport"-"#lport; \
\ \
ret = net_udp_register(raddr, laddr, rport, lport, \ set_port(family, (struct sockaddr *)raddr, \
(struct sockaddr *)laddr, rport, lport); \
\
ret = net_udp_register((struct sockaddr *)raddr, \
(struct sockaddr *)laddr, \
rport, lport, \
test_ok, &user_data, \ test_ok, &user_data, \
&handlers[i]); \ &handlers[i]); \
if (ret) { \ if (ret) { \
@ -415,8 +445,10 @@ void main_fiber(void)
}) })
#define REGISTER_FAIL(raddr, laddr, rport, lport) \ #define REGISTER_FAIL(raddr, laddr, rport, lport) \
ret = net_udp_register(raddr, laddr, rport, lport, test_fail, \ ret = net_udp_register((struct sockaddr *)raddr, \
INT_TO_POINTER(0), NULL); \ (struct sockaddr *)laddr, \
rport, lport, \
test_fail, INT_TO_POINTER(0), NULL); \
if (!ret) { \ if (!ret) { \
printk("UDP register invalid match %s failed\n", \ printk("UDP register invalid match %s failed\n", \
#raddr"-"#laddr"-"#rport"-"#lport); \ #raddr"-"#laddr"-"#rport"-"#lport); \
@ -467,47 +499,47 @@ void main_fiber(void)
return; \ return; \
} }
ud = REGISTER(&any_addr6, &any_addr6, 1234, 4242); ud = REGISTER(AF_INET6, &any_addr6, &any_addr6, 1234, 4242);
TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242); TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242);
TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242); TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242);
TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 61400); TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 61400);
TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 61400); TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 61400);
UNREGISTER(ud); UNREGISTER(ud);
ud = REGISTER(&any_addr4, &any_addr4, 1234, 4242); ud = REGISTER(AF_INET, &any_addr4, &any_addr4, 1234, 4242);
TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 1234, 4242); TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 1234, 4242);
TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 1234, 4242); TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 1234, 4242);
TEST_IPV4_FAIL(ud, &in4addr_peer, &in4addr_my, 1234, 4325); TEST_IPV4_FAIL(ud, &in4addr_peer, &in4addr_my, 1234, 4325);
TEST_IPV4_FAIL(ud, &in4addr_peer, &in4addr_my, 1234, 4325); TEST_IPV4_FAIL(ud, &in4addr_peer, &in4addr_my, 1234, 4325);
UNREGISTER(ud); UNREGISTER(ud);
ud = REGISTER(&any_addr6, NULL, 1234, 4242); ud = REGISTER(AF_INET6, &any_addr6, NULL, 1234, 4242);
TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242); TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242);
TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242); TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242);
TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 61400); TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 61400);
TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 61400); TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 61400);
UNREGISTER(ud); UNREGISTER(ud);
ud = REGISTER(NULL, &any_addr6, 1234, 4242); ud = REGISTER(AF_INET6, NULL, &any_addr6, 1234, 4242);
TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242); TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242);
TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242); TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242);
TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 61400); TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 61400);
TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 61400); TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 61400);
UNREGISTER(ud); UNREGISTER(ud);
ud = REGISTER(&peer_addr6, &my_addr6, 1234, 4242); ud = REGISTER(AF_INET6, &peer_addr6, &my_addr6, 1234, 4242);
TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242); TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 4242);
TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 4243); TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 1234, 4243);
ud = REGISTER(&peer_addr4, &my_addr4, 1234, 4242); ud = REGISTER(AF_INET, &peer_addr4, &my_addr4, 1234, 4242);
TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 1234, 4242); TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 1234, 4242);
TEST_IPV4_FAIL(ud, &in4addr_peer, &in4addr_my, 1234, 4243); TEST_IPV4_FAIL(ud, &in4addr_peer, &in4addr_my, 1234, 4243);
ud = REGISTER(NULL, NULL, 1234, 42423); ud = REGISTER(AF_UNSPEC, NULL, NULL, 1234, 42423);
TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 1234, 42423); TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 1234, 42423);
TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 42423); TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 42423);
ud = REGISTER(NULL, NULL, 1234, 0); ud = REGISTER(AF_UNSPEC, NULL, NULL, 1234, 0);
TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 1234, 42422); TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 1234, 42422);
TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 42422); TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 1234, 42422);
TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 1234, 42422); TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 1234, 42422);
@ -516,13 +548,13 @@ void main_fiber(void)
TEST_IPV4_FAIL(ud, &in4addr_peer, &in4addr_my, 12345, 42421); TEST_IPV4_FAIL(ud, &in4addr_peer, &in4addr_my, 12345, 42421);
TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 12345, 42421); TEST_IPV6_FAIL(ud, &in6addr_peer, &in6addr_my, 12345, 42421);
ud = REGISTER(NULL, NULL, 0, 0); ud = REGISTER(AF_UNSPEC, NULL, NULL, 0, 0);
TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 12345, 42421); TEST_IPV4_OK(ud, &in4addr_peer, &in4addr_my, 12345, 42421);
TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 12345, 42421); TEST_IPV6_OK(ud, &in6addr_peer, &in6addr_my, 12345, 42421);
/* Remote addr same as local addr, these two will never match */ /* Remote addr same as local addr, these two will never match */
REGISTER(&my_addr6, NULL, 1234, 4242); REGISTER(AF_INET6, &my_addr6, NULL, 1234, 4242);
REGISTER(&my_addr4, NULL, 1234, 4242); REGISTER(AF_INET, &my_addr4, NULL, 1234, 4242);
/* IPv4 remote addr and IPv6 remote addr, impossible combination */ /* IPv4 remote addr and IPv6 remote addr, impossible combination */
REGISTER_FAIL(&my_addr4, &my_addr6, 1234, 4242); REGISTER_FAIL(&my_addr4, &my_addr6, 1234, 4242);