|
|
|
|
@ -165,8 +165,16 @@ int route_bgp_update_my_nodeinfo(struct UTUN_INSTANCE* instance, struct ROUTE_BG
|
|
|
|
|
bool same = true; |
|
|
|
|
while (e_sock) { |
|
|
|
|
if (e_sock->local_addr.ss_family == AF_INET) { |
|
|
|
|
struct sockaddr_in* sin = (struct sockaddr_in*)&e_sock->local_addr; |
|
|
|
|
if (memcmp(sa->addr, &sin->sin_addr.s_addr, 4) != 0 || sa->port != ntohs(sin->sin_port) || |
|
|
|
|
struct sockaddr_in* if_sin = (struct sockaddr_in*)&e_sock->interface_addr; |
|
|
|
|
struct sockaddr_in* nat_sin = (struct sockaddr_in*)&e_sock->nat_addr; |
|
|
|
|
uint8_t nat_addr_cmp[4] = {0}; |
|
|
|
|
uint16_t nat_port_cmp = 0; |
|
|
|
|
if (e_sock->nat_addr.ss_family == AF_INET) { |
|
|
|
|
memcpy(nat_addr_cmp, &nat_sin->sin_addr.s_addr, 4); |
|
|
|
|
nat_port_cmp = ntohs(nat_sin->sin_port); |
|
|
|
|
} |
|
|
|
|
if (memcmp(sa->addr, &if_sin->sin_addr.s_addr, 4) != 0 || sa->port != ntohs(if_sin->sin_port) || |
|
|
|
|
memcmp(sa->nat_addr, nat_addr_cmp, 4) != 0 || sa->nat_port != nat_port_cmp || |
|
|
|
|
sa->type != e_sock->nat_type || sa->id != e_sock->sock_id) { |
|
|
|
|
same = false; |
|
|
|
|
break; |
|
|
|
|
@ -201,14 +209,22 @@ int route_bgp_update_my_nodeinfo(struct UTUN_INSTANCE* instance, struct ROUTE_BG
|
|
|
|
|
e_sock = instance->etcp_sockets; |
|
|
|
|
while (e_sock) { |
|
|
|
|
if (e_sock->local_addr.ss_family == AF_INET) { |
|
|
|
|
struct sockaddr_in* sin = (struct sockaddr_in*)&e_sock->local_addr; |
|
|
|
|
memcpy(sa->addr, &sin->sin_addr.s_addr, 4); |
|
|
|
|
sa->port = ntohs(sin->sin_port); |
|
|
|
|
struct sockaddr_in* if_sin = (struct sockaddr_in*)&e_sock->interface_addr; |
|
|
|
|
struct sockaddr_in* nat_sin = (struct sockaddr_in*)&e_sock->nat_addr; |
|
|
|
|
memcpy(sa->addr, &if_sin->sin_addr.s_addr, 4); |
|
|
|
|
sa->port = ntohs(if_sin->sin_port); |
|
|
|
|
sa->type = e_sock->nat_type; |
|
|
|
|
sa->id = e_sock->sock_id; |
|
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_BGP, "NODEINFO socket: addr=0x%02x%02x%02x%02x port=%u (from sin_addr=0x%08x sin_port=%u)", |
|
|
|
|
if (e_sock->nat_addr.ss_family == AF_INET) { |
|
|
|
|
memcpy(sa->nat_addr, &nat_sin->sin_addr.s_addr, 4); |
|
|
|
|
sa->nat_port = ntohs(nat_sin->sin_port); |
|
|
|
|
} else { |
|
|
|
|
memset(sa->nat_addr, 0, 4); |
|
|
|
|
sa->nat_port = 0; |
|
|
|
|
} |
|
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_BGP, "NODEINFO socket: addr=0x%02x%02x%02x%02x port=%u nat=0x%02x%02x%02x%02x:%u", |
|
|
|
|
sa->addr[0], sa->addr[1], sa->addr[2], sa->addr[3], sa->port, |
|
|
|
|
sin->sin_addr.s_addr, ntohs(sin->sin_port)); |
|
|
|
|
sa->nat_addr[0], sa->nat_addr[1], sa->nat_addr[2], sa->nat_addr[3], sa->nat_port); |
|
|
|
|
sa++; |
|
|
|
|
} |
|
|
|
|
e_sock = e_sock->next; |
|
|
|
|
|