]> git.meshlink.io Git - meshlink/blobdiff - src/net_packet.c
Move listen_sockets to mesh.
[meshlink] / src / net_packet.c
index c60d5a531ae87bb22d8471bd8e6c608802bf7a37..a8c8b03619924bfe0e18e493c8e8f221a6891942 100644 (file)
@@ -43,8 +43,6 @@ int keylifetime = 0;
 static void send_udppacket(node_t *, vpn_packet_t *);
 
 unsigned replaywin = 16;
-bool localdiscovery = false;
-sockaddr_t localdiscovery_address;
 
 #define MAX_SEQNO 1073741824
 
@@ -112,7 +110,7 @@ static void send_mtu_probe_handler(void *data) {
                timeout = pingtimeout;
        }
 
-       for(int i = 0; i < 4 + localdiscovery; i++) {
+       for(int i = 0; i < 4 + mesh->localdiscovery; i++) {
                int len;
 
                if(i == 0) {
@@ -388,13 +386,13 @@ static void choose_udp_address(const node_t *n, const sockaddr_t **sa, int *sock
 
        if(candidate) {
                *sa = &candidate->address;
-               *sock = rand() % listen_sockets;
+               *sock = rand() % mesh->listen_sockets;
        }
 
        /* Make sure we have a suitable socket for the chosen address */
-       if(listen_socket[*sock].sa.sa.sa_family != (*sa)->sa.sa_family) {
-               for(int i = 0; i < listen_sockets; i++) {
-                       if(listen_socket[i].sa.sa.sa_family == (*sa)->sa.sa_family) {
+       if(mesh->listen_socket[*sock].sa.sa.sa_family != (*sa)->sa.sa_family) {
+               for(int i = 0; i < mesh->listen_sockets; i++) {
+                       if(mesh->listen_socket[i].sa.sa.sa_family == (*sa)->sa.sa_family) {
                                *sock = i;
                                break;
                        }
@@ -419,21 +417,21 @@ static void choose_broadcast_address(const node_t *n, const sockaddr_t **sa, int
                }
        };
 
-       *sock = rand() % listen_sockets;
+       *sock = rand() % mesh->listen_sockets;
 
-       if(listen_socket[*sock].sa.sa.sa_family == AF_INET6) {
-               if(localdiscovery_address.sa.sa_family == AF_INET6) {
-                       localdiscovery_address.in6.sin6_port = n->prevedge->address.in.sin_port;
-                       *sa = &localdiscovery_address;
+       if(mesh->listen_socket[*sock].sa.sa.sa_family == AF_INET6) {
+               if(mesh->localdiscovery_address.sa.sa_family == AF_INET6) {
+                       mesh->localdiscovery_address.in6.sin6_port = n->prevedge->address.in.sin_port;
+                       *sa = &mesh->localdiscovery_address;
                } else {
                        broadcast_ipv6.in6.sin6_port = n->prevedge->address.in.sin_port;
-                       broadcast_ipv6.in6.sin6_scope_id = listen_socket[*sock].sa.in6.sin6_scope_id;
+                       broadcast_ipv6.in6.sin6_scope_id = mesh->listen_socket[*sock].sa.in6.sin6_scope_id;
                        *sa = &broadcast_ipv6;
                }
        } else {
-               if(localdiscovery_address.sa.sa_family == AF_INET) {
-                       localdiscovery_address.in.sin_port = n->prevedge->address.in.sin_port;
-                       *sa = &localdiscovery_address;
+               if(mesh->localdiscovery_address.sa.sa_family == AF_INET) {
+                       mesh->localdiscovery_address.in.sin_port = n->prevedge->address.in.sin_port;
+                       *sa = &mesh->localdiscovery_address;
                } else {
                        broadcast_ipv4.in.sin_port = n->prevedge->address.in.sin_port;
                        *sa = &broadcast_ipv4;
@@ -486,7 +484,7 @@ bool send_sptps_data(void *handle, uint8_t type, const char *data, size_t len) {
        else
                choose_udp_address(to, &sa, &sock);
 
-       if(sendto(listen_socket[sock].udp.fd, data, len, 0, &sa->sa, SALEN(sa->sa)) < 0 && !sockwouldblock(sockerrno)) {
+       if(sendto(mesh->listen_socket[sock].udp.fd, data, len, 0, &sa->sa, SALEN(sa->sa)) < 0 && !sockwouldblock(sockerrno)) {
                if(sockmsgsize(sockerrno)) {
                        if(to->maxmtu >= len)
                                to->maxmtu = len - 1;
@@ -663,7 +661,7 @@ void handle_incoming_vpn_data(void *data, int flags) {
                        return;
        }
 
-       n->sock = ls - listen_socket;
+       n->sock = ls - mesh->listen_socket;
 
        receive_udppacket(n, &pkt);
 }