From: Guus Sliepen Date: Tue, 23 Dec 2008 22:31:38 +0000 (+0000) Subject: Handle broadcast and multicast packets in router mode. X-Git-Tag: release-1.0.9~3 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=de032054dee67bcc406b4a15fb9e957a766d016a;p=oweals%2Ftinc.git Handle broadcast and multicast packets in router mode. Multicast packets are treated as broadcast packets. Based on a patch from Max Rijevski. --- diff --git a/THANKS b/THANKS index cd99f2a..ce5ec13 100644 --- a/THANKS +++ b/THANKS @@ -21,6 +21,7 @@ We would like to thank the following people for their contributions to tinc: * Markus Goetz * Martin Kihlgren * Matias Carrasco +* Max Rijevski * Miles Nordin * Nick Patavalis * Paul Littlefield diff --git a/src/route.c b/src/route.c index 0123107..742fbc2 100644 --- a/src/route.c +++ b/src/route.c @@ -376,7 +376,14 @@ static void route_ipv4(node_t *source, vpn_packet_t *packet) if(!checklength(source, packet, ether_size + ip_size)) return; - route_ipv4_unicast(source, packet); + if(packet->data[30] & 0xf0 == 0xe0 || + packet->data[30] == 255 && + packet->data[31] == 255 && + packet->data[32] == 255 && + packet->data[33] == 255) + broadcast_packet(source, packet); + else + route_ipv4_unicast(source, packet); } /* RFC 2463 */ @@ -645,7 +652,10 @@ static void route_ipv6(node_t *source, vpn_packet_t *packet) return; } - route_ipv6_unicast(source, packet); + if(packet->data[38] == 255) + broadcast_packet(source, packet); + else + route_ipv6_unicast(source, packet); } /* RFC 826 */