[Bro] Bro 1.2.1 vs OpenBSD 4.0 (phase 2)
Jean-Philippe Luiggi
jp.luiggi at free.fr
Tue Dec 19 17:48:26 PST 2006
Hello Christian,
On Fri, Dec 01, 2006 at 10:58:10AM -0800, Christian Kreibich wrote:
> > - modify util.cc and util.h in order to use bpf_timeval as structure for the
> > double_to_timeval() function. (just used #ifdef HAVE_OPENBSD)
>
> Wow, this is so weird. I could swear we've fixed this before -- this is
> due to OpenBSD's pcap using bpf_timeval instead of just timeval like
> everyone else, correct?
>
> Rater than #ifdeffing different functions, it'd be nicer to make the
> type difference transparent by typedefing the bpf_timeval to a timeval
> in the OpenBSD case.
The problem we get into is "struct timeval" because it's defined in OpenBSD's system
(sys/time.h) but not in the way we need it :
/*
* Structure returned by gettimeofday(2) system call,
* and used in other calls.
*/
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* and microseconds */
};
And Bro complains in "TCP_Rewriter.cc" on the following line :
"pcap_hdr.ts = double_to_timeval(timestamp);"
=======================
TCP_Rewriter.cc: In member function int TCP_TracePacket::Finish(pcap_pkthdr*&,const u_char*&,
int&, unsigned int, unsigned int)':
TCP_Rewriter.cc:328: error: no match for 'operator=' in ' this->TCP_TracePacket::pcap_hdr.pcap_pkthdr::ts =
double_to_timeval(double)()'
/usr/include/net/bpf.h:129: error: candidates are: bpf_timeval&
bpf_timeval::operator=(const bpf_timeval&)
*** Error code 1
=======================
so here's "struct bpf_timeval" i used which is defined in (net/bpf.h) as :
struct bpf_timeval {
u_int32_t tv_sec;
u_int32_t tv_usec;
};
I don't see (yet) how using just a "#typedef" will solve the problem.
I may be wrong but i can't use a "typedef struct bpf_timeval timeval;"
"struct timeval" exists and is used elsewhere.
Best regards.
PS : "struct timeval" is defined in linux as :
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
More information about the Bro
mailing list