From e198fba2d9da034e4189f0ee17650193045ae25f Mon Sep 17 00:00:00 2001 From: Daniel Thayer Date: Tue, 29 Nov 2016 13:40:11 -0600 Subject: [PATCH] Fix a build failure on OpenBSD The definition of a "struct pcap_pkthdr" on OpenBSD contains a member of type "struct bpf_timeval" instead of "struct timeval" used on other systems. Also, on OpenBSD the header netinet/if_ether.h does not #include net/if_arp.h as it does on other systems. --- src/Sessions.cc | 2 +- src/bro.bif | 2 +- src/iosource/Packet.cc | 5 +++-- src/iosource/Packet.h | 15 +++++++++++---- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/Sessions.cc b/src/Sessions.cc index b60ab52ce6..9361b7cde2 100644 --- a/src/Sessions.cc +++ b/src/Sessions.cc @@ -761,7 +761,7 @@ void NetSessions::DoNextInnerPacket(double t, const Packet* pkt, uint32 caplen, len; caplen = len = inner->TotalLen(); - struct timeval ts; + pkt_timeval ts; int link_type; Layer3Proto l3_proto; diff --git a/src/bro.bif b/src/bro.bif index e086bb8ae9..e168016f5e 100644 --- a/src/bro.bif +++ b/src/bro.bif @@ -3343,7 +3343,7 @@ function dump_packet%(pkt: pcap_packet, file_name: string%) : bool if ( addl_pkt_dumper ) { - struct timeval ts; + pkt_timeval ts; uint32 caplen, len, link_type; u_char *data; diff --git a/src/iosource/Packet.cc b/src/iosource/Packet.cc index 6b3bbe40f3..91bba76ba6 100644 --- a/src/iosource/Packet.cc +++ b/src/iosource/Packet.cc @@ -9,13 +9,14 @@ extern "C" { #elif defined(HAVE_SYS_ETHERNET_H) #include #elif defined(HAVE_NETINET_IF_ETHER_H) +#include #include #elif defined(HAVE_NET_ETHERTYPES_H) #include #endif } -void Packet::Init(int arg_link_type, struct timeval *arg_ts, uint32 arg_caplen, +void Packet::Init(int arg_link_type, pkt_timeval *arg_ts, uint32 arg_caplen, uint32 arg_len, const u_char *arg_data, int arg_copy, std::string arg_tag) { @@ -588,7 +589,7 @@ static iosource::PktDumper* dump = 0; Packet* Packet::Unserialize(UnserialInfo* info) { - struct timeval ts; + pkt_timeval ts; uint32 len, link_type; if ( ! (UNSERIALIZE((uint32 *)&ts.tv_sec) && diff --git a/src/iosource/Packet.h b/src/iosource/Packet.h index 5414e2ca0e..ec29f39ff5 100644 --- a/src/iosource/Packet.h +++ b/src/iosource/Packet.h @@ -5,6 +5,13 @@ #include "IP.h" #include "NetVar.h" +#if defined(__OpenBSD__) +#include +typedef struct bpf_timeval pkt_timeval; +#else +typedef struct timeval pkt_timeval; +#endif + /** * The Layer 3 type of a packet, as determined by the parsing code in Packet. */ @@ -48,7 +55,7 @@ public: * @param tag A textual tag to associate with the packet for * differentiating the input streams. */ - Packet(int link_type, struct timeval *ts, uint32 caplen, + Packet(int link_type, pkt_timeval *ts, uint32 caplen, uint32 len, const u_char *data, int copy = false, std::string tag = std::string("")) : data(0), l2_src(0), l2_dst(0) @@ -61,7 +68,7 @@ public: */ Packet() : data(0), l2_src(0), l2_dst(0) { - struct timeval ts = {0, 0}; + pkt_timeval ts = {0, 0}; Init(0, &ts, 0, 0, 0); } @@ -96,7 +103,7 @@ public: * @param tag A textual tag to associate with the packet for * differentiating the input streams. */ - void Init(int link_type, struct timeval *ts, uint32 caplen, + void Init(int link_type, pkt_timeval *ts, uint32 caplen, uint32 len, const u_char *data, int copy = false, std::string tag = std::string("")); @@ -155,7 +162,7 @@ public: // These are passed in through the constructor. std::string tag; /// Used in serialization double time; /// Timestamp reconstituted as float - struct timeval ts; /// Capture timestamp + pkt_timeval ts; /// Capture timestamp const u_char* data; /// Packet data. uint32 len; /// Actual length on wire uint32 cap_len; /// Captured packet length