]> git.meshlink.io Git - meshlink/blobdiff - src/net_packet.c
Add assert() calls to the library.
[meshlink] / src / net_packet.c
index d1cbf47d91397ed08f0e87a61131aefac8a99981..493a38ff555e9e8f59dbc40cc87298dccf7b459b 100644 (file)
@@ -70,7 +70,7 @@ static void send_mtu_probe_handler(event_loop_t *loop, void *data) {
        if(n->mtuprobes > 32) {
                if(!n->minmtu) {
                        n->mtuprobes = 31;
-                       timeout = mesh->pinginterval;
+                       timeout = mesh->dev_class_traits[n->devclass].pinginterval;
                        goto end;
                }
 
@@ -79,6 +79,8 @@ static void send_mtu_probe_handler(event_loop_t *loop, void *data) {
                n->mtuprobes = 1;
                n->minmtu = 0;
                n->maxmtu = MTU;
+
+               update_node_pmtu(mesh, n);
        }
 
        if(n->mtuprobes >= 10 && n->mtuprobes < 32 && !n->minmtu) {
@@ -89,6 +91,7 @@ static void send_mtu_probe_handler(event_loop_t *loop, void *data) {
        if(n->mtuprobes == 30 || (n->mtuprobes < 30 && n->minmtu >= n->maxmtu)) {
                if(n->minmtu > n->maxmtu) {
                        n->minmtu = n->maxmtu;
+                       update_node_pmtu(mesh, n);
                } else {
                        n->maxmtu = n->minmtu;
                }
@@ -99,10 +102,10 @@ static void send_mtu_probe_handler(event_loop_t *loop, void *data) {
        }
 
        if(n->mtuprobes == 31) {
-               timeout = mesh->pinginterval;
+               timeout = mesh->dev_class_traits[n->devclass].pinginterval;
                goto end;
        } else if(n->mtuprobes == 32) {
-               timeout = mesh->pingtimeout;
+               timeout = mesh->dev_class_traits[n->devclass].pingtimeout;
        }
 
        for(int i = 0; i < 5; i++) {
@@ -152,6 +155,11 @@ void send_mtu_probe(meshlink_handle_t *mesh, node_t *n) {
 }
 
 static void mtu_probe_h(meshlink_handle_t *mesh, node_t *n, vpn_packet_t *packet, uint16_t len) {
+       if(len < 64) {
+               logger(mesh, MESHLINK_WARNING, "Got too short MTU probe length %d from %s", packet->len, n->name);
+               return;
+       }
+
        logger(mesh, MESHLINK_DEBUG, "Got MTU probe length %d from %s", packet->len, n->name);
 
        if(!packet->data[0]) {
@@ -198,6 +206,7 @@ static void mtu_probe_h(meshlink_handle_t *mesh, node_t *n, vpn_packet_t *packet
 
                if(n->minmtu < len) {
                        n->minmtu = len;
+                       update_node_pmtu(mesh, n);
                }
        }
 }
@@ -353,6 +362,10 @@ static void send_udppacket(meshlink_handle_t *mesh, node_t *n, vpn_packet_t *ori
 }
 
 bool send_sptps_data(void *handle, uint8_t type, const void *data, size_t len) {
+       assert(handle);
+       assert(data);
+       assert(len);
+
        node_t *to = handle;
        meshlink_handle_t *mesh = to->mesh;
 
@@ -401,6 +414,9 @@ bool send_sptps_data(void *handle, uint8_t type, const void *data, size_t len) {
 }
 
 bool receive_sptps_record(void *handle, uint8_t type, const void *data, uint16_t len) {
+       assert(handle);
+       assert(!data || len);
+
        node_t *from = handle;
        meshlink_handle_t *mesh = from->mesh;