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.
This commit is contained in:
Daniel Thayer 2016-11-29 13:40:11 -06:00
parent 15f2b30c73
commit e198fba2d9
4 changed files with 16 additions and 8 deletions

View file

@ -761,7 +761,7 @@ void NetSessions::DoNextInnerPacket(double t, const Packet* pkt,
uint32 caplen, len; uint32 caplen, len;
caplen = len = inner->TotalLen(); caplen = len = inner->TotalLen();
struct timeval ts; pkt_timeval ts;
int link_type; int link_type;
Layer3Proto l3_proto; Layer3Proto l3_proto;

View file

@ -3343,7 +3343,7 @@ function dump_packet%(pkt: pcap_packet, file_name: string%) : bool
if ( addl_pkt_dumper ) if ( addl_pkt_dumper )
{ {
struct timeval ts; pkt_timeval ts;
uint32 caplen, len, link_type; uint32 caplen, len, link_type;
u_char *data; u_char *data;

View file

@ -9,13 +9,14 @@ extern "C" {
#elif defined(HAVE_SYS_ETHERNET_H) #elif defined(HAVE_SYS_ETHERNET_H)
#include <sys/ethernet.h> #include <sys/ethernet.h>
#elif defined(HAVE_NETINET_IF_ETHER_H) #elif defined(HAVE_NETINET_IF_ETHER_H)
#include <net/if_arp.h>
#include <netinet/if_ether.h> #include <netinet/if_ether.h>
#elif defined(HAVE_NET_ETHERTYPES_H) #elif defined(HAVE_NET_ETHERTYPES_H)
#include <net/ethertypes.h> #include <net/ethertypes.h>
#endif #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, uint32 arg_len, const u_char *arg_data, int arg_copy,
std::string arg_tag) std::string arg_tag)
{ {
@ -588,7 +589,7 @@ static iosource::PktDumper* dump = 0;
Packet* Packet::Unserialize(UnserialInfo* info) Packet* Packet::Unserialize(UnserialInfo* info)
{ {
struct timeval ts; pkt_timeval ts;
uint32 len, link_type; uint32 len, link_type;
if ( ! (UNSERIALIZE((uint32 *)&ts.tv_sec) && if ( ! (UNSERIALIZE((uint32 *)&ts.tv_sec) &&

View file

@ -5,6 +5,13 @@
#include "IP.h" #include "IP.h"
#include "NetVar.h" #include "NetVar.h"
#if defined(__OpenBSD__)
#include <net/bpf.h>
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. * 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 * @param tag A textual tag to associate with the packet for
* differentiating the input streams. * 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, uint32 len, const u_char *data, int copy = false,
std::string tag = std::string("")) std::string tag = std::string(""))
: data(0), l2_src(0), l2_dst(0) : data(0), l2_src(0), l2_dst(0)
@ -61,7 +68,7 @@ public:
*/ */
Packet() : data(0), l2_src(0), l2_dst(0) 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); Init(0, &ts, 0, 0, 0);
} }
@ -96,7 +103,7 @@ public:
* @param tag A textual tag to associate with the packet for * @param tag A textual tag to associate with the packet for
* differentiating the input streams. * 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, uint32 len, const u_char *data, int copy = false,
std::string tag = std::string("")); std::string tag = std::string(""));
@ -155,7 +162,7 @@ public:
// These are passed in through the constructor. // These are passed in through the constructor.
std::string tag; /// Used in serialization std::string tag; /// Used in serialization
double time; /// Timestamp reconstituted as float double time; /// Timestamp reconstituted as float
struct timeval ts; /// Capture timestamp pkt_timeval ts; /// Capture timestamp
const u_char* data; /// Packet data. const u_char* data; /// Packet data.
uint32 len; /// Actual length on wire uint32 len; /// Actual length on wire
uint32 cap_len; /// Captured packet length uint32 cap_len; /// Captured packet length