X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fnet_packet.c;h=e4f3295af941bdd92335298c30b9c776e9b9c8dd;hp=ea363b7f98dfcaa0f423992d6c5386721b0b7597;hb=46e373d99b4559245885c94930a6979d03a6f12b;hpb=69337518fb6cff60243153792449c1ba6c8fda40 diff --git a/src/net_packet.c b/src/net_packet.c index ea363b7f..e4f3295a 100644 --- a/src/net_packet.c +++ b/src/net_packet.c @@ -324,32 +324,16 @@ static void choose_udp_address(meshlink_handle_t *mesh, const node_t *n, const s } static void choose_broadcast_address(meshlink_handle_t *mesh, const node_t *n, const sockaddr_t **sa, int *sock) { - static sockaddr_t broadcast_ipv4 = { - .in = { - .sin_family = AF_INET, - .sin_addr.s_addr = -1, - } - }; - - static sockaddr_t broadcast_ipv6 = { - .in6 = { - .sin6_family = AF_INET6, - .sin6_addr.s6_addr[0x0] = 0xff, - .sin6_addr.s6_addr[0x1] = 0x02, - .sin6_addr.s6_addr[0xf] = 0x01, - } - }; - *sock = prng(mesh, mesh->listen_sockets); + sockaddr_t *broadcast_sa = &mesh->listen_socket[*sock].broadcast_sa; - if(mesh->listen_socket[*sock].sa.sa.sa_family == AF_INET6) { - broadcast_ipv6.in6.sin6_port = n->prevedge->address.in.sin_port; - broadcast_ipv6.in6.sin6_scope_id = mesh->listen_socket[*sock].sa.in6.sin6_scope_id; - *sa = &broadcast_ipv6; + if(broadcast_sa->sa.sa_family == AF_INET6) { + broadcast_sa->in6.sin6_port = n->prevedge->address.in.sin_port; } else { - broadcast_ipv4.in.sin_port = n->prevedge->address.in.sin_port; - *sa = &broadcast_ipv4; + broadcast_sa->in.sin_port = n->prevedge->address.in.sin_port; } + + *sa = broadcast_sa; } static void send_udppacket(meshlink_handle_t *mesh, node_t *n, vpn_packet_t *origpkt) {