Use a simple Random Early Drop algorithm in send_tcppacket().
authorGuus Sliepen <guus@tinc-vpn.org>
Mon, 9 Mar 2009 13:04:31 +0000 (14:04 +0100)
committerGuus Sliepen <guus@tinc-vpn.org>
Mon, 9 Mar 2009 13:04:31 +0000 (14:04 +0100)
src/net.c
src/net_setup.c
src/protocol_misc.c

index 41b3fb9..0cdc72c 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -366,6 +366,7 @@ int main_loop(void)
        last_graph_dump = now;
        
        srand(now);
+       srand48(now);
 
        running = true;
 
index 256fdf7..3eb5644 100644 (file)
@@ -547,7 +547,7 @@ bool setup_network_connections(void)
                pingtimeout = pinginterval;
 
        if(!get_config_int(lookup_config(config_tree, "MaxOutputBufferSize"), &maxoutbufsize))
-               maxoutbufsize = 4 * MTU;
+               maxoutbufsize = 10 * MTU;
 
        if(!setup_myself())
                return false;
index 52e97e5..8f56aee 100644 (file)
@@ -155,9 +155,10 @@ bool send_tcppacket(connection_t *c, vpn_packet_t *packet)
 {
        cp();
 
-       /* If there already is a lot of data in the outbuf buffer, discard this packet. */
+       /* If there already is a lot of data in the outbuf buffer, discard this packet.
+           We use a very simple Random Early Drop algorithm. */
 
-       if(c->outbuflen > maxoutbufsize)
+       if(2.0 * c->outbuflen / (double)maxoutbufsize - 1 > drand48())
                return true;
 
        if(!send_request(c, "%d %hd", PACKET, packet->len))