Use xoshiro256** to generate pseudo-random numbers.
[tinc] / src / route.c
index 559cf2f..166b8b2 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "connection.h"
 #include "control_common.h"
+#include "crypto.h"
 #include "ethernet.h"
 #include "ipv4.h"
 #include "ipv6.h"
@@ -31,6 +32,7 @@
 #include "protocol.h"
 #include "route.h"
 #include "subnet.h"
+#include "utils.h"
 
 rmode_t routing_mode = RMODE_ROUTER;
 fmode_t forwarding_mode = FMODE_INTERNAL;
@@ -54,10 +56,6 @@ static const size_t icmp6_size = sizeof(struct icmp6_hdr);
 static const size_t ns_size = sizeof(struct nd_neighbor_solicit);
 static const size_t opt_size = sizeof(struct nd_opt_hdr);
 
-#ifndef MAX
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-#endif
-
 static timeout_t age_subnets_timeout;
 
 /* RFC 1071 */
@@ -485,7 +483,7 @@ static void clamp_mss(const node_t *source, const node_t *via, vpn_packet_t *pac
                csum += csum >> 16;
                csum ^= 0xffff;
                DATA(packet)[start + 16] = csum >> 8;
-               DATA(packet)[start + 17] = csum;
+               DATA(packet)[start + 17] = csum & 0xff;
                break;
        }
 }
@@ -494,7 +492,7 @@ static void age_subnets(void *data) {
        (void)data;
        bool left = false;
 
-       for splay_each(subnet_t, s, myself->subnet_tree) {
+       for splay_each(subnet_t, s, &myself->subnet_tree) {
                if(s->expires && s->expires < now.tv_sec) {
                        if(debug_level >= DEBUG_TRAFFIC) {
                                char netstr[MAXNETSTR];
@@ -519,7 +517,7 @@ static void age_subnets(void *data) {
 
        if(left)
                timeout_set(&age_subnets_timeout, &(struct timeval) {
-               10, rand() % 100000
+               10, jitter()
        });
 }
 
@@ -549,7 +547,7 @@ static void learn_mac(mac_t *address) {
                        }
 
                timeout_add(&age_subnets_timeout, age_subnets, NULL, &(struct timeval) {
-                       10, rand() % 100000
+                       10, jitter()
                });
        } else {
                if(subnet->expires) {