From 242c4e2ca67d0b5c78dfe6e68a5ddcd27be1de99 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sat, 24 Oct 2009 21:53:01 +0200 Subject: [PATCH] Forward packets to not directly reachable hosts via UDP if possible. If MTU probing discovered a node was not reachable via UDP, packets for it were forwarded to the next hop, but always via TCP, even if the next hop was reachable via UDP. This is now fixed by retrying to send the packet using send_packet() if the destination is not the same as the nexthop. --- src/net_packet.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/net_packet.c b/src/net_packet.c index 3466f87e..054a66fe 100644 --- a/src/net_packet.c +++ b/src/net_packet.c @@ -369,10 +369,13 @@ static void send_udppacket(node_t *n, vpn_packet_t *origpkt) { if(n->options & OPTION_PMTU_DISCOVERY && inpkt->len > n->minmtu && (inpkt->data[12] | inpkt->data[13])) { ifdebug(TRAFFIC) logger(LOG_INFO, - "Packet for %s (%s) larger than minimum MTU, forwarding via TCP", - n->name, n->hostname); + "Packet for %s (%s) larger than minimum MTU, forwarding via %s", + n->name, n->hostname, n != n->nexthop ? n->nexthop->name : "TCP"); - send_tcppacket(n->nexthop->connection, origpkt); + if(n != n->nexthop) + send_packet(n->nexthop, origpkt); + else + send_tcppacket(n->nexthop->connection, origpkt); return; } -- 2.39.5