Marking potential late packets was in the wrong place.
[tinc] / src / net_packet.c
index 8753bf6..2a3e5f2 100644 (file)
@@ -1,7 +1,7 @@
 /*
     net_packet.c -- Handles in- and outgoing VPN packets
-    Copyright (C) 1998-2003 Ivo Timmermans <ivo@o2w.nl>,
-                  2000-2003 Guus Sliepen <guus@sliepen.eu.org>
+    Copyright (C) 1998-2004 Ivo Timmermans <ivo@tinc-vpn.org>,
+                  2000-2004 Guus Sliepen <guus@tinc-vpn.org>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: net_packet.c,v 1.1.2.48 2003/12/24 10:48:14 guus Exp $
+    $Id$
 */
 
 #include "system.h"
@@ -35,6 +35,7 @@
 #include "conf.h"
 #include "connection.h"
 #include "device.h"
+#include "ethernet.h"
 #include "event.h"
 #include "graph.h"
 #include "list.h"
@@ -233,9 +234,11 @@ static void receive_udppacket(node_t *n, vpn_packet_t *inpkt)
                        if(inpkt->seqno <= n->received_seqno - sizeof(n->late) * 8 || !(n->late[(inpkt->seqno / 8) % sizeof(n->late)] & (1 << inpkt->seqno % 8))) {
                                logger(LOG_WARNING, _("Got late or replayed packet from %s (%s), seqno %d, last received %d"),
                                           n->name, n->hostname, inpkt->seqno, n->received_seqno);
-                       } else
-                               for(i = n->received_seqno + 1; i < inpkt->seqno; i++)
-                                       n->late[(inpkt->seqno / 8) % sizeof(n->late)] |= 1 << i % 8;
+                               return;
+                       }
+               } else {
+                       for(i = n->received_seqno + 1; i < inpkt->seqno; i++)
+                               n->late[(inpkt->seqno / 8) % sizeof(n->late)] |= 1 << i % 8;
                }
        }
        
@@ -412,6 +415,8 @@ void send_packet(const node_t *n, vpn_packet_t *packet)
        cp();
 
        if(n == myself) {
+               if(overwrite_mac)
+                        memcpy(packet->data, mymac.x, ETH_ALEN);
                write_packet(packet);
                return;
        }