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://git.librecmc.org/?a=commitdiff_plain;h=242c4e2ca67d0b5c78dfe6e68a5ddcd27be1de99;p=oweals%2Ftinc.git 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 3466f87..054a66f 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; }