From: Marcin Siodelski Date: Mon, 23 Jun 2014 17:02:46 +0000 (+0200) Subject: [3437] Filter out packets sent to global unicast address. X-Git-Tag: trac3473_base~2^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1ea0e90778c80e6138a13d125daabd55b0920e55;p=thirdparty%2Fkea.git [3437] Filter out packets sent to global unicast address. On BSD the multicast packets are received on the socket bound to any address. So, the packets sent to global unicast address must be filtered out by the DHCP server. --- diff --git a/src/lib/dhcp/pkt_filter_inet6.cc b/src/lib/dhcp/pkt_filter_inet6.cc index c6d7b97090..686b709dbf 100644 --- a/src/lib/dhcp/pkt_filter_inet6.cc +++ b/src/lib/dhcp/pkt_filter_inet6.cc @@ -181,6 +181,17 @@ PktFilterInet6::receive(const SocketInfo& socket_info) { isc_throw(SocketReadError, "failed to receive data"); } + // Filter out packets sent to global unicast address (not link local and + // not multicast) if the socket is set to listen multicast traffic and + // is bound to in6addr_any. The traffic sent to global unicast address is + // received via dedicated socket. + IOAddress local_addr = IOAddress::fromBytes(AF_INET6, + reinterpret_cast(&to_addr)); + if ((socket_info.addr_ == IOAddress("::")) && + !(local_addr.isV6Multicast() || local_addr.isV6LinkLocal())) { + return (Pkt6Ptr()); + } + // Let's create a packet. Pkt6Ptr pkt; try {