Keep track of the largest UDP packet size received from a node.
authorGuus Sliepen <guus@tinc-vpn.org>
Sun, 11 Jan 2015 15:10:58 +0000 (16:10 +0100)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 11 Jan 2015 15:10:58 +0000 (16:10 +0100)
src/graph.c
src/net_packet.c
src/node.c
src/node.h

index 7bace2e..49161c1 100644 (file)
@@ -238,6 +238,7 @@ static void check_reachability(void) {
 
                        n->status.udp_confirmed = false;
                        n->maxmtu = MTU;
+                       n->maxrecentlen = 0;
                        n->minmtu = 0;
                        n->mtuprobes = 0;
 
index b2c6f90..96f8f10 100644 (file)
@@ -95,6 +95,7 @@ static void udp_probe_timeout_handler(void *data) {
 
        logger(DEBUG_TRAFFIC, LOG_INFO, "Too much time has elapsed since last UDP ping response from %s (%s), stopping UDP communication", n->name, n->hostname);
        n->status.udp_confirmed = false;
+       n->maxrecentlen = 0;
        n->mtuprobes = 0;
        n->minmtu = 0;
        n->maxmtu = MTU;
@@ -387,6 +388,9 @@ static bool receive_udppacket(node_t *n, vpn_packet_t *inpkt) {
                origlen -= MTU/64 + 20;
        }
 
+       if(inpkt->len > n->maxrecentlen)
+               n->maxrecentlen = inpkt->len;
+
        inpkt->priority = 0;
 
        if(!DATA(inpkt)[12] && !DATA(inpkt)[13])
@@ -962,6 +966,7 @@ static void try_mtu(node_t *n) {
                return;
 
        if(udp_discovery && !n->status.udp_confirmed) {
+               n->maxrecentlen = 0;
                n->mtuprobes = 0;
                n->minmtu = 0;
                n->maxmtu = MTU;
index 6623f46..fb4b7eb 100644 (file)
@@ -179,6 +179,7 @@ void update_node_udp(node_t *n, const sockaddr_t *sa) {
        /* invalidate UDP information - note that this is a security feature as well to make sure
           we can't be tricked into flooding any random address with UDP packets */
        n->status.udp_confirmed = false;
+       n->maxrecentlen = 0;
        n->mtuprobes = 0;
        n->minmtu = 0;
        n->maxmtu = MTU;
index aadb0b5..03bd020 100644 (file)
@@ -93,6 +93,8 @@ typedef struct node_t {
 
        struct timeval mtu_ping_sent;           /* Last time a MTU probe was sent */
 
+       length_t maxrecentlen;                  /* Maximum size of recently received packets */
+
        length_t mtu;                           /* Maximum size of packets to send to this node */
        length_t minmtu;                        /* Probed minimum MTU */
        length_t maxmtu;                        /* Probed maximum MTU */