From d19dc2502e71e290773af125419a1325708619e4 Mon Sep 17 00:00:00 2001 From: Marcin Siodelski Date: Mon, 5 Sep 2016 15:48:36 +0200 Subject: [PATCH] [5003] Fixed PktFilterBPF for use of loopback interface on OSX. --- src/lib/dhcp/pkt_filter_bpf.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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. -- 2.47.2