1 After much work and toil, Craig Rodrigues was able to compile libpcap
2 and Ethereal on AIX 4.3.2. His odyssey is document in various e-mails
3 at http://ethereal.zing.org/lists/ethereal-dev/199911/
5 Here are a few excerpts. Note that, to configure "libpcap" to use DLPI
6 rather than BPF (which it'll apparently use by default on AIX),
11 to the "configure" script for "libpcap" should do the trick.
13 The source code changes to Ethereal mentioned below should be in the
14 current source tree. The changes to GTK+ aren't in 1.2.6; they may
15 appear in a later release (the configure script file was accepted by the
16 GTK+ folks, as per Craig's mail; the "-lgdk" problem may require more
19 Subject: Re: [ethereal-dev] Re: [ethereal-users] Problems compiling 0.7.7 under AIX 4.3.2
20 From: Gilbert Ramirez <gram@xiexie.org>
21 Date: Fri, 5 Nov 1999 16:58:17 -0600
22 To: Guy Harris <guy@netapp.com>
23 Cc: Craig Rodrigues <rodrigc@mediaone.net>, ethereal-dev@zing.org
26 On Fri, Nov 05, 1999 at 01:42:44PM -0600, Guy Harris wrote:
31 > Looks suspiciously similar to the previous error; have you tried
32 > recompiling GTK+ with "xlc_r"?
34 I believe glib and gtk+ should both be compiled with xlc_r. I haven't
35 compiled on AIX in a long time, but I think it's because glib is including
36 pthread stuff, so the re-entrant C library, libc_r, is needed.
41 When compiling a multi-threaded program, you should invoke the C compiler
42 using one of the following commands:
45 Invokes the compiler with default language level of ansi.
47 Invokes the compiler with default language level of extended.
50 These commands ensure that the adequate options and libraries are used to be
51 compliant with the X/Open Version 5 Standard. The POSIX Threads
52 Specification 1003.1c is a subset of the X/Open Specification.
54 The following libraries are automatically linked with your program when using these commands:
62 For example, the following command compiles the foo.c multi-threaded C source file and produces the foo executable file:
66 See the cc command for more information about C For AIX.
72 To: ethereal-users@zing.org
73 Subject: [ethereal-dev] AIX: gtk problem solved, now an ethereal problem
74 From: Craig Rodrigues <rodrigc@mediaone.net>
75 Date: Mon, 8 Nov 1999 10:46:25 -0500
76 Cc: ethereal-dev@zing.org
81 After much sweat and toil, I have managed to get gtk 1.2.6 to
82 compile and not dump core under AIX. The solutions were to
83 (1) apply the attached patch to the configure.in in the glib-1.2.6
86 (2) In the file gtk+-1.2.6/gtk/Makefile, add a link flag -lgdk to link
89 I have submitted (1) to the gtk-devel mailing list where it has been
90 accepted. (2) is an uglier problem, but for now, adding -lgdk by hand
93 Now I have a problem....I compiled gtk, and that works.
94 I compiled ethereal (after some minor mods), and it starts,
95 but when I click on Capture -> Start, I get:
97 "There are no network interfaces that can be opened."
99 I am running as root, so I don't think permissions are a problem.
106 http://www.gis.net/~craigr
109 *** configure.in.old Thu Oct 7 17:27:43 1999
110 --- configure.in Sun Nov 7 19:34:36 1999
114 if test "$ac_cv_func_getpwuid_r" = "yes"; then
115 AC_MSG_CHECKING(whether getpwuid_r is posix like)
116 ! # getpwuid_r(0, NULL, NULL, 0) is the signature on
117 ! # solaris, if that is not found, the prog below won't
118 ! # compile, then the posix signature is assumed as
120 ! AC_TRY_COMPILE([#include <pwd.h>],
121 ! [getpwuid_r(0, NULL, NULL, 0);],
122 ! [AC_MSG_RESULT(no)],
123 ! [AC_MSG_RESULT(yes)
124 ! AC_DEFINE(HAVE_GETPWUID_R_POSIX)])
127 if test x"$have_threads" = xposix; then
130 if test "$ac_cv_func_getpwuid_r" = "yes"; then
131 AC_MSG_CHECKING(whether getpwuid_r is posix like)
132 ! # The signature for the POSIX version is:
133 ! # int getpwuid_r(uid_t, struct passwd *, char *, size_t, struct passwd **)
134 ! AC_TRY_COMPILE([#include <pwd.h>
135 ! #include <sys/types.h>
136 ! #include <stdlib.h>],
137 ! [getpwuid_r((uid_t)0, NULL, NULL, (size_t)0, NULL);],
138 ! [AC_DEFINE(HAVE_GETPWUID_R_POSIX)
139 ! AC_MSG_RESULT(yes)],
140 ! [AC_MSG_RESULT(no)])
143 if test x"$have_threads" = xposix; then
147 To: ethereal-dev@zing.org
148 Subject: Re: [ethereal-dev] AIX: gtk problem solved, now an ethereal problem
149 From: Craig Rodrigues <rodrigc@mediaone.net>
150 Date: Wed, 10 Nov 1999 12:18:47 -0500
156 OK, I'm getting closer and closer to this working on AIX.
160 (1) In a bunch of places in the code I removed '//' style C++ comments
161 which the IBM C compiler didn't like.
163 (2) I also found some places in the code like:
165 enum some_enum { FOO, BAR, };
167 IBM C did not like the trailing "," after BAR.
169 (3) In packet-ipv6.h, IPV6_VERSION is defined, but that is already
170 defined in <netinet/in.h> on AIX 4.3, so for now I just commented that out.
172 (4) in packet-afs.c, when it sucks in <netinet/in.h>, in.h sucks in
173 <sys/machine.h> which defines LITTLE_ENDIAN. This conflicts with
174 LITTLE_ENDIAN in globals.h. So what I did was, in globals.h, I added:
176 #ifdef HAVE_NETINET_IN_H
177 #include <netinet/in.h>
180 So after doing all these things, I can compile ethereal and run it.
182 correct network interfaces on my system: lo0 and en0. However,
183 when I start capturing packets on en0, they are all of the protocol type
184 "TRMAC" and "TR". The only problem is, I'm not on a Token Ring network.
188 No. Time Source Destination Protocol Info
189 1 0.000000 0a:30:a1:08:00:45 06:74:60:08:00:5a TR Token-Ring Unknown
190 2 0.210304 0a:30:a1:08:00:45 06:74:60:08:00:5a TR Token-Ring Unknown
191 3 0.926080 0a:30:a1:08:00:45 06:74:60:08:00:5a TR Token-Ring Unknown
192 4 0.4236416 0a:30:a1:08:00:45 06:74:60:08:00:5a TR Token-Ring Unknown
193 5 0.4712064 6f:06:74:60:08:00 5a:8a:30:a1:00:00 TR MAC Unknown Major Vector: 127
196 ---------------------
197 It turns out that libpcap was using IFT_* numbers instead of DLT_* numbers for
198 link types. That has been fixed
199 ---------------------
202 To: tcpdump-workers@tcpdump.org
203 Subject: [ethereal-dev] Sucess with libpcap under AIX
204 From: Craig Rodrigues <rodrigc@mediaone.net>
205 Date: Sat, 20 Nov 1999 03:34:50 -0500
206 Cc: ethereal-dev@zing.org
211 I have managed to successfully compile and use the latest
212 snapshot of libpcap under AIX using DLPI. bpf is majorly
213 brain-dead under AIX, and very unsupported. Rather than
214 find all the bugs in AIX's bpf, I decided to try using
215 dlpi, which is officially supported.
217 The first step is to get the setup right. To determine if
218 you have the dlpi driver loaded correctly, type:
224 then you are ready to use dlpi.
229 Then you need to type:
230 strload -f /etc/dlpi.conf
232 Check again with strload -q -d dlpi that the dlpi driver is loaded.
234 I had to make one minor code change to pcap-dlpi.c. Maybe someone
235 can explain it to me, because I am not familiar with dlpi or
236 streams programming. It took me hours to figure this out, because
237 I'm not familiar with dlpi.
239 In pcap-dlpi.c, lines 316-320:
240 #if !defined(HAVE_HPUX9) && !defined(HAVE_HPUX10_20) && !defined(sinix)
241 if (dlbindreq(p->fd, 0, ebuf) < 0 ||
242 dlbindack(p->fd, (char *)buf, ebuf) < 0)
247 #if !defined(HAVE_HPUX9) && !defined(HAVE_HPUX10_20) && !defined(sinix)
248 if (dlbindreq(p->fd, 1620, ebuf) < 0 ||
249 dlbindack(p->fd, (char *)buf, ebuf) < 0)
253 I picked the number 1620 out of thin air. The second parameter
254 to dlbindreq() sets the value of dl_sap. This dl_sap
255 value is then passed along to the DLPI driver through
256 the DL_BIND_REQ primitive. I guess that it cannot be 0 under
257 AIX, but I'm not sure.
259 If someone knows anything about DLPI, I'd appreciate a clarification.
260 Basically, I am just using the DLPI specification at:
261 http://www.opengroup.org/onlinepubs/009638599/ which is pretty good.
262 The AIX documentation is not so well written.
264 But basically, after I fixed up pcap-dlpi.c, I managed to get libpcap
265 working under AIX. This enabled me to successfully run Ethereal,
266 ie. all the packets on my Ethernet network correctly showed up
267 as Ethernet and not Token Ring in the Ethereal screen.
272 http://www.gis.net/~craigr
275 Date: Thu, 11 Nov 1999 23:47:02 -0500
276 From: Craig Rodrigues <rodrigc@mediaone.net>
277 To: ethereal-dev@zing.org
278 Subject: Re: [ethereal-dev] AIX: gtk problem solved, now an ethereal problem
280 On Thu, Nov 11, 1999 at 11:50:23AM -0800, Guy Harris wrote:
281 > > The only differences between gtkclist.c in the gtk distribution and
282 > > gtkclist.c in the ethereal distribution relate to the ROW_ELEMENT
283 > > macro. It looks like an optimization for retrieving the GList item
284 > > when the requested row is the last row in the list.
286 > Yup - as per my other mail, Ethereal does that rather a lot when
287 > building the CList, and the optimization changes quadratic behavior to
290 > > Any ideas why this causes trouble?
292 > Mismatches between the layouts of data structures as declared in the
293 > "gtk/gtk*.h" files in the Ethereal source tree and the layouts as
294 > declared in the header files in the GTK+ source (either due to header
295 > file differences - although the header files appear to be identical to
296 > the GTK+ 1.2.6 ones - or due to compiler behavior differences)?
298 I tried stepping things through the debugger, and constantly
299 hit the same segfault inside gdk_string_width(), line 308 of gdkfont.c
301 Fails on line: switch(font->type),
302 where *font is: (type = -1, ascent = -1, descent = -1)
305 gdk_string_width(font = 0x7caf01a4, string = "../"), line 308 in "gdkfont.c"
306 gtk_file_selection_populate(fs = 0x20094468, rel_path = "", try_complete = 0), line 1341 in "gtkfilesel.c"
307 gtk_file_selection_init(filesel = 0x20094468), line 513 in "gtkfilesel.c"
308 gtk_type_new(0xc315), line 403 in "gtktypeutils.c"
309 gtk_file_selection_new(title = "Ethereal: Open Capture File"), line 524 in "gtkfilesel.c"
310 file_open_cmd_cb(0x200640f4, 0x0), line 79 in "file_dlg.c"
312 Removing gtkclist.o from libui.a and recompiling removed this problem.
314 Any ideas? I'm stumped.
318 http://www.gis.net/~craigr