diff --git a/tests/dump/ndndump.t.cpp b/tests/dump/ndndump.t.cpp
index 8facd0e..4e55fcc 100644
--- a/tests/dump/ndndump.t.cpp
+++ b/tests/dump/ndndump.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018, University of Memphis,
+ * Copyright (c) 2014-2019, University of Memphis,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
  * This file is part of ndn-tools (Named Data Networking Essential Tools).
@@ -351,14 +351,14 @@
   dump.wantTimestamp = false;
 
   tcphdr tcpHdr1{};
-  tcpHdr1.th_off = 0x2;
+  tcpHdr1.TH_OFF = 0x2;
 
   EncodingBuffer pkt1;
   this->receiveTcp4(pkt1, &tcpHdr1);
   BOOST_CHECK(output.is_equal("IP 0.0.0.0 > 0.0.0.0, TCP bad header length 8\n"));
 
   tcphdr tcpHdr2{};
-  tcpHdr2.th_off = 0xf;
+  tcpHdr2.TH_OFF = 0xf;
 
   EncodingBuffer pkt2;
   this->receiveTcp4(pkt2, &tcpHdr2);
@@ -370,16 +370,16 @@
   dump.wantTimestamp = false;
 
   udphdr udpHdr1{};
-  udpHdr1.uh_ulen = 3;
-  endian::native_to_big_inplace(udpHdr1.uh_ulen);
+  udpHdr1.UH_LEN = 3;
+  endian::native_to_big_inplace(udpHdr1.UH_LEN);
 
   EncodingBuffer pkt1;
   this->receiveUdp4(pkt1, &udpHdr1);
   BOOST_CHECK(output.is_equal("IP 0.0.0.0 > 0.0.0.0, UDP bad length 3\n"));
 
   udphdr udpHdr2{};
-  udpHdr2.uh_ulen = 1000;
-  endian::native_to_big_inplace(udpHdr2.uh_ulen);
+  udpHdr2.UH_LEN = 1000;
+  endian::native_to_big_inplace(udpHdr2.UH_LEN);
 
   EncodingBuffer pkt2;
   this->receiveUdp4(pkt2, &udpHdr2);
diff --git a/tools/dump/ndndump.cpp b/tools/dump/ndndump.cpp
index b13b7ef..d5b6571 100644
--- a/tools/dump/ndndump.cpp
+++ b/tools/dump/ndndump.cpp
@@ -454,7 +454,7 @@
   }
 
   auto th = reinterpret_cast<const tcphdr*>(pkt);
-  size_t tcpHdrLen = th->th_off * 4;
+  size_t tcpHdrLen = th->TH_OFF * 4;
   if (tcpHdrLen < sizeof(tcphdr)) {
     out << " bad header length " << tcpHdrLen;
     return true;
@@ -483,7 +483,7 @@
   }
 
   auto uh = reinterpret_cast<const udphdr*>(pkt);
-  size_t udpLen = endian::big_to_native(uh->uh_ulen);
+  size_t udpLen = endian::big_to_native(uh->UH_LEN);
   if (udpLen < sizeof(udphdr)) {
     out << " bad length " << udpLen;
     return true;
diff --git a/tools/dump/ndndump.hpp b/tools/dump/ndndump.hpp
index 0198026..58ba032 100644
--- a/tools/dump/ndndump.hpp
+++ b/tools/dump/ndndump.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2011-2018, Regents of the University of California.
+ * Copyright (c) 2011-2019, Regents of the University of California.
  *
  * This file is part of ndn-tools (Named Data Networking Essential Tools).
  * See AUTHORS.md for complete list of ndn-tools authors and contributors.
@@ -25,6 +25,18 @@
 #include <pcap.h>
 #include <regex>
 
+#ifdef HAVE_BSD_TCPHDR
+#define TH_OFF th_off
+#else
+#define TH_OFF doff
+#endif
+
+#ifdef HAVE_BSD_UDPHDR
+#define UH_LEN uh_ulen
+#else
+#define UH_LEN len
+#endif
+
 namespace ndn {
 namespace dump {
 
diff --git a/tools/dump/wscript b/tools/dump/wscript
index cd9971b..df23de9 100644
--- a/tools/dump/wscript
+++ b/tools/dump/wscript
@@ -4,6 +4,14 @@
 def configure(conf):
     conf.check_cfg(package='libpcap', uselib_store='PCAP',
                    path='pcap-config', args='--libs --cflags')
+    conf.check_cxx(msg='Checking if struct tcphdr has member th_off ',
+                   define_name='HAVE_BSD_TCPHDR', mandatory=False,
+                   fragment='''#include <netinet/tcp.h>
+                               int main() { tcphdr th; th.th_off; }''')
+    conf.check_cxx(msg='Checking if struct udphdr has member uh_ulen',
+                   define_name='HAVE_BSD_UDPHDR', mandatory=False,
+                   fragment='''#include <netinet/udp.h>
+                               int main() { udphdr uh; uh.uh_ulen; }''')
 
 def build(bld):
     bld.objects(
