tcpdump mailing list archives
libpcap/TCPDump issues on HP-UX 11.0
From: "Lynne Seamans" <Lynne.Seamans () millersville edu>
Date: Wed, 6 Sep 2006 09:34:38 -0400
I recently had occasion to compile libpcap/tcpdump on an 11.0 system,
and had to do the following:
------------------------------------------------------------------------
--------------------------
A) PROBLEM: (libpcap) said lex was "insufficient"
A) SOLUTION: from Rick Jones:
Go into the configure script and look for "insufficient" and you
should see something like:
echo $ECHO_N "checking for capable lex... $ECHO_C" >&6
if test "${tcpdump_cv_capable_lex+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if lex -t scanner.l > /dev/null 2>&1; then
tcpdump_cv_capable_lex=yes
else
tcpdump_cv_capable_lex=insufficient
fi
fi
run that lex command by hand. You will probably see something like:
...
"scanner.l" line 349: error 4: Parse tree too big
6000/6000 nodes(%e), 0/25000 positions(%p), 1/2000 (%n), 0 transitions,
0/4000 packed char classes(%k), 0/16000 packed transitions(%a), 0/19000
output slots(%o)
Notice the bit about "nodes(%e)" - go into scanner.l and change the %e
to something larger. You should see something akin to:
...
6056/9000 nodes(%e), 22089/25000 positions(%p), 1312/2000 (%n), 48325
transitions, 3621/4000 packed char classes(%k), 14716/16000 packed
transitions(%a), 17206/19000 output slots(%o)
and re-run configure and all should be well.
It was, when one configured --without-gcc
------------------------------------------------------------------------
--------------------------
B) PROBLEM (tcpdump):
print-dccp.c compile fails "Cannot do arithmetic with pointers
to objects of unknown size." compiling tcpdump
B) SOLUTION: also from Rick Jones
c -O -DHAVE_CONFIG_H -I./../libpcap-2005.10.09 -I/usr/local/include
-I/usr//include -I./missing -D_U_="" -I. -I./../libpcap-2005.10.09
-I/usr/local/include -I/usr//include -I./missing -c ./print-dccp.c
cc: "print-dccp.c", line 149: error 1539: Cannot do arithmetic with
pointers to objects of unknown size.
*** Error exit code 1
the offensive code :)
static u_int64_t dccp_seqno(const struct dccp_hdr *dh)
{
u_int32_t seq_high = DCCPH_SEQ(dh);
u_int64_t seqno = EXTRACT_24BITS(&seq_high) & 0xFFFFFF;
if (DCCPH_X(dh) != 0) {
const struct dccp_hdr_ext *dhx = (void *)dh +
sizeof(*dh);
u_int32_t seq_low = dhx->dccph_seq_low;
seqno &= 0x00FFFF; /* clear reserved field */
seqno = (seqno << 32) + EXTRACT_32BITS(&seq_low);
}
return seqno;
}
specifically the "const struct dccp_hdr_ext..." There seems to be a
dccp.h, and it has that field:
/**
* struct dccp_hdr_ext - the low bits of a 48 bit seq packet
*
* @dccph_seq_low - low 24 bits of a 48 bit seq packet
*/
struct dccp_hdr_ext {
u_int32_t dccph_seq_low;
};
It seems the compiler I have didn't like the + sizeof(*dh) in the
declaration. If I change that to be on a separate line it appears to
compile:
$ diff -c print-dccp.c.orig print-dccp.c
*** print-dccp.c.orig Mon Sep 19 23:25:20 2005
--- print-dccp.c Mon Nov 7 13:20:14 2005
***************
*** 146,152 ****
u_int64_t seqno = EXTRACT_24BITS(&seq_high) & 0xFFFFFF;
if (DCCPH_X(dh) != 0) {
! const struct dccp_hdr_ext *dhx = (void *)dh +
sizeof(*dh);
u_int32_t seq_low = dhx->dccph_seq_low;
seqno &= 0x00FFFF; /* clear reserved field */
seqno = (seqno << 32) + EXTRACT_32BITS(&seq_low);
--- 146,153 ----
u_int64_t seqno = EXTRACT_24BITS(&seq_high) & 0xFFFFFF;
if (DCCPH_X(dh) != 0) {
! const struct dccp_hdr_ext *dhx = (void *)dh;
! dhx += sizeof(*dh);
u_int32_t seq_low = dhx->dccph_seq_low;
seqno &= 0x00FFFF; /* clear reserved field */
seqno = (seqno << 32) + EXTRACT_32BITS(&seq_low);
probably a bug in the compiler - perhaps even one that has been fixed in
a compiler patch or later version, but I thought I might send-along the
patch just the same.
------------------------------------------------------------------------
--------------------------
C) PROBLEM (tcpdump):
compile error for print-isoclns.c compiling tcpdump as follows:
cc: "print-isoclns.c", line 1619: error 1594: The sizeof operator cannot
be applied to types with unknown size.
cc: "print-isoclns.c", line 1649: error 1594: The sizeof operator cannot
be applied to types with unknown size.
*** Error exit code 1
It looks like "in6_addr" is the variable, and it seems to be talked
about in ip6 areas of code.
C) SOLUTION:
HP-UX 11.0 doesn't really support IPv6, so no-oped that module, and
finally got a "tcpdump" executable.
-
This is the tcpdump-workers list.
Visit https://cod.sandelman.ca/ to unsubscribe.
Current thread:
- libpcap/TCPDump issues on HP-UX 11.0 Lynne Seamans (Sep 06)
