From: Marcin Siodelski Date: Mon, 5 Sep 2016 13:48:36 +0000 (+0200) Subject: [5003] Fixed PktFilterBPF for use of loopback interface on OSX. X-Git-Tag: trac5006_base~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d19dc2502e71e290773af125419a1325708619e4;p=thirdparty%2Fkea.git [5003] Fixed PktFilterBPF for use of loopback interface on OSX. --- diff --git a/src/lib/dhcp/pkt_filter_bpf.cc b/src/lib/dhcp/pkt_filter_bpf.cc index 3296b54f78..00c5d66676 100644 --- a/src/lib/dhcp/pkt_filter_bpf.cc +++ b/src/lib/dhcp/pkt_filter_bpf.cc @@ -554,13 +554,18 @@ PktFilterBPF::send(const Iface& iface, uint16_t sockfd, const Pkt4Ptr& pkt) { pkt->setLocalHWAddr(hwaddr); } - /// Loopback interface requires special treatment. It doesn't - /// use the ethernet header but rather a 4-bytes long pseudo header - /// holding an address family type (see bpf.c in OS sources). + // Loopback interface requires special treatment. It doesn't + // use the ethernet header but rather a 4-bytes long pseudo header + // holding an address family type (see bpf.c in OS sources). + // On OSX, it even lacks pseudo header. +#if !defined (OS_OSX) if (iface.flag_loopback_) { writeAFPseudoHeader(AF_INET, buf); + } +#endif - } else { + // If this is not a loopback interface create Ethernet frame header. + if (!iface.flag_loopback_) { // Ethernet frame header. // Note that we don't validate whether HW addresses in 'pkt' // are valid because they are validated by the function called.