From: Guus Sliepen Date: Sat, 24 Oct 2009 19:53:01 +0000 (+0200) Subject: Forward packets to not directly reachable hosts via UDP if possible. X-Git-Tag: release-1.0.11~7 X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=commitdiff_plain;h=242c4e2ca67d0b5c78dfe6e68a5ddcd27be1de99 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. --- 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; }