Parcourir la source

[5003] Fixed PktFilterBPF for use of loopback interface on OSX.

Marcin Siodelski il y a 8 ans
Parent
commit
d19dc2502e
1 fichiers modifiés avec 9 ajouts et 4 suppressions
  1. 9 4
      src/lib/dhcp/pkt_filter_bpf.cc

+ 9 - 4
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.