]> git.meshlink.io Git - meshlink/commitdiff
Restart UDP SPTPS when a node reconnects with a new session ID.
authorGuus Sliepen <guus@meshlink.io>
Sun, 27 Oct 2019 13:02:47 +0000 (14:02 +0100)
committerGuus Sliepen <guus@meshlink.io>
Sun, 27 Oct 2019 13:02:47 +0000 (14:02 +0100)
If a node restarts, but its old connection was not considered closed
yet, the graph algorithm never saw it go down. We still want to ensure
we restart UDP SPTPS in this case.

src/graph.c

index 9955ea41644721a208041de60860329158998e04..d40087d8dc1c65f680c9f55b403f52c3acfc110f 100644 (file)
@@ -144,6 +144,23 @@ static void check_reachability(meshlink_handle_t *mesh) {
                        if(n->utcp) {
                                utcp_abort_all_connections(n->utcp);
                        }
+
+                       if(n->status.visited == n->status.reachable) {
+                               /* This session replaces the previous one without changing reachability status.
+                                * We still need to reset the UDP SPTPS state.
+                                */
+                               n->status.validkey = false;
+                               sptps_stop(&n->sptps);
+                               n->status.waitingforkey = false;
+                               n->last_req_key = 0;
+
+                               n->status.udp_confirmed = false;
+                               n->maxmtu = MTU;
+                               n->minmtu = 0;
+                               n->mtuprobes = 0;
+
+                               timeout_del(&mesh->loop, &n->mtutimeout);
+                       }
                }
 
                if(n->status.visited != n->status.reachable) {