diff options
-rw-r--r-- | Makefile.am | 5 | ||||
-rw-r--r-- | README.hpux | 563 | ||||
-rw-r--r-- | libpcap-0.4.HPUX.HPUXPAC.patch | 1854 | ||||
-rw-r--r-- | libpcap-0.4.HPUX.LBL.patch | 503 | ||||
-rw-r--r-- | libpcap-0.5.HPUX.tcpdump.org.patch | 519 |
5 files changed, 2927 insertions, 517 deletions
diff --git a/Makefile.am b/Makefile.am index 0c16c0ada1..81ea4b12c0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,7 +1,7 @@ # Makefile.am # Automake file for Ethereal # -# $Id: Makefile.am,v 1.220 2000/08/12 05:41:00 guy Exp $ +# $Id: Makefile.am,v 1.221 2000/08/13 07:48:54 guy Exp $ # # Ethereal - Network traffic analyzer # By Gerald Combs <gerald@zing.org> @@ -514,6 +514,9 @@ EXTRA_DIST = \ image/icon-ethereal.xpm \ image/tethereal.rc \ INSTALL.configure \ + libpcap-0.4.HPUX.HPUXPAC.patch \ + libpcap-0.4.HPUX.LBL.patch \ + libpcap-0.5.HPUX.tcpdump.org.patch \ Makefile.nmake \ make-reg-dotc \ manuf \ diff --git a/README.hpux b/README.hpux index 28a22c04b6..51110805d5 100644 --- a/README.hpux +++ b/README.hpux @@ -1,21 +1,21 @@ -$Id: README.hpux,v 1.12 2000/04/29 08:38:35 guy Exp $ +$Id: README.hpux,v 1.13 2000/08/13 07:48:55 guy Exp $ Contents: 1 - Building ethereal 2 - Building GTK+/GLib with HP's C compiler 3 - nettl support -4 - "libpcap" on HP-UX +4 - libpcap on HP-UX 1 - Building ethereal The Software Porting And Archive Centre for HP-UX, at - http://hpux.csc.liv.ac.uk/ + http://hpux.connect.org.uk/ (and with mirrors in various countries, listed on the Centre's home page) has ported versions, in both source and binary form, for Ethereal, -as well as for the "libpcap", GLib, GTK+, "zlib", and CMU SNMP libraries +as well as for the libpcap, GLib, GTK+, zlib, and CMU SNMP libraries that it uses. The changes they've made appear largely to be compile option changes; if @@ -27,6 +27,14 @@ They appear to have used HP-UX's "cc" compiler, with the options "-Ae -O"; there's a comment "Add -Dhpux_9 if building under 9.X". It may also build with GCC. +The libpcap library has not been changed to properly open network +devices when given the name reported by the lanscan and ifconfig +commands; this means you may have difficulty capturing packets with +Ethereal on HP-UX. The "libpcap on HP-UX" item below discusses patches +to the libpcap source code that should fix this problem, and the process +you will have to go through to apply those patches and build and install +a new version of libpcap that includes those patches. + 2 - Building GTK+/GLib with HP's C compiler By default, HP's C compiler doesn't support "long long int" to provide @@ -359,515 +367,38 @@ know that it didn't work - we'll probably send you debugging patches in the hopes of being able to make it work on 10.20 as well. (It appeared to work in some tests done on HP-UX 10.20 systems.) -Here's the patch (to vanilla libpcap 0.4; it patches "aclocal.m4", -"configure", and "configure.in", to make the configure script check -whether your version of HP-UX supplies the interface names in the reply -to a DL_HP_PPA_REQ request, and patches "pcap-dlpi.c"): - -diff -c ../libpcap-0.4/aclocal.m4 ./aclocal.m4 -*** ../libpcap-0.4/aclocal.m4 Fri Jun 12 03:45:15 1998 ---- ./aclocal.m4 Tue Jan 4 21:02:13 2000 -*************** -*** 415,420 **** ---- 415,454 ---- - fi]) - - dnl -+ dnl Checks to see if the dl_hp_ppa_info_t struct has the HP-UX 11.00 -+ dnl dl_module_id_1 member -+ dnl -+ dnl usage: -+ dnl -+ dnl AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1 -+ dnl -+ dnl results: -+ dnl -+ dnl HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 (defined) -+ dnl -+ dnl NOTE: any compile failure means we conclude that it doesn't have -+ dnl that member, so if we don't have DLPI, don't have a <sys/dlpi_ext.h> -+ dnl header, or have one that doesn't declare a dl_hp_ppa_info_t type, -+ dnl we conclude it doesn't have that member (which is OK, as either we -+ dnl won't be using code that would use that member, or we wouldn't -+ dnl compile in any case). -+ dnl -+ AC_DEFUN(AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1, -+ [AC_MSG_CHECKING(if dl_hp_ppa_info_t struct has dl_module_id_1 member) -+ AC_CACHE_VAL(ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1, -+ AC_TRY_COMPILE([ -+ # include <sys/types.h> -+ # include <sys/dlpi.h> -+ # include <sys/dlpi_ext.h>], -+ [u_int i = sizeof(((dl_hp_ppa_info_t *)0)->dl_module_id_1)], -+ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=yes, -+ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=no)) -+ AC_MSG_RESULT($ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1) -+ if test $ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1 = yes ; then -+ AC_DEFINE(HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1) -+ fi]) -+ -+ dnl - dnl Checks to see if -R is used - dnl - dnl usage: -Common subdirectories: ../libpcap-0.4/bpf and ./bpf - -diff -c ../libpcap-0.4/configure ./configure -*** ../libpcap-0.4/configure Sat Jul 25 12:41:51 1998 ---- ./configure Fri Jan 14 00:40:04 2000 -*************** -*** 1702,1709 **** - - fi - - echo $ac_n "checking if unaligned accesses fail""... $ac_c" 1>&6 -! echo "configure:1707: checking if unaligned accesses fail" >&5 - if eval "test \"`echo '$''{'ac_cv_lbl_unaligned_fail'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else ---- 1702,1745 ---- - - fi - -+ echo $ac_n "checking if dl_hp_ppa_info_t struct has dl_module_id_1 member""... $ac_c" 1>&6 -+ echo "configure:1707: checking if dl_hp_ppa_info_t struct has dl_module_id_1 member" >&5 -+ if eval "test \"`echo '$''{'ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+ else -+ cat > conftest.$ac_ext <<EOF -+ #line 1712 "configure" -+ #include "confdefs.h" -+ -+ # include <sys/types.h> -+ # include <sys/dlpi.h> -+ # include <sys/dlpi_ext.h> -+ int main() { -+ u_int i = sizeof(((dl_hp_ppa_info_t *)0)->dl_module_id_1) -+ ; return 0; } -+ EOF -+ if { (eval echo configure:1722: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then -+ rm -rf conftest* -+ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=yes -+ else -+ echo "configure: failed program was:" >&5 -+ cat conftest.$ac_ext >&5 -+ rm -rf conftest* -+ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=no -+ fi -+ rm -f conftest* -+ fi -+ -+ echo "$ac_t""$ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1" 1>&6 -+ if test $ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1 = yes ; then -+ cat >> confdefs.h <<\EOF -+ #define HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 1 -+ EOF -+ -+ fi -+ - echo $ac_n "checking if unaligned accesses fail""... $ac_c" 1>&6 -! echo "configure:1743: checking if unaligned accesses fail" >&5 - if eval "test \"`echo '$''{'ac_cv_lbl_unaligned_fail'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -*************** -*** 1799,1805 **** - # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" - # ./install, which can be erroneously created by make from ./install.sh. - echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -! echo "configure:1803: checking for a BSD compatible install" >&5 - if test -z "$INSTALL"; then - if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 ---- 1835,1841 ---- - # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" - # ./install, which can be erroneously created by make from ./install.sh. - echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -! echo "configure:1839: checking for a BSD compatible install" >&5 - if test -z "$INSTALL"; then - if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - -diff -c ../libpcap-0.4/configure.in ./configure.in -*** ../libpcap-0.4/configure.in Sun Jul 27 22:16:22 1997 ---- ./configure.in Tue Jan 4 21:02:13 2000 -*************** -*** 154,159 **** ---- 154,161 ---- - - AC_LBL_SOCKADDR_SA_LEN - -+ AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1 -+ - AC_LBL_UNALIGNED_ACCESS - - if test "${srcdir}" = "." ; then - -diff -c ../libpcap-0.4/pcap-dlpi.c ./pcap-dlpi.c -*** ../libpcap-0.4/pcap-dlpi.c Wed Oct 15 21:59:34 1997 ---- ./pcap-dlpi.c Wed Apr 26 21:32:33 2000 -*************** -*** 246,255 **** - } - memset(p, 0, sizeof(*p)); - - /* -! ** Determine device and ppa - */ -! cp = strpbrk(device, "0123456789"); - if (cp == NULL) { - sprintf(ebuf, "%s missing unit number", device); - goto bad; ---- 246,266 ---- - } - memset(p, 0, sizeof(*p)); - -+ #ifdef HAVE_DEV_DLPI - /* -! ** Remove any "/dev/" on the front of the device. - */ -! cp = strrchr(device, '/'); -! if (cp == NULL) -! cp = device; -! else -! cp++; -! strcpy(dname, cp); -! -! /* -! * Split the name into a device type and a unit number. -! */ -! cp = strpbrk(dname, "0123456789"); - if (cp == NULL) { - sprintf(ebuf, "%s missing unit number", device); - goto bad; -*************** -*** 259,281 **** - sprintf(ebuf, "%s bad unit number", device); - goto bad; - } - -! if (*device == '/') -! strcpy(dname, device); -! else -! sprintf(dname, "%s/%s", PCAP_DEV_PREFIX, device); -! #ifdef HAVE_DEV_DLPI -! /* Map network device to /dev/dlpi unit */ - cp = "/dev/dlpi"; - if ((p->fd = open(cp, O_RDWR)) < 0) { - sprintf(ebuf, "%s: %s", cp, pcap_strerror(errno)); - goto bad; - } -! /* Map network interface to /dev/dlpi unit */ - ppa = get_dlpi_ppa(p->fd, dname, ppa, ebuf); - if (ppa < 0) - goto bad; - #else - /* Try device without unit number */ - strcpy(dname2, dname); - cp = strchr(dname, *cp); ---- 270,321 ---- - sprintf(ebuf, "%s bad unit number", device); - goto bad; - } -+ *cp = '\0'; - -! /* -! * Use "/dev/dlpi" as the device. -! * -! * XXX - HP's DLPI Programmer's Guide for HP-UX 11.00 says that -! * the "dl_mjr_num" field is for the "major number of interface -! * driver"; that's the major of "/dev/dlpi" on the system on -! * which I tried this, but there may be DLPI devices that -! * use a different driver, in which case we may need to -! * search "/dev" for the appropriate device with that major -! * device number, rather than hardwiring "/dev/dlpi". -! */ - cp = "/dev/dlpi"; - if ((p->fd = open(cp, O_RDWR)) < 0) { - sprintf(ebuf, "%s: %s", cp, pcap_strerror(errno)); - goto bad; - } -! -! /* -! * Get a table of all PPAs for that device, and search that -! * table for the specified device type name and unit number. -! */ - ppa = get_dlpi_ppa(p->fd, dname, ppa, ebuf); - if (ppa < 0) - goto bad; - #else -+ /* -+ ** Determine device and ppa -+ */ -+ cp = strpbrk(device, "0123456789"); -+ if (cp == NULL) { -+ sprintf(ebuf, "%s missing unit number", device); -+ goto bad; -+ } -+ ppa = strtol(cp, &eos, 10); -+ if (*eos != '\0') { -+ sprintf(ebuf, "%s bad unit number", device); -+ goto bad; -+ } -+ -+ if (*device == '/') -+ strcpy(dname, device); -+ else -+ sprintf(dname, "%s/%s", PCAP_DEV_PREFIX, device); -+ - /* Try device without unit number */ - strcpy(dname2, dname); - cp = strchr(dname, *cp); -*************** -*** 391,397 **** - break; - - default: -! sprintf(ebuf, "unknown mac type 0x%lu", infop->dl_mac_type); - goto bad; - } - ---- 431,438 ---- - break; - - default: -! sprintf(ebuf, "unknown mac type 0x%lu", -! (unsigned long)infop->dl_mac_type); - goto bad; - } - -*************** -*** 709,737 **** - - #ifdef DL_HP_PPA_ACK_OBS - /* -! * Under HP-UX 10, we can ask for the ppa - */ - - -! /* Determine ppa number that specifies ifname */ - static int - get_dlpi_ppa(register int fd, register const char *device, register int unit, - register char *ebuf) - { - register dl_hp_ppa_ack_t *ap; -! register dl_hp_ppa_info_t *ip; - register int i; - register u_long majdev; -- dl_hp_ppa_req_t req; - struct stat statbuf; - bpf_u_int32 buf[MAXDLBUF]; - -- if (stat(device, &statbuf) < 0) { -- sprintf(ebuf, "stat: %s: %s", device, pcap_strerror(errno)); -- return (-1); -- } -- majdev = major(statbuf.st_rdev); -- - memset((char *)&req, 0, sizeof(req)); - req.dl_primitive = DL_HP_PPA_REQ; - ---- 750,806 ---- - - #ifdef DL_HP_PPA_ACK_OBS - /* -! * Under HP-UX 10 and HP-UX 11, we can ask for the ppa - */ - - -! /* -! * Determine ppa number that specifies ifname. -! * -! * If the "dl_hp_ppa_info_t" doesn't have a "dl_module_id_1" member, -! * the code that's used here is the old code for HP-UX 10.x. -! * -! * However, HP-UX 10.20, at least, appears to have such a member -! * in its "dl_hp_ppa_info_t" structure, so the new code is used. -! * The new code didn't work on an old 10.20 system on which Rick -! * Jones of HP tried it, but with later patches installed, it -! * worked - it appears that the older system had those members but -! * didn't put anything in them, so, if the search by name fails, we -! * do the old search. -! * -! * Rick suggests that making sure your system is "up on the latest -! * lancommon/DLPI/driver patches" is probably a good idea; it'd fix -! * that problem, as well as allowing libpcap to see packets sent -! * from the system on which the libpcap application is being run. -! * (On 10.20, in addition to getting the latest patches, you need -! * to turn the kernel "lanc_outbound_promisc_flag" flag on with ADB; -! * a posting to "comp.sys.hp.hpux" at -! * -! * http://www.deja.com/[ST_rn=ps]/getdoc.xp?AN=558092266 -! * -! * says that, to see the machine's outgoing traffic, you'd need to -! * apply the right patches to your system, and also set that variable -! * with: -! -! echo 'lanc_outbound_promisc_flag/W1' | /usr/bin/adb -w /stand/vmunix /dev/kmem -! -! * which could be put in, for example, "/sbin/init.d/lan". -! * -! * Setting the variable is not necessary on HP-UX 11.x. -! */ - static int - get_dlpi_ppa(register int fd, register const char *device, register int unit, - register char *ebuf) - { - register dl_hp_ppa_ack_t *ap; -! register dl_hp_ppa_info_t *ipstart, *ip; - register int i; -+ char dname[100]; - register u_long majdev; - struct stat statbuf; -+ dl_hp_ppa_req_t req; - bpf_u_int32 buf[MAXDLBUF]; - - memset((char *)&req, 0, sizeof(req)); - req.dl_primitive = DL_HP_PPA_REQ; - -*************** -*** 741,760 **** - return (-1); - - ap = (dl_hp_ppa_ack_t *)buf; -! ip = (dl_hp_ppa_info_t *)((u_char *)ap + ap->dl_offset); - -! for(i = 0; i < ap->dl_count; i++) { -! if (ip->dl_mjr_num == majdev && ip->dl_instance_num == unit) -! break; - -! ip = (dl_hp_ppa_info_t *)((u_char *)ip + ip->dl_next_offset); -! } - if (i == ap->dl_count) { -! sprintf(ebuf, "can't find PPA for %s", device); - return (-1); - } - if (ip->dl_hdw_state == HDW_DEAD) { -! sprintf(ebuf, "%s: hardware state: DOWN\n", device); - return (-1); - } - return ((int)ip->dl_ppa); ---- 810,887 ---- - return (-1); - - ap = (dl_hp_ppa_ack_t *)buf; -! ipstart = (dl_hp_ppa_info_t *)((u_char *)ap + ap->dl_offset); -! ip = ipstart; - -! #ifdef HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 -! /* -! * The "dl_hp_ppa_info_t" structure has a "dl_module_id_1" -! * member that should, in theory, contain the part of the -! * name for the device that comes before the unit number, -! * and should also have a "dl_module_id_2" member that may -! * contain an alternate name (e.g., I think Ethernet devices -! * have both "lan", for "lanN", and "snap", for "snapN", with -! * the former being for Ethernet packets and the latter being -! * for 802.3/802.2 packets). -! * -! * Search for the device that has the specified name and -! * instance number. -! */ -! for (i = 0; i < ap->dl_count; i++) { -! if ((strcmp(ip->dl_module_id_1, device) == 0 || -! strcmp(ip->dl_module_id_2, device) == 0) && -! ip->dl_instance_num == unit) -! break; - -! ip = (dl_hp_ppa_info_t *)((u_char *)ipstart + ip->dl_next_offset); -! } -! #else -! /* -! * We don't have that member, so the search is impossible; make it -! * look as if the search failed. -! */ -! i = ap->dl_count; -! #endif -! -! if (i == ap->dl_count) { -! /* -! * Well, we didn't, or can't, find the device by name. -! * -! * HP-UX 10.20, whilst it has "dl_module_id_1" and -! * "dl_module_id_2" fields in the "dl_hp_ppa_info_t", -! * doesn't seem to fill them in unless the system is -! * at a reasonably up-to-date patch level. -! * -! * Older HP-UX 10.x systems might not have those fields -! * at all. -! * -! * Therefore, we'll search for the entry with the major -! * device number of a device with the name "/dev/<dev><unit>", -! * if such a device exists, as the old code did. -! */ -! sprintf(dname, "/dev/%s%d", device, unit); -! if (stat(dname, &statbuf) < 0) { -! sprintf(ebuf, "stat: %s: %s", dname, pcap_strerror(errno)); -! return (-1); -! } -! majdev = major(statbuf.st_rdev); -! -! ip = ipstart; -! -! for (i = 0; i < ap->dl_count; i++) { -! if (ip->dl_mjr_num == majdev && -! ip->dl_instance_num == unit) -! break; -! -! ip = (dl_hp_ppa_info_t *)((u_char *)ipstart + ip->dl_next_offset); -! } -! } - if (i == ap->dl_count) { -! sprintf(ebuf, "can't find PPA for %s%d", device, unit); - return (-1); - } - if (ip->dl_hdw_state == HDW_DEAD) { -! sprintf(ebuf, "%s%d: hardware state: DOWN\n", device, unit); - return (-1); - } - return ((int)ip->dl_ppa); -*************** -*** 783,789 **** - register int kd; - void *addr; - struct ifnet ifnet; -! char if_name[sizeof(ifnet.if_name)], tifname[32]; - - cp = strrchr(ifname, '/'); - if (cp != NULL) ---- 910,916 ---- - register int kd; - void *addr; - struct ifnet ifnet; -! char if_name[sizeof(ifnet.if_name) + 1]; - - cp = strrchr(ifname, '/'); - if (cp != NULL) -*************** -*** 811,823 **** - if (dlpi_kread(kd, (off_t)addr, - &ifnet, sizeof(ifnet), ebuf) < 0 || - dlpi_kread(kd, (off_t)ifnet.if_name, -! if_name, sizeof(if_name), ebuf) < 0) { - (void)close(kd); - return (-1); - } -! sprintf(tifname, "%.*s%d", -! (int)sizeof(if_name), if_name, ifnet.if_unit); -! if (strcmp(tifname, ifname) == 0) - return (ifnet.if_index); - } - ---- 938,949 ---- - if (dlpi_kread(kd, (off_t)addr, - &ifnet, sizeof(ifnet), ebuf) < 0 || - dlpi_kread(kd, (off_t)ifnet.if_name, -! if_name, sizeof(ifnet.if_name), ebuf) < 0) { - (void)close(kd); - return (-1); - } -! if_name[sizeof(ifnet.if_name)] = '\0'; -! if (strcmp(if_name, ifname) == 0 && ifnet.if_unit == unit) - return (ifnet.if_index); - } - +To use this patch, you will need the source to libpcap; if you don't +already have it, it is available from the Software Porting And Archive +Centre for HP-UX (see above for its URL). Search for "libpcap" in the +"Package Search" box. + +The patch would be applied with the "patch" program; if you don't +already have it, it is also available from the Software Porting And +Archive Centre for HP-UX. Search for "patch" in the "Package Search" - +it will find many packages; look for the one in the "Sysadmin" category +with the description "Applies diffs to files to reproduce new versions". + +If you have downloaded the source to libpcap 0.4 from the Porting and +Archive Centre, the patch to use is in the file + + libpcap-0.4.HPUX.HPUXPAC.patch + +If you have downloaded the source to libpcap 0.4 from the Lawrence +Berkeley Laboratory Web site, the patch to use is in the file + + libpcap-0.4.HPUX.LBL.patch + +If you have downloaded the source to libpcap 0.5 from the tcpdump.org +Web site, the patch to use is in the file + + libpcap-0.5.HPUX.tcpdump.org.patch + +Note that the versions from Lawrence Berkeley Laboratory and tcpdump.org +will probably not compile on HP-UX with HP's ANSI C compiler, and will +not build and install a shared library, so patching, building, and +installing those versions will require that you have GCC installed, and +that you download the source to Ethereal and build it from source. + +You should apply only the patch file appropriate to the particular +version of libpcap source that you have downloaded; attempting to apply +a different patch file will probably cause errors. diff --git a/libpcap-0.4.HPUX.HPUXPAC.patch b/libpcap-0.4.HPUX.HPUXPAC.patch new file mode 100644 index 0000000000..f486f9dfad --- /dev/null +++ b/libpcap-0.4.HPUX.HPUXPAC.patch @@ -0,0 +1,1854 @@ +diff -c ../libpcap-0.4.HPUX/aclocal.m4 ./aclocal.m4 +*** ../libpcap-0.4.HPUX/aclocal.m4 Fri Jun 12 03:45:15 1998 +--- ./aclocal.m4 Sat Aug 12 23:38:08 2000 +*************** +*** 415,420 **** +--- 415,454 ---- + fi]) + + dnl ++ dnl Checks to see if the dl_hp_ppa_info_t struct has the HP-UX 11.00 ++ dnl dl_module_id_1 member ++ dnl ++ dnl usage: ++ dnl ++ dnl AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1 ++ dnl ++ dnl results: ++ dnl ++ dnl HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 (defined) ++ dnl ++ dnl NOTE: any compile failure means we conclude that it doesn't have ++ dnl that member, so if we don't have DLPI, don't have a <sys/dlpi_ext.h> ++ dnl header, or have one that doesn't declare a dl_hp_ppa_info_t type, ++ dnl we conclude it doesn't have that member (which is OK, as either we ++ dnl won't be using code that would use that member, or we wouldn't ++ dnl compile in any case). ++ dnl ++ AC_DEFUN(AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1, ++ [AC_MSG_CHECKING(if dl_hp_ppa_info_t struct has dl_module_id_1 member) ++ AC_CACHE_VAL(ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1, ++ AC_TRY_COMPILE([ ++ # include <sys/types.h> ++ # include <sys/dlpi.h> ++ # include <sys/dlpi_ext.h>], ++ [u_int i = sizeof(((dl_hp_ppa_info_t *)0)->dl_module_id_1)], ++ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=yes, ++ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=no)) ++ AC_MSG_RESULT($ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1) ++ if test $ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1 = yes ; then ++ AC_DEFINE(HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1) ++ fi]) ++ ++ dnl + dnl Checks to see if -R is used + dnl + dnl usage: +diff -c ../libpcap-0.4.HPUX/configure ./configure +*** ../libpcap-0.4.HPUX/configure Fri Feb 11 07:04:51 2000 +--- ./configure Sat Aug 12 23:43:23 2000 +*************** +*** 1,7 **** + #! /bin/sh + + # Guess values for system-dependent variables and create Makefiles. +! # Generated automatically using autoconf version 2.12 + # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. + # + # This configure script is free software; the Free Software Foundation +--- 1,7 ---- + #! /bin/sh + + # Guess values for system-dependent variables and create Makefiles. +! # Generated automatically using autoconf version 2.13 + # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. + # + # This configure script is free software; the Free Software Foundation +*************** +*** 63,68 **** +--- 63,69 ---- + # Initialize some other variables. + subdirs= + MFLAGS= MAKEFLAGS= ++ SHELL=${CONFIG_SHELL-/bin/sh} + # Maximum number of lines to put in a shell here document. + ac_max_here_lines=12 + +*************** +*** 346,352 **** + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) +! echo "configure generated by autoconf version 2.12" + exit 0 ;; + + -with-* | --with-*) +--- 347,353 ---- + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) +! echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) +*************** +*** 516,524 **** + # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. + ac_cpp='$CPP $CPPFLAGS' + ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +! ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + cross_compiling=$ac_cv_prog_cc_cross + + if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then +--- 517,527 ---- + # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. + ac_cpp='$CPP $CPPFLAGS' + ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + cross_compiling=$ac_cv_prog_cc_cross + ++ ac_exeext= ++ ac_objext=o + if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then +*************** +*** 575,607 **** + + + # Make sure we can run config.sub. +! if $ac_config_sub sun4 >/dev/null 2>&1; then : + else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } + fi + + echo $ac_n "checking host system type""... $ac_c" 1>&6 +! echo "configure:578: checking host system type" >&5 + + host_alias=$host + case "$host_alias" in + NONE) + case $nonopt in + NONE) +! if host_alias=`$ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; + esac + +! host=`$ac_config_sub $host_alias` + host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` + host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` + host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + echo "$ac_t""$host" 1>&6 + + echo $ac_n "checking target system type""... $ac_c" 1>&6 +! echo "configure:599: checking target system type" >&5 + + target_alias=$target + case "$target_alias" in +--- 578,610 ---- + + + # Make sure we can run config.sub. +! if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : + else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } + fi + + echo $ac_n "checking host system type""... $ac_c" 1>&6 +! echo "configure:581: checking host system type" >&5 + + host_alias=$host + case "$host_alias" in + NONE) + case $nonopt in + NONE) +! if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; + esac + +! host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` + host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` + host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` + host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + echo "$ac_t""$host" 1>&6 + + echo $ac_n "checking target system type""... $ac_c" 1>&6 +! echo "configure:602: checking target system type" >&5 + + target_alias=$target + case "$target_alias" in +*************** +*** 612,625 **** + esac ;; + esac + +! target=`$ac_config_sub $target_alias` + target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` + target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` + target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + echo "$ac_t""$target" 1>&6 + + echo $ac_n "checking build system type""... $ac_c" 1>&6 +! echo "configure:617: checking build system type" >&5 + + build_alias=$build + case "$build_alias" in +--- 615,628 ---- + esac ;; + esac + +! target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` + target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` + target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` + target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + echo "$ac_t""$target" 1>&6 + + echo $ac_n "checking build system type""... $ac_c" 1>&6 +! echo "configure:620: checking build system type" >&5 + + build_alias=$build + case "$build_alias" in +*************** +*** 630,636 **** + esac ;; + esac + +! build=`$ac_config_sub $build_alias` + build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` + build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` + build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +--- 633,639 ---- + esac ;; + esac + +! build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` + build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` + build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` + build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +*************** +*** 673,687 **** + # Extract the first word of "shlicc2", so it can be a program name with args. + set dummy shlicc2; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +! echo "configure:671: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_SHLICC2'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$SHLICC2"; then + ac_cv_prog_SHLICC2="$SHLICC2" # Let the user override the test. + else +! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" +! for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_SHLICC2="yes" +--- 676,691 ---- + # Extract the first word of "shlicc2", so it can be a program name with args. + set dummy shlicc2; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +! echo "configure:674: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_SHLICC2'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$SHLICC2"; then + ac_cv_prog_SHLICC2="$SHLICC2" # Let the user override the test. + else +! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" +! ac_dummy="$PATH" +! for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_SHLICC2="yes" +*************** +*** 713,727 **** + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +! echo "configure:711: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. + else +! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" +! for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" +--- 717,732 ---- + # Extract the first word of "gcc", so it can be a program name with args. + set dummy gcc; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +! echo "configure:715: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. + else +! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" +! ac_dummy="$PATH" +! for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" +*************** +*** 742,757 **** + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +! echo "configure:740: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. + else +! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + ac_prog_rejected=no +! for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then +--- 747,763 ---- + # Extract the first word of "cc", so it can be a program name with args. + set dummy cc; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +! echo "configure:745: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. + else +! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no +! ac_dummy="$PATH" +! for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then +*************** +*** 786,810 **** + echo "$ac_t""no" 1>&6 + fi + + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } + fi + + echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +! echo "configure:788: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + + ac_ext=c + # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. + ac_cpp='$CPP $CPPFLAGS' + ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +! ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + cross_compiling=$ac_cv_prog_cc_cross + +! cat > conftest.$ac_ext <<EOF +! #line 798 "configure" + #include "confdefs.h" + main(){return(0);} + EOF +! if { (eval echo configure:802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then +--- 792,852 ---- + echo "$ac_t""no" 1>&6 + fi + ++ if test -z "$CC"; then ++ case "`uname -s`" in ++ *win32* | *WIN32*) ++ # Extract the first word of "cl", so it can be a program name with args. ++ set dummy cl; ac_word=$2 ++ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ++ echo "configure:796: checking for $ac_word" >&5 ++ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++ else ++ if test -n "$CC"; then ++ ac_cv_prog_CC="$CC" # Let the user override the test. ++ else ++ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ++ ac_dummy="$PATH" ++ for ac_dir in $ac_dummy; do ++ test -z "$ac_dir" && ac_dir=. ++ if test -f $ac_dir/$ac_word; then ++ ac_cv_prog_CC="cl" ++ break ++ fi ++ done ++ IFS="$ac_save_ifs" ++ fi ++ fi ++ CC="$ac_cv_prog_CC" ++ if test -n "$CC"; then ++ echo "$ac_t""$CC" 1>&6 ++ else ++ echo "$ac_t""no" 1>&6 ++ fi ++ ;; ++ esac ++ fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } + fi + + echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +! echo "configure:828: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + + ac_ext=c + # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. + ac_cpp='$CPP $CPPFLAGS' + ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + cross_compiling=$ac_cv_prog_cc_cross + +! cat > conftest.$ac_ext << EOF +! +! #line 839 "configure" + #include "confdefs.h" ++ + main(){return(0);} + EOF +! if { (eval echo configure:844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then +*************** +*** 818,835 **** + ac_cv_prog_cc_works=no + fi + rm -fr conftest* + + echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 + if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } + fi + echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +! echo "configure:822: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 + echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 + cross_compiling=$ac_cv_prog_cc_cross + + echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +! echo "configure:827: checking whether we are using GNU C" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +--- 860,883 ---- + ac_cv_prog_cc_works=no + fi + rm -fr conftest* ++ ac_ext=c ++ # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ++ ac_cpp='$CPP $CPPFLAGS' ++ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ++ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' ++ cross_compiling=$ac_cv_prog_cc_cross + + echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 + if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } + fi + echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +! echo "configure:870: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 + echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 + cross_compiling=$ac_cv_prog_cc_cross + + echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +! echo "configure:875: checking whether we are using GNU C" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +*************** +*** 838,844 **** + yes; + #endif + EOF +! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:836: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes + else + ac_cv_prog_gcc=no +--- 886,892 ---- + yes; + #endif + EOF +! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:884: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes + else + ac_cv_prog_gcc=no +*************** +*** 849,859 **** + + if test $ac_cv_prog_gcc = yes; then + GCC=yes +! ac_test_CFLAGS="${CFLAGS+set}" +! ac_save_CFLAGS="$CFLAGS" +! CFLAGS= +! echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +! echo "configure:851: checking whether ${CC-cc} accepts -g" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +--- 897,911 ---- + + if test $ac_cv_prog_gcc = yes; then + GCC=yes +! else +! GCC= +! fi +! +! ac_test_CFLAGS="${CFLAGS+set}" +! ac_save_CFLAGS="$CFLAGS" +! CFLAGS= +! echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +! echo "configure:903: checking whether ${CC-cc} accepts -g" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +*************** +*** 868,883 **** + fi + + echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +! if test "$ac_test_CFLAGS" = set; then +! CFLAGS="$ac_save_CFLAGS" +! elif test $ac_cv_prog_cc_g = yes; then + CFLAGS="-g -O2" + else +! CFLAGS="-O2" + fi + else +! GCC= +! test "${CFLAGS+set}" = set || CFLAGS="-g" + fi + + if test "$GCC" = yes ; then +--- 920,939 ---- + fi + + echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +! if test "$ac_test_CFLAGS" = set; then +! CFLAGS="$ac_save_CFLAGS" +! elif test $ac_cv_prog_cc_g = yes; then +! if test "$GCC" = yes; then + CFLAGS="-g -O2" + else +! CFLAGS="-g" + fi + else +! if test "$GCC" = yes; then +! CFLAGS="-O2" +! else +! CFLAGS= +! fi + fi + + if test "$GCC" = yes ; then +*************** +*** 886,892 **** + V_CCOPT="-O2" + else + echo $ac_n "checking gcc version""... $ac_c" 1>&6 +! echo "configure:884: checking gcc version" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_gcc_vers'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +--- 942,948 ---- + V_CCOPT="-O2" + else + echo $ac_n "checking gcc version""... $ac_c" 1>&6 +! echo "configure:940: checking gcc version" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_gcc_vers'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +*************** +*** 904,922 **** + fi + else + echo $ac_n "checking that $CC handles ansi prototypes""... $ac_c" 1>&6 +! echo "configure:902: checking that $CC handles ansi prototypes" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_cc_ansi_prototypes'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 907 "configure" + #include "confdefs.h" + #include <sys/types.h> + int main() { + int frob(int, char *) + ; return 0; } + EOF +! if { (eval echo configure:914: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_lbl_cc_ansi_prototypes=yes + else +--- 960,978 ---- + fi + else + echo $ac_n "checking that $CC handles ansi prototypes""... $ac_c" 1>&6 +! echo "configure:958: checking that $CC handles ansi prototypes" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_cc_ansi_prototypes'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 963 "configure" + #include "confdefs.h" + #include <sys/types.h> + int main() { + int frob(int, char *) + ; return 0; } + EOF +! if { (eval echo configure:970: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_lbl_cc_ansi_prototypes=yes + else +*************** +*** 934,954 **** + + hpux*) + echo $ac_n "checking for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE)""... $ac_c" 1>&6 +! echo "configure:932: checking for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE)" >&5 + savedcflags="$CFLAGS" + CFLAGS="-Aa -D_HPUX_SOURCE $CFLAGS" + if eval "test \"`echo '$''{'ac_cv_lbl_cc_hpux_cc_aa'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 939 "configure" + #include "confdefs.h" + #include <sys/types.h> + int main() { + int frob(int, char *) + ; return 0; } + EOF +! if { (eval echo configure:946: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_lbl_cc_hpux_cc_aa=yes + else +--- 990,1010 ---- + + hpux*) + echo $ac_n "checking for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE)""... $ac_c" 1>&6 +! echo "configure:988: checking for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE)" >&5 + savedcflags="$CFLAGS" + CFLAGS="-Aa -D_HPUX_SOURCE $CFLAGS" + if eval "test \"`echo '$''{'ac_cv_lbl_cc_hpux_cc_aa'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 995 "configure" + #include "confdefs.h" + #include <sys/types.h> + int main() { + int frob(int, char *) + ; return 0; } + EOF +! if { (eval echo configure:1002: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_lbl_cc_hpux_cc_aa=yes + else +*************** +*** 991,1002 **** + + ultrix*) + echo $ac_n "checking that Ultrix $CC hacks const in prototypes""... $ac_c" 1>&6 +! echo "configure:990: checking that Ultrix $CC hacks const in prototypes" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_cc_const_proto'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 995 "configure" + #include "confdefs.h" + #include <sys/types.h> + int main() { +--- 1047,1058 ---- + + ultrix*) + echo $ac_n "checking that Ultrix $CC hacks const in prototypes""... $ac_c" 1>&6 +! echo "configure:1046: checking that Ultrix $CC hacks const in prototypes" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_cc_const_proto'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1051 "configure" + #include "confdefs.h" + #include <sys/types.h> + int main() { +*************** +*** 1004,1010 **** + void c(const struct a *) + ; return 0; } + EOF +! if { (eval echo configure:1003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_lbl_cc_const_proto=yes + else +--- 1060,1066 ---- + void c(const struct a *) + ; return 0; } + EOF +! if { (eval echo configure:1059: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_lbl_cc_const_proto=yes + else +*************** +*** 1029,1035 **** + + + echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +! echo "configure:1028: checking how to run the C preprocessor" >&5 + # On Suns, sometimes $CPP names a directory. + if test -n "$CPP" && test -d "$CPP"; then + CPP= +--- 1085,1091 ---- + + + echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +! echo "configure:1084: checking how to run the C preprocessor" >&5 + # On Suns, sometimes $CPP names a directory. + if test -n "$CPP" && test -d "$CPP"; then + CPP= +*************** +*** 1044,1057 **** + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext <<EOF +! #line 1043 "configure" + #include "confdefs.h" + #include <assert.h> + Syntax Error + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +! { (eval echo configure:1049: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +! ac_err=`grep -v '^ *+' conftest.out` + if test -z "$ac_err"; then + : + else +--- 1100,1113 ---- + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext <<EOF +! #line 1099 "configure" + #include "confdefs.h" + #include <assert.h> + Syntax Error + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +! { (eval echo configure:1105: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + : + else +*************** +*** 1061,1074 **** + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext <<EOF +! #line 1060 "configure" + #include "confdefs.h" + #include <assert.h> + Syntax Error + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +! { (eval echo configure:1066: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +! ac_err=`grep -v '^ *+' conftest.out` + if test -z "$ac_err"; then + : + else +--- 1117,1147 ---- + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext <<EOF +! #line 1116 "configure" +! #include "confdefs.h" +! #include <assert.h> +! Syntax Error +! EOF +! ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +! { (eval echo configure:1122: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +! if test -z "$ac_err"; then +! : +! else +! echo "$ac_err" >&5 +! echo "configure: failed program was:" >&5 +! cat conftest.$ac_ext >&5 +! rm -rf conftest* +! CPP="${CC-cc} -nologo -E" +! cat > conftest.$ac_ext <<EOF +! #line 1133 "configure" + #include "confdefs.h" + #include <assert.h> + Syntax Error + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +! { (eval echo configure:1139: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + : + else +*************** +*** 1081,1086 **** +--- 1154,1161 ---- + rm -f conftest* + fi + rm -f conftest* ++ fi ++ rm -f conftest* + ac_cv_prog_CPP="$CPP" + fi + CPP="$ac_cv_prog_CPP" +*************** +*** 1093,1110 **** + do + ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` + echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +! echo "configure:1092: checking for $ac_hdr" >&5 + if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1097 "configure" + #include "confdefs.h" + #include <$ac_hdr> + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +! { (eval echo configure:1102: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +! ac_err=`grep -v '^ *+' conftest.out` + if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +--- 1168,1185 ---- + do + ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` + echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +! echo "configure:1167: checking for $ac_hdr" >&5 + if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1172 "configure" + #include "confdefs.h" + #include <$ac_hdr> + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +! { (eval echo configure:1177: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +*************** +*** 1132,1143 **** + + if test "$GCC" = yes ; then + echo $ac_n "checking for ANSI ioctl definitions""... $ac_c" 1>&6 +! echo "configure:1131: checking for ANSI ioctl definitions" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_gcc_fixincludes'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1136 "configure" + #include "confdefs.h" + /* + * This generates a "duplicate case value" when fixincludes +--- 1207,1218 ---- + + if test "$GCC" = yes ; then + echo $ac_n "checking for ANSI ioctl definitions""... $ac_c" 1>&6 +! echo "configure:1206: checking for ANSI ioctl definitions" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_gcc_fixincludes'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1211 "configure" + #include "confdefs.h" + /* + * This generates a "duplicate case value" when fixincludes +*************** +*** 1156,1162 **** + } + ; return 0; } + EOF +! if { (eval echo configure:1155: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_lbl_gcc_fixincludes=yes + else +--- 1231,1237 ---- + } + ; return 0; } + EOF +! if { (eval echo configure:1230: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_lbl_gcc_fixincludes=yes + else +*************** +*** 1179,1190 **** + for ac_func in ether_hostton strerror + do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +! echo "configure:1178: checking for $ac_func" >&5 + if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1183 "configure" + #include "confdefs.h" + /* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func(); below. */ +--- 1254,1265 ---- + for ac_func in ether_hostton strerror + do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +! echo "configure:1253: checking for $ac_func" >&5 + if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1258 "configure" + #include "confdefs.h" + /* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func(); below. */ +*************** +*** 1207,1213 **** + + ; return 0; } + EOF +! if { (eval echo configure:1206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" + else +--- 1282,1288 ---- + + ; return 0; } + EOF +! if { (eval echo configure:1281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" + else +*************** +*** 1239,1245 **** + fi + + echo $ac_n "checking packet capture type""... $ac_c" 1>&6 +! echo "configure:1238: checking packet capture type" >&5 + if test ! -z "$with_pcap" ; then + V_PCAP="$withval" + elif test -r /dev/bpf0 ; then +--- 1314,1320 ---- + fi + + echo $ac_n "checking packet capture type""... $ac_c" 1>&6 +! echo "configure:1313: checking packet capture type" >&5 + if test ! -z "$with_pcap" ; then + V_PCAP="$withval" + elif test -r /dev/bpf0 ; then +*************** +*** 1276,1293 **** + do + ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` + echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +! echo "configure:1275: checking for $ac_hdr" >&5 + if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1280 "configure" + #include "confdefs.h" + #include <$ac_hdr> + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +! { (eval echo configure:1285: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +! ac_err=`grep -v '^ *+' conftest.out` + if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +--- 1351,1368 ---- + do + ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` + echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +! echo "configure:1350: checking for $ac_hdr" >&5 + if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1355 "configure" + #include "confdefs.h" + #include <$ac_hdr> + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +! { (eval echo configure:1360: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +*************** +*** 1313,1319 **** + done + + echo $ac_n "checking for /dev/dlpi device""... $ac_c" 1>&6 +! echo "configure:1312: checking for /dev/dlpi device" >&5 + if test -c /dev/dlpi ; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +--- 1388,1394 ---- + done + + echo $ac_n "checking for /dev/dlpi device""... $ac_c" 1>&6 +! echo "configure:1387: checking for /dev/dlpi device" >&5 + if test -c /dev/dlpi ; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +*************** +*** 1324,1330 **** + echo "$ac_t""no" 1>&6 + dir="/dev/dlpi" + echo $ac_n "checking for $dir directory""... $ac_c" 1>&6 +! echo "configure:1323: checking for $dir directory" >&5 + if test -d $dir ; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<EOF +--- 1399,1405 ---- + echo "$ac_t""no" 1>&6 + dir="/dev/dlpi" + echo $ac_n "checking for $dir directory""... $ac_c" 1>&6 +! echo "configure:1398: checking for $dir directory" >&5 + if test -d $dir ; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<EOF +*************** +*** 1342,1359 **** + do + ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` + echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +! echo "configure:1341: checking for $ac_hdr" >&5 + if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1346 "configure" + #include "confdefs.h" + #include <$ac_hdr> + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +! { (eval echo configure:1351: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +! ac_err=`grep -v '^ *+' conftest.out` + if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +--- 1417,1434 ---- + do + ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` + echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +! echo "configure:1416: checking for $ac_hdr" >&5 + if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1421 "configure" + #include "confdefs.h" + #include <$ac_hdr> + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +! { (eval echo configure:1426: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +! ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +*************** +*** 1379,1385 **** + done + + echo $ac_n "checking Linux kernel version""... $ac_c" 1>&6 +! echo "configure:1378: checking Linux kernel version" >&5 + if eval "test \"`echo '$''{'ac_cv_linux_vers'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +--- 1454,1460 ---- + done + + echo $ac_n "checking Linux kernel version""... $ac_c" 1>&6 +! echo "configure:1453: checking Linux kernel version" >&5 + if eval "test \"`echo '$''{'ac_cv_linux_vers'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +*************** +*** 1420,1434 **** + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +! echo "configure:1419: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_V_LEX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$V_LEX"; then + ac_cv_prog_V_LEX="$V_LEX" # Let the user override the test. + else +! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" +! for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_V_LEX="$ac_prog" +--- 1495,1510 ---- + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +! echo "configure:1494: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_V_LEX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$V_LEX"; then + ac_cv_prog_V_LEX="$V_LEX" # Let the user override the test. + else +! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" +! ac_dummy="$PATH" +! for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_V_LEX="$ac_prog" +*************** +*** 1453,1459 **** + if test "$V_LEX" = flex ; then + # The -V flag was added in 2.4 + echo $ac_n "checking for flex 2.4 or higher""... $ac_c" 1>&6 +! echo "configure:1452: checking for flex 2.4 or higher" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_flex_v24'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +--- 1529,1535 ---- + if test "$V_LEX" = flex ; then + # The -V flag was added in 2.4 + echo $ac_n "checking for flex 2.4 or higher""... $ac_c" 1>&6 +! echo "configure:1528: checking for flex 2.4 or higher" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_flex_v24'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +*************** +*** 1479,1493 **** + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +! echo "configure:1478: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_V_YACC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$V_YACC"; then + ac_cv_prog_V_YACC="$V_YACC" # Let the user override the test. + else +! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" +! for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_V_YACC="$ac_prog" +--- 1555,1570 ---- + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +! echo "configure:1554: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_V_YACC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$V_YACC"; then + ac_cv_prog_V_YACC="$V_YACC" # Let the user override the test. + else +! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" +! ac_dummy="$PATH" +! for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_V_YACC="$ac_prog" +*************** +*** 1553,1571 **** + + sinix*) + echo $ac_n "checking if SINIX compiler defines sinix""... $ac_c" 1>&6 +! echo "configure:1552: checking if SINIX compiler defines sinix" >&5 + if eval "test \"`echo '$''{'ac_cv_cc_sinix_defined'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1557 "configure" + #include "confdefs.h" + + int main() { + int i = sinix; + ; return 0; } + EOF +! if { (eval echo configure:1564: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_cc_sinix_defined=yes + else +--- 1630,1648 ---- + + sinix*) + echo $ac_n "checking if SINIX compiler defines sinix""... $ac_c" 1>&6 +! echo "configure:1629: checking if SINIX compiler defines sinix" >&5 + if eval "test \"`echo '$''{'ac_cv_cc_sinix_defined'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1634 "configure" + #include "confdefs.h" + + int main() { + int i = sinix; + ; return 0; } + EOF +! if { (eval echo configure:1641: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_cc_sinix_defined=yes + else +*************** +*** 1603,1617 **** + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +! echo "configure:1602: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_V_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$V_RANLIB"; then + ac_cv_prog_V_RANLIB="$V_RANLIB" # Let the user override the test. + else +! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" +! for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_V_RANLIB="$ac_prog" +--- 1680,1695 ---- + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +! echo "configure:1679: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_V_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$V_RANLIB"; then + ac_cv_prog_V_RANLIB="$V_RANLIB" # Let the user override the test. + else +! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" +! ac_dummy="$PATH" +! for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_V_RANLIB="$ac_prog" +*************** +*** 1673,1684 **** + fi + + echo $ac_n "checking if sockaddr struct has sa_len member""... $ac_c" 1>&6 +! echo "configure:1672: checking if sockaddr struct has sa_len member" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_sockaddr_has_sa_len'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1677 "configure" + #include "confdefs.h" + + # include <sys/types.h> +--- 1751,1762 ---- + fi + + echo $ac_n "checking if sockaddr struct has sa_len member""... $ac_c" 1>&6 +! echo "configure:1750: checking if sockaddr struct has sa_len member" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_sockaddr_has_sa_len'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <<EOF +! #line 1755 "configure" + #include "confdefs.h" + + # include <sys/types.h> +*************** +*** 1687,1693 **** + u_int i = sizeof(((struct sockaddr *)0)->sa_len) + ; return 0; } + EOF +! if { (eval echo configure:1686: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_lbl_sockaddr_has_sa_len=yes + else +--- 1765,1771 ---- + u_int i = sizeof(((struct sockaddr *)0)->sa_len) + ; return 0; } + EOF +! if { (eval echo configure:1764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_lbl_sockaddr_has_sa_len=yes + else +*************** +*** 1707,1714 **** + + fi + + echo $ac_n "checking if unaligned accesses fail""... $ac_c" 1>&6 +! echo "configure:1707: checking if unaligned accesses fail" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_unaligned_fail'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +--- 1785,1828 ---- + + fi + ++ echo $ac_n "checking if dl_hp_ppa_info_t struct has dl_module_id_1 member""... $ac_c" 1>&6 ++ echo "configure:1785: checking if dl_hp_ppa_info_t struct has dl_module_id_1 member" >&5 ++ if eval "test \"`echo '$''{'ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++ else ++ cat > conftest.$ac_ext <<EOF ++ #line 1790 "configure" ++ #include "confdefs.h" ++ ++ # include <sys/types.h> ++ # include <sys/dlpi.h> ++ # include <sys/dlpi_ext.h> ++ int main() { ++ u_int i = sizeof(((dl_hp_ppa_info_t *)0)->dl_module_id_1) ++ ; return 0; } ++ EOF ++ if { (eval echo configure:1800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++ rm -rf conftest* ++ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=yes ++ else ++ echo "configure: failed program was:" >&5 ++ cat conftest.$ac_ext >&5 ++ rm -rf conftest* ++ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=no ++ fi ++ rm -f conftest* ++ fi ++ ++ echo "$ac_t""$ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1" 1>&6 ++ if test $ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1 = yes ; then ++ cat >> confdefs.h <<\EOF ++ #define HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 1 ++ EOF ++ ++ fi ++ + echo $ac_n "checking if unaligned accesses fail""... $ac_c" 1>&6 +! echo "configure:1821: checking if unaligned accesses fail" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_unaligned_fail'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +*************** +*** 1800,1827 **** + # SunOS /usr/etc/install + # IRIX /sbin/install + # AIX /bin/install + # AFS /usr/afsws/bin/install, which mishandles nonexistent args + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # ./install, which can be erroneously created by make from ./install.sh. + echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +! echo "configure:1803: checking for a BSD compatible install" >&5 + if test -z "$INSTALL"; then + if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +! IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. +! for ac_prog in ginstall installbsd scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +- # OSF/1 installbsd also uses dspmsg, but is usable. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" +--- 1914,1943 ---- + # SunOS /usr/etc/install + # IRIX /sbin/install + # AIX /bin/install ++ # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag + # AFS /usr/afsws/bin/install, which mishandles nonexistent args + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # ./install, which can be erroneously created by make from ./install.sh. + echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +! echo "configure:1918: checking for a BSD compatible install" >&5 + if test -z "$INSTALL"; then + if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +! IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. +! # Don't use installbsd from OSF since it installs stuff as root +! # by default. +! for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" +*************** +*** 1851,1856 **** +--- 1967,1974 ---- + # It thinks the first close brace ends the variable substitution. + test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + ++ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' ++ + test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + +*************** +*** 1877,1883 **** + # Ultrix sh set writes to stderr and can't be redirected directly, + # and sets the high bit in the cache file unless we assign to the vars. + (set) 2>&1 | +! case `(ac_space=' '; set) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). +--- 1995,2001 ---- + # Ultrix sh set writes to stderr and can't be redirected directly, + # and sets the high bit in the cache file unless we assign to the vars. + (set) 2>&1 | +! case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). +*************** +*** 1956,1962 **** + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) +! echo "$CONFIG_STATUS generated by autoconf version 2.12" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; +--- 2074,2080 ---- + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) +! echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; +*************** +*** 1976,1984 **** +--- 2094,2104 ---- + s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF + $ac_vpsub + $extrasub ++ s%@SHELL@%$SHELL%g + s%@CFLAGS@%$CFLAGS%g + s%@CPPFLAGS@%$CPPFLAGS%g + s%@CXXFLAGS@%$CXXFLAGS%g ++ s%@FFLAGS@%$FFLAGS%g + s%@DEFS@%$DEFS%g + s%@LDFLAGS@%$LDFLAGS%g + s%@LIBS@%$LIBS%g +*************** +*** 2022,2027 **** +--- 2142,2148 ---- + s%@V_INCLS@%$V_INCLS%g + s%@V_PCAP@%$V_PCAP%g + s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g ++ s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g + s%@INSTALL_DATA@%$INSTALL_DATA%g + + CEOF +diff -c ../libpcap-0.4.HPUX/configure.in ./configure.in +*** ../libpcap-0.4.HPUX/configure.in Sun Jul 27 22:16:22 1997 +--- ./configure.in Sat Aug 12 23:38:08 2000 +*************** +*** 154,159 **** +--- 154,161 ---- + + AC_LBL_SOCKADDR_SA_LEN + ++ AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1 ++ + AC_LBL_UNALIGNED_ACCESS + + if test "${srcdir}" = "." ; then +diff -c ../libpcap-0.4.HPUX/pcap-dlpi.c ./pcap-dlpi.c +*** ../libpcap-0.4.HPUX/pcap-dlpi.c Wed Oct 15 21:59:34 1997 +--- ./pcap-dlpi.c Sat Aug 12 23:39:39 2000 +*************** +*** 246,255 **** + } + memset(p, 0, sizeof(*p)); + + /* +! ** Determine device and ppa + */ +! cp = strpbrk(device, "0123456789"); + if (cp == NULL) { + sprintf(ebuf, "%s missing unit number", device); + goto bad; +--- 246,266 ---- + } + memset(p, 0, sizeof(*p)); + ++ #ifdef HAVE_DEV_DLPI + /* +! ** Remove any "/dev/" on the front of the device. + */ +! cp = strrchr(device, '/'); +! if (cp == NULL) +! cp = device; +! else +! cp++; +! strcpy(dname, cp); +! +! /* +! * Split the name into a device type and a unit number. +! */ +! cp = strpbrk(dname, "0123456789"); + if (cp == NULL) { + sprintf(ebuf, "%s missing unit number", device); + goto bad; +*************** +*** 259,281 **** + sprintf(ebuf, "%s bad unit number", device); + goto bad; + } + +! if (*device == '/') +! strcpy(dname, device); +! else +! sprintf(dname, "%s/%s", PCAP_DEV_PREFIX, device); +! #ifdef HAVE_DEV_DLPI +! /* Map network device to /dev/dlpi unit */ + cp = "/dev/dlpi"; + if ((p->fd = open(cp, O_RDWR)) < 0) { + sprintf(ebuf, "%s: %s", cp, pcap_strerror(errno)); + goto bad; + } +! /* Map network interface to /dev/dlpi unit */ + ppa = get_dlpi_ppa(p->fd, dname, ppa, ebuf); + if (ppa < 0) + goto bad; + #else + /* Try device without unit number */ + strcpy(dname2, dname); + cp = strchr(dname, *cp); +--- 270,321 ---- + sprintf(ebuf, "%s bad unit number", device); + goto bad; + } ++ *cp = '\0'; + +! /* +! * Use "/dev/dlpi" as the device. +! * +! * XXX - HP's DLPI Programmer's Guide for HP-UX 11.00 says that +! * the "dl_mjr_num" field is for the "major number of interface +! * driver"; that's the major of "/dev/dlpi" on the system on +! * which I tried this, but there may be DLPI devices that +! * use a different driver, in which case we may need to +! * search "/dev" for the appropriate device with that major +! * device number, rather than hardwiring "/dev/dlpi". +! */ + cp = "/dev/dlpi"; + if ((p->fd = open(cp, O_RDWR)) < 0) { + sprintf(ebuf, "%s: %s", cp, pcap_strerror(errno)); + goto bad; + } +! +! /* +! * Get a table of all PPAs for that device, and search that +! * table for the specified device type name and unit number. +! */ + ppa = get_dlpi_ppa(p->fd, dname, ppa, ebuf); + if (ppa < 0) + goto bad; + #else ++ /* ++ ** Determine device and ppa ++ */ ++ cp = strpbrk(device, "0123456789"); ++ if (cp == NULL) { ++ sprintf(ebuf, "%s missing unit number", device); ++ goto bad; ++ } ++ ppa = strtol(cp, &eos, 10); ++ if (*eos != '\0') { ++ sprintf(ebuf, "%s bad unit number", device); ++ goto bad; ++ } ++ ++ if (*device == '/') ++ strcpy(dname, device); ++ else ++ sprintf(dname, "%s/%s", PCAP_DEV_PREFIX, device); ++ + /* Try device without unit number */ + strcpy(dname2, dname); + cp = strchr(dname, *cp); +*************** +*** 391,397 **** + break; + + default: +! sprintf(ebuf, "unknown mac type 0x%lu", infop->dl_mac_type); + goto bad; + } + +--- 431,438 ---- + break; + + default: +! sprintf(ebuf, "unknown mac type 0x%lu", +! (unsigned long)infop->dl_mac_type); + goto bad; + } + +*************** +*** 709,737 **** + + #ifdef DL_HP_PPA_ACK_OBS + /* +! * Under HP-UX 10, we can ask for the ppa + */ + + +! /* Determine ppa number that specifies ifname */ + static int + get_dlpi_ppa(register int fd, register const char *device, register int unit, + register char *ebuf) + { + register dl_hp_ppa_ack_t *ap; +! register dl_hp_ppa_info_t *ip; + register int i; + register u_long majdev; +- dl_hp_ppa_req_t req; + struct stat statbuf; + bpf_u_int32 buf[MAXDLBUF]; + +- if (stat(device, &statbuf) < 0) { +- sprintf(ebuf, "stat: %s: %s", device, pcap_strerror(errno)); +- return (-1); +- } +- majdev = major(statbuf.st_rdev); +- + memset((char *)&req, 0, sizeof(req)); + req.dl_primitive = DL_HP_PPA_REQ; + +--- 750,806 ---- + + #ifdef DL_HP_PPA_ACK_OBS + /* +! * Under HP-UX 10 and HP-UX 11, we can ask for the ppa + */ + + +! /* +! * Determine ppa number that specifies ifname. +! * +! * If the "dl_hp_ppa_info_t" doesn't have a "dl_module_id_1" member, +! * the code that's used here is the old code for HP-UX 10.x. +! * +! * However, HP-UX 10.20, at least, appears to have such a member +! * in its "dl_hp_ppa_info_t" structure, so the new code is used. +! * The new code didn't work on an old 10.20 system on which Rick +! * Jones of HP tried it, but with later patches installed, it +! * worked - it appears that the older system had those members but +! * didn't put anything in them, so, if the search by name fails, we +! * do the old search. +! * +! * Rick suggests that making sure your system is "up on the latest +! * lancommon/DLPI/driver patches" is probably a good idea; it'd fix +! * that problem, as well as allowing libpcap to see packets sent +! * from the system on which the libpcap application is being run. +! * (On 10.20, in addition to getting the latest patches, you need +! * to turn the kernel "lanc_outbound_promisc_flag" flag on with ADB; +! * a posting to "comp.sys.hp.hpux" at +! * +! * http://www.deja.com/[ST_rn=ps]/getdoc.xp?AN=558092266 +! * +! * says that, to see the machine's outgoing traffic, you'd need to +! * apply the right patches to your system, and also set that variable +! * with: +! +! echo 'lanc_outbound_promisc_flag/W1' | /usr/bin/adb -w /stand/vmunix /dev/kmem +! +! * which could be put in, for example, "/sbin/init.d/lan". +! * +! * Setting the variable is not necessary on HP-UX 11.x. +! */ + static int + get_dlpi_ppa(register int fd, register const char *device, register int unit, + register char *ebuf) + { + register dl_hp_ppa_ack_t *ap; +! register dl_hp_ppa_info_t *ipstart, *ip; + register int i; ++ char dname[100]; + register u_long majdev; + struct stat statbuf; ++ dl_hp_ppa_req_t req; + bpf_u_int32 buf[MAXDLBUF]; + + memset((char *)&req, 0, sizeof(req)); + req.dl_primitive = DL_HP_PPA_REQ; + +*************** +*** 741,760 **** + return (-1); + + ap = (dl_hp_ppa_ack_t *)buf; +! ip = (dl_hp_ppa_info_t *)((u_char *)ap + ap->dl_offset); + +! for(i = 0; i < ap->dl_count; i++) { +! if (ip->dl_mjr_num == majdev && ip->dl_instance_num == unit) +! break; + +! ip = (dl_hp_ppa_info_t *)((u_char *)ip + ip->dl_next_offset); +! } + if (i == ap->dl_count) { +! sprintf(ebuf, "can't find PPA for %s", device); + return (-1); + } + if (ip->dl_hdw_state == HDW_DEAD) { +! sprintf(ebuf, "%s: hardware state: DOWN\n", device); + return (-1); + } + return ((int)ip->dl_ppa); +--- 810,887 ---- + return (-1); + + ap = (dl_hp_ppa_ack_t *)buf; +! ipstart = (dl_hp_ppa_info_t *)((u_char *)ap + ap->dl_offset); +! ip = ipstart; + +! #ifdef HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 +! /* +! * The "dl_hp_ppa_info_t" structure has a "dl_module_id_1" +! * member that should, in theory, contain the part of the +! * name for the device that comes before the unit number, +! * and should also have a "dl_module_id_2" member that may +! * contain an alternate name (e.g., I think Ethernet devices +! * have both "lan", for "lanN", and "snap", for "snapN", with +! * the former being for Ethernet packets and the latter being +! * for 802.3/802.2 packets). +! * +! * Search for the device that has the specified name and +! * instance number. +! */ +! for (i = 0; i < ap->dl_count; i++) { +! if ((strcmp(ip->dl_module_id_1, device) == 0 || +! strcmp(ip->dl_module_id_2, device) == 0) && +! ip->dl_instance_num == unit) +! break; + +! ip = (dl_hp_ppa_info_t *)((u_char *)ipstart + ip->dl_next_offset); +! } +! #else +! /* +! * We don't have that member, so the search is impossible; make it +! * look as if the search failed. +! */ +! i = ap->dl_count; +! #endif +! +! if (i == ap->dl_count) { +! /* +! * Well, we didn't, or can't, find the device by name. +! * +! * HP-UX 10.20, whilst it has "dl_module_id_1" and +! * "dl_module_id_2" fields in the "dl_hp_ppa_info_t", +! * doesn't seem to fill them in unless the system is +! * at a reasonably up-to-date patch level. +! * +! * Older HP-UX 10.x systems might not have those fields +! * at all. +! * +! * Therefore, we'll search for the entry with the major +! * device number of a device with the name "/dev/<dev><unit>", +! * if such a device exists, as the old code did. +! */ +! sprintf(dname, "/dev/%s%d", device, unit); +! if (stat(dname, &statbuf) < 0) { +! sprintf(ebuf, "stat: %s: %s", dname, pcap_strerror(errno)); +! return (-1); +! } +! majdev = major(statbuf.st_rdev); +! +! ip = ipstart; +! +! for (i = 0; i < ap->dl_count; i++) { +! if (ip->dl_mjr_num == majdev && +! ip->dl_instance_num == unit) +! break; +! +! ip = (dl_hp_ppa_info_t *)((u_char *)ipstart + ip->dl_next_offset); +! } +! } + if (i == ap->dl_count) { +! sprintf(ebuf, "can't find /dev/dlpi PPA for %s%d", device, unit); + return (-1); + } + if (ip->dl_hdw_state == HDW_DEAD) { +! sprintf(ebuf, "%s%d: hardware state: DOWN\n", device, unit); + return (-1); + } + return ((int)ip->dl_ppa); +*************** +*** 783,789 **** + register int kd; + void *addr; + struct ifnet ifnet; +! char if_name[sizeof(ifnet.if_name)], tifname[32]; + + cp = strrchr(ifname, '/'); + if (cp != NULL) +--- 910,916 ---- + register int kd; + void *addr; + struct ifnet ifnet; +! char if_name[sizeof(ifnet.if_name) + 1]; + + cp = strrchr(ifname, '/'); + if (cp != NULL) +*************** +*** 811,823 **** + if (dlpi_kread(kd, (off_t)addr, + &ifnet, sizeof(ifnet), ebuf) < 0 || + dlpi_kread(kd, (off_t)ifnet.if_name, +! if_name, sizeof(if_name), ebuf) < 0) { + (void)close(kd); + return (-1); + } +! sprintf(tifname, "%.*s%d", +! (int)sizeof(if_name), if_name, ifnet.if_unit); +! if (strcmp(tifname, ifname) == 0) + return (ifnet.if_index); + } + +--- 938,949 ---- + if (dlpi_kread(kd, (off_t)addr, + &ifnet, sizeof(ifnet), ebuf) < 0 || + dlpi_kread(kd, (off_t)ifnet.if_name, +! if_name, sizeof(ifnet.if_name), ebuf) < 0) { + (void)close(kd); + return (-1); + } +! if_name[sizeof(ifnet.if_name)] = '\0'; +! if (strcmp(if_name, ifname) == 0 && ifnet.if_unit == unit) + return (ifnet.if_index); + } + diff --git a/libpcap-0.4.HPUX.LBL.patch b/libpcap-0.4.HPUX.LBL.patch new file mode 100644 index 0000000000..99c47b5f62 --- /dev/null +++ b/libpcap-0.4.HPUX.LBL.patch @@ -0,0 +1,503 @@ +diff -c ../libpcap-0.4/aclocal.m4 ./aclocal.m4 +*** ../libpcap-0.4/aclocal.m4 Fri Jun 12 03:45:15 1998 +--- ./aclocal.m4 Tue Jan 4 21:02:13 2000 +*************** +*** 415,420 **** +--- 415,454 ---- + fi]) + + dnl ++ dnl Checks to see if the dl_hp_ppa_info_t struct has the HP-UX 11.00 ++ dnl dl_module_id_1 member ++ dnl ++ dnl usage: ++ dnl ++ dnl AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1 ++ dnl ++ dnl results: ++ dnl ++ dnl HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 (defined) ++ dnl ++ dnl NOTE: any compile failure means we conclude that it doesn't have ++ dnl that member, so if we don't have DLPI, don't have a <sys/dlpi_ext.h> ++ dnl header, or have one that doesn't declare a dl_hp_ppa_info_t type, ++ dnl we conclude it doesn't have that member (which is OK, as either we ++ dnl won't be using code that would use that member, or we wouldn't ++ dnl compile in any case). ++ dnl ++ AC_DEFUN(AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1, ++ [AC_MSG_CHECKING(if dl_hp_ppa_info_t struct has dl_module_id_1 member) ++ AC_CACHE_VAL(ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1, ++ AC_TRY_COMPILE([ ++ # include <sys/types.h> ++ # include <sys/dlpi.h> ++ # include <sys/dlpi_ext.h>], ++ [u_int i = sizeof(((dl_hp_ppa_info_t *)0)->dl_module_id_1)], ++ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=yes, ++ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=no)) ++ AC_MSG_RESULT($ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1) ++ if test $ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1 = yes ; then ++ AC_DEFINE(HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1) ++ fi]) ++ ++ dnl + dnl Checks to see if -R is used + dnl + dnl usage: +diff -c ../libpcap-0.4/configure ./configure +*** ../libpcap-0.4/configure Sat Jul 25 12:41:51 1998 +--- ./configure Fri Jan 14 00:40:04 2000 +*************** +*** 1702,1709 **** + + fi + + echo $ac_n "checking if unaligned accesses fail""... $ac_c" 1>&6 +! echo "configure:1707: checking if unaligned accesses fail" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_unaligned_fail'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +--- 1702,1745 ---- + + fi + ++ echo $ac_n "checking if dl_hp_ppa_info_t struct has dl_module_id_1 member""... $ac_c" 1>&6 ++ echo "configure:1707: checking if dl_hp_ppa_info_t struct has dl_module_id_1 member" >&5 ++ if eval "test \"`echo '$''{'ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++ else ++ cat > conftest.$ac_ext <<EOF ++ #line 1712 "configure" ++ #include "confdefs.h" ++ ++ # include <sys/types.h> ++ # include <sys/dlpi.h> ++ # include <sys/dlpi_ext.h> ++ int main() { ++ u_int i = sizeof(((dl_hp_ppa_info_t *)0)->dl_module_id_1) ++ ; return 0; } ++ EOF ++ if { (eval echo configure:1722: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++ rm -rf conftest* ++ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=yes ++ else ++ echo "configure: failed program was:" >&5 ++ cat conftest.$ac_ext >&5 ++ rm -rf conftest* ++ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=no ++ fi ++ rm -f conftest* ++ fi ++ ++ echo "$ac_t""$ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1" 1>&6 ++ if test $ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1 = yes ; then ++ cat >> confdefs.h <<\EOF ++ #define HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 1 ++ EOF ++ ++ fi ++ + echo $ac_n "checking if unaligned accesses fail""... $ac_c" 1>&6 +! echo "configure:1743: checking if unaligned accesses fail" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_unaligned_fail'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +*************** +*** 1799,1805 **** + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # ./install, which can be erroneously created by make from ./install.sh. + echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +! echo "configure:1803: checking for a BSD compatible install" >&5 + if test -z "$INSTALL"; then + if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +--- 1835,1841 ---- + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # ./install, which can be erroneously created by make from ./install.sh. + echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +! echo "configure:1839: checking for a BSD compatible install" >&5 + if test -z "$INSTALL"; then + if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +diff -c ../libpcap-0.4/configure.in ./configure.in +*** ../libpcap-0.4/configure.in Sun Jul 27 22:16:22 1997 +--- ./configure.in Tue Jan 4 21:02:13 2000 +*************** +*** 154,159 **** +--- 154,161 ---- + + AC_LBL_SOCKADDR_SA_LEN + ++ AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1 ++ + AC_LBL_UNALIGNED_ACCESS + + if test "${srcdir}" = "." ; then +diff -c ../libpcap-0.4/pcap-dlpi.c ./pcap-dlpi.c +*** ../libpcap-0.4/pcap-dlpi.c Wed Oct 15 21:59:34 1997 +--- ./pcap-dlpi.c Sat Aug 12 23:57:13 2000 +*************** +*** 246,255 **** + } + memset(p, 0, sizeof(*p)); + + /* +! ** Determine device and ppa + */ +! cp = strpbrk(device, "0123456789"); + if (cp == NULL) { + sprintf(ebuf, "%s missing unit number", device); + goto bad; +--- 246,266 ---- + } + memset(p, 0, sizeof(*p)); + ++ #ifdef HAVE_DEV_DLPI + /* +! ** Remove any "/dev/" on the front of the device. + */ +! cp = strrchr(device, '/'); +! if (cp == NULL) +! cp = device; +! else +! cp++; +! strcpy(dname, cp); +! +! /* +! * Split the name into a device type and a unit number. +! */ +! cp = strpbrk(dname, "0123456789"); + if (cp == NULL) { + sprintf(ebuf, "%s missing unit number", device); + goto bad; +*************** +*** 259,281 **** + sprintf(ebuf, "%s bad unit number", device); + goto bad; + } + +! if (*device == '/') +! strcpy(dname, device); +! else +! sprintf(dname, "%s/%s", PCAP_DEV_PREFIX, device); +! #ifdef HAVE_DEV_DLPI +! /* Map network device to /dev/dlpi unit */ + cp = "/dev/dlpi"; + if ((p->fd = open(cp, O_RDWR)) < 0) { + sprintf(ebuf, "%s: %s", cp, pcap_strerror(errno)); + goto bad; + } +! /* Map network interface to /dev/dlpi unit */ + ppa = get_dlpi_ppa(p->fd, dname, ppa, ebuf); + if (ppa < 0) + goto bad; + #else + /* Try device without unit number */ + strcpy(dname2, dname); + cp = strchr(dname, *cp); +--- 270,321 ---- + sprintf(ebuf, "%s bad unit number", device); + goto bad; + } ++ *cp = '\0'; + +! /* +! * Use "/dev/dlpi" as the device. +! * +! * XXX - HP's DLPI Programmer's Guide for HP-UX 11.00 says that +! * the "dl_mjr_num" field is for the "major number of interface +! * driver"; that's the major of "/dev/dlpi" on the system on +! * which I tried this, but there may be DLPI devices that +! * use a different driver, in which case we may need to +! * search "/dev" for the appropriate device with that major +! * device number, rather than hardwiring "/dev/dlpi". +! */ + cp = "/dev/dlpi"; + if ((p->fd = open(cp, O_RDWR)) < 0) { + sprintf(ebuf, "%s: %s", cp, pcap_strerror(errno)); + goto bad; + } +! +! /* +! * Get a table of all PPAs for that device, and search that +! * table for the specified device type name and unit number. +! */ + ppa = get_dlpi_ppa(p->fd, dname, ppa, ebuf); + if (ppa < 0) + goto bad; + #else ++ /* ++ ** Determine device and ppa ++ */ ++ cp = strpbrk(device, "0123456789"); ++ if (cp == NULL) { ++ sprintf(ebuf, "%s missing unit number", device); ++ goto bad; ++ } ++ ppa = strtol(cp, &eos, 10); ++ if (*eos != '\0') { ++ sprintf(ebuf, "%s bad unit number", device); ++ goto bad; ++ } ++ ++ if (*device == '/') ++ strcpy(dname, device); ++ else ++ sprintf(dname, "%s/%s", PCAP_DEV_PREFIX, device); ++ + /* Try device without unit number */ + strcpy(dname2, dname); + cp = strchr(dname, *cp); +*************** +*** 391,397 **** + break; + + default: +! sprintf(ebuf, "unknown mac type 0x%lu", infop->dl_mac_type); + goto bad; + } + +--- 431,438 ---- + break; + + default: +! sprintf(ebuf, "unknown mac type 0x%lu", +! (unsigned long)infop->dl_mac_type); + goto bad; + } + +*************** +*** 709,737 **** + + #ifdef DL_HP_PPA_ACK_OBS + /* +! * Under HP-UX 10, we can ask for the ppa + */ + + +! /* Determine ppa number that specifies ifname */ + static int + get_dlpi_ppa(register int fd, register const char *device, register int unit, + register char *ebuf) + { + register dl_hp_ppa_ack_t *ap; +! register dl_hp_ppa_info_t *ip; + register int i; + register u_long majdev; +- dl_hp_ppa_req_t req; + struct stat statbuf; + bpf_u_int32 buf[MAXDLBUF]; + +- if (stat(device, &statbuf) < 0) { +- sprintf(ebuf, "stat: %s: %s", device, pcap_strerror(errno)); +- return (-1); +- } +- majdev = major(statbuf.st_rdev); +- + memset((char *)&req, 0, sizeof(req)); + req.dl_primitive = DL_HP_PPA_REQ; + +--- 750,806 ---- + + #ifdef DL_HP_PPA_ACK_OBS + /* +! * Under HP-UX 10 and HP-UX 11, we can ask for the ppa + */ + + +! /* +! * Determine ppa number that specifies ifname. +! * +! * If the "dl_hp_ppa_info_t" doesn't have a "dl_module_id_1" member, +! * the code that's used here is the old code for HP-UX 10.x. +! * +! * However, HP-UX 10.20, at least, appears to have such a member +! * in its "dl_hp_ppa_info_t" structure, so the new code is used. +! * The new code didn't work on an old 10.20 system on which Rick +! * Jones of HP tried it, but with later patches installed, it +! * worked - it appears that the older system had those members but +! * didn't put anything in them, so, if the search by name fails, we +! * do the old search. +! * +! * Rick suggests that making sure your system is "up on the latest +! * lancommon/DLPI/driver patches" is probably a good idea; it'd fix +! * that problem, as well as allowing libpcap to see packets sent +! * from the system on which the libpcap application is being run. +! * (On 10.20, in addition to getting the latest patches, you need +! * to turn the kernel "lanc_outbound_promisc_flag" flag on with ADB; +! * a posting to "comp.sys.hp.hpux" at +! * +! * http://www.deja.com/[ST_rn=ps]/getdoc.xp?AN=558092266 +! * +! * says that, to see the machine's outgoing traffic, you'd need to +! * apply the right patches to your system, and also set that variable +! * with: +! +! echo 'lanc_outbound_promisc_flag/W1' | /usr/bin/adb -w /stand/vmunix /dev/kmem +! +! * which could be put in, for example, "/sbin/init.d/lan". +! * +! * Setting the variable is not necessary on HP-UX 11.x. +! */ + static int + get_dlpi_ppa(register int fd, register const char *device, register int unit, + register char *ebuf) + { + register dl_hp_ppa_ack_t *ap; +! register dl_hp_ppa_info_t *ipstart, *ip; + register int i; ++ char dname[100]; + register u_long majdev; + struct stat statbuf; ++ dl_hp_ppa_req_t req; + bpf_u_int32 buf[MAXDLBUF]; + + memset((char *)&req, 0, sizeof(req)); + req.dl_primitive = DL_HP_PPA_REQ; + +*************** +*** 741,760 **** + return (-1); + + ap = (dl_hp_ppa_ack_t *)buf; +! ip = (dl_hp_ppa_info_t *)((u_char *)ap + ap->dl_offset); + +! for(i = 0; i < ap->dl_count; i++) { +! if (ip->dl_mjr_num == majdev && ip->dl_instance_num == unit) +! break; + +! ip = (dl_hp_ppa_info_t *)((u_char *)ip + ip->dl_next_offset); +! } + if (i == ap->dl_count) { +! sprintf(ebuf, "can't find PPA for %s", device); + return (-1); + } + if (ip->dl_hdw_state == HDW_DEAD) { +! sprintf(ebuf, "%s: hardware state: DOWN\n", device); + return (-1); + } + return ((int)ip->dl_ppa); +--- 810,887 ---- + return (-1); + + ap = (dl_hp_ppa_ack_t *)buf; +! ipstart = (dl_hp_ppa_info_t *)((u_char *)ap + ap->dl_offset); +! ip = ipstart; + +! #ifdef HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 +! /* +! * The "dl_hp_ppa_info_t" structure has a "dl_module_id_1" +! * member that should, in theory, contain the part of the +! * name for the device that comes before the unit number, +! * and should also have a "dl_module_id_2" member that may +! * contain an alternate name (e.g., I think Ethernet devices +! * have both "lan", for "lanN", and "snap", for "snapN", with +! * the former being for Ethernet packets and the latter being +! * for 802.3/802.2 packets). +! * +! * Search for the device that has the specified name and +! * instance number. +! */ +! for (i = 0; i < ap->dl_count; i++) { +! if ((strcmp(ip->dl_module_id_1, device) == 0 || +! strcmp(ip->dl_module_id_2, device) == 0) && +! ip->dl_instance_num == unit) +! break; + +! ip = (dl_hp_ppa_info_t *)((u_char *)ipstart + ip->dl_next_offset); +! } +! #else +! /* +! * We don't have that member, so the search is impossible; make it +! * look as if the search failed. +! */ +! i = ap->dl_count; +! #endif +! +! if (i == ap->dl_count) { +! /* +! * Well, we didn't, or can't, find the device by name. +! * +! * HP-UX 10.20, whilst it has "dl_module_id_1" and +! * "dl_module_id_2" fields in the "dl_hp_ppa_info_t", +! * doesn't seem to fill them in unless the system is +! * at a reasonably up-to-date patch level. +! * +! * Older HP-UX 10.x systems might not have those fields +! * at all. +! * +! * Therefore, we'll search for the entry with the major +! * device number of a device with the name "/dev/<dev><unit>", +! * if such a device exists, as the old code did. +! */ +! sprintf(dname, "/dev/%s%d", device, unit); +! if (stat(dname, &statbuf) < 0) { +! sprintf(ebuf, "stat: %s: %s", dname, pcap_strerror(errno)); +! return (-1); +! } +! majdev = major(statbuf.st_rdev); +! +! ip = ipstart; +! +! for (i = 0; i < ap->dl_count; i++) { +! if (ip->dl_mjr_num == majdev && +! ip->dl_instance_num == unit) +! break; +! +! ip = (dl_hp_ppa_info_t *)((u_char *)ipstart + ip->dl_next_offset); +! } +! } + if (i == ap->dl_count) { +! sprintf(ebuf, "can't find /dev/dlpi PPA for %s%d", device, unit); + return (-1); + } + if (ip->dl_hdw_state == HDW_DEAD) { +! sprintf(ebuf, "%s%d: hardware state: DOWN\n", device, unit); + return (-1); + } + return ((int)ip->dl_ppa); +*************** +*** 783,789 **** + register int kd; + void *addr; + struct ifnet ifnet; +! char if_name[sizeof(ifnet.if_name)], tifname[32]; + + cp = strrchr(ifname, '/'); + if (cp != NULL) +--- 910,916 ---- + register int kd; + void *addr; + struct ifnet ifnet; +! char if_name[sizeof(ifnet.if_name) + 1]; + + cp = strrchr(ifname, '/'); + if (cp != NULL) +*************** +*** 811,823 **** + if (dlpi_kread(kd, (off_t)addr, + &ifnet, sizeof(ifnet), ebuf) < 0 || + dlpi_kread(kd, (off_t)ifnet.if_name, +! if_name, sizeof(if_name), ebuf) < 0) { + (void)close(kd); + return (-1); + } +! sprintf(tifname, "%.*s%d", +! (int)sizeof(if_name), if_name, ifnet.if_unit); +! if (strcmp(tifname, ifname) == 0) + return (ifnet.if_index); + } + +--- 938,949 ---- + if (dlpi_kread(kd, (off_t)addr, + &ifnet, sizeof(ifnet), ebuf) < 0 || + dlpi_kread(kd, (off_t)ifnet.if_name, +! if_name, sizeof(ifnet.if_name), ebuf) < 0) { + (void)close(kd); + return (-1); + } +! if_name[sizeof(ifnet.if_name)] = '\0'; +! if (strcmp(if_name, ifname) == 0 && ifnet.if_unit == unit) + return (ifnet.if_index); + } + diff --git a/libpcap-0.5.HPUX.tcpdump.org.patch b/libpcap-0.5.HPUX.tcpdump.org.patch new file mode 100644 index 0000000000..3031f3fcd5 --- /dev/null +++ b/libpcap-0.5.HPUX.tcpdump.org.patch @@ -0,0 +1,519 @@ +Index: aclocal.m4 +=================================================================== +RCS file: /tcpdump/master/libpcap/aclocal.m4,v +retrieving revision 1.66 +diff -c -r1.66 aclocal.m4 +*** aclocal.m4 1999/10/30 04:41:48 1.66 +--- aclocal.m4 2000/08/13 07:23:45 +*************** +*** 415,420 **** +--- 415,454 ---- + fi]) + + dnl ++ dnl Checks to see if the dl_hp_ppa_info_t struct has the HP-UX 11.00 ++ dnl dl_module_id_1 member ++ dnl ++ dnl usage: ++ dnl ++ dnl AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1 ++ dnl ++ dnl results: ++ dnl ++ dnl HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 (defined) ++ dnl ++ dnl NOTE: any compile failure means we conclude that it doesn't have ++ dnl that member, so if we don't have DLPI, don't have a <sys/dlpi_ext.h> ++ dnl header, or have one that doesn't declare a dl_hp_ppa_info_t type, ++ dnl we conclude it doesn't have that member (which is OK, as either we ++ dnl won't be using code that would use that member, or we wouldn't ++ dnl compile in any case). ++ dnl ++ AC_DEFUN(AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1, ++ [AC_MSG_CHECKING(if dl_hp_ppa_info_t struct has dl_module_id_1 member) ++ AC_CACHE_VAL(ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1, ++ AC_TRY_COMPILE([ ++ # include <sys/types.h> ++ # include <sys/dlpi.h> ++ # include <sys/dlpi_ext.h>], ++ [u_int i = sizeof(((dl_hp_ppa_info_t *)0)->dl_module_id_1)], ++ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=yes, ++ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=no)) ++ AC_MSG_RESULT($ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1) ++ if test $ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1 = yes ; then ++ AC_DEFINE(HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1) ++ fi]) ++ ++ dnl + dnl Checks to see if -R is used + dnl + dnl usage: +Index: configure +=================================================================== +RCS file: /tcpdump/master/libpcap/configure,v +retrieving revision 1.5 +diff -c -r1.5 configure +*** configure 1999/11/01 15:56:40 1.5 +--- configure 2000/08/13 07:23:50 +*************** +*** 1822,1829 **** + + fi + + echo $ac_n "checking if unaligned accesses fail""... $ac_c" 1>&6 +! echo "configure:1827: checking if unaligned accesses fail" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_unaligned_fail'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +--- 1822,1865 ---- + + fi + ++ echo $ac_n "checking if dl_hp_ppa_info_t struct has dl_module_id_1 member""... $ac_c" 1>&6 ++ echo "configure:1827: checking if dl_hp_ppa_info_t struct has dl_module_id_1 member" >&5 ++ if eval "test \"`echo '$''{'ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++ else ++ cat > conftest.$ac_ext <<EOF ++ #line 1832 "configure" ++ #include "confdefs.h" ++ ++ # include <sys/types.h> ++ # include <sys/dlpi.h> ++ # include <sys/dlpi_ext.h> ++ int main() { ++ u_int i = sizeof(((dl_hp_ppa_info_t *)0)->dl_module_id_1) ++ ; return 0; } ++ EOF ++ if { (eval echo configure:1842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++ rm -rf conftest* ++ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=yes ++ else ++ echo "configure: failed program was:" >&5 ++ cat conftest.$ac_ext >&5 ++ rm -rf conftest* ++ ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1=no ++ fi ++ rm -f conftest* ++ fi ++ ++ echo "$ac_t""$ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1" 1>&6 ++ if test $ac_cv_lbl_dl_hp_ppa_info_t_has_dl_module_id_1 = yes ; then ++ cat >> confdefs.h <<\EOF ++ #define HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 1 ++ EOF ++ ++ fi ++ + echo $ac_n "checking if unaligned accesses fail""... $ac_c" 1>&6 +! echo "configure:1863: checking if unaligned accesses fail" >&5 + if eval "test \"`echo '$''{'ac_cv_lbl_unaligned_fail'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +*************** +*** 1912,1918 **** + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # ./install, which can be erroneously created by make from ./install.sh. + echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +! echo "configure:1916: checking for a BSD compatible install" >&5 + if test -z "$INSTALL"; then + if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +--- 1948,1954 ---- + # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" + # ./install, which can be erroneously created by make from ./install.sh. + echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +! echo "configure:1952: checking for a BSD compatible install" >&5 + if test -z "$INSTALL"; then + if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +Index: configure.in +=================================================================== +RCS file: /tcpdump/master/libpcap/configure.in,v +retrieving revision 1.71 +diff -c -r1.71 configure.in +*** configure.in 1999/11/01 15:56:40 1.71 +--- configure.in 2000/08/13 07:23:51 +*************** +*** 175,180 **** +--- 175,182 ---- + + AC_LBL_SOCKADDR_SA_LEN + ++ AC_LBL_HP_PPA_INFO_T_DL_MODULE_ID_1 ++ + AC_LBL_UNALIGNED_ACCESS + + if test -r ${srcdir}/lbl/gnuc.h ; then +Index: pcap-dlpi.c +=================================================================== +RCS file: /tcpdump/master/libpcap/pcap-dlpi.c,v +retrieving revision 1.52.1.1 +diff -c -r1.52.1.1 pcap-dlpi.c +*** pcap-dlpi.c 1999/10/07 23:46:40 1.52.1.1 +--- pcap-dlpi.c 2000/08/13 07:23:52 +*************** +*** 246,255 **** + } + memset(p, 0, sizeof(*p)); + + /* +! ** Determine device and ppa + */ +! cp = strpbrk(device, "0123456789"); + if (cp == NULL) { + sprintf(ebuf, "%s missing unit number", device); + goto bad; +--- 246,266 ---- + } + memset(p, 0, sizeof(*p)); + ++ #ifdef HAVE_DEV_DLPI + /* +! ** Remove any "/dev/" on the front of the device. + */ +! cp = strrchr(device, '/'); +! if (cp == NULL) +! cp = device; +! else +! cp++; +! strcpy(dname, cp); +! +! /* +! * Split the name into a device type and a unit number. +! */ +! cp = strpbrk(dname, "0123456789"); + if (cp == NULL) { + sprintf(ebuf, "%s missing unit number", device); + goto bad; +*************** +*** 259,281 **** + sprintf(ebuf, "%s bad unit number", device); + goto bad; + } + +! if (*device == '/') +! strcpy(dname, device); +! else +! sprintf(dname, "%s/%s", PCAP_DEV_PREFIX, device); +! #ifdef HAVE_DEV_DLPI +! /* Map network device to /dev/dlpi unit */ + cp = "/dev/dlpi"; + if ((p->fd = open(cp, O_RDWR)) < 0) { + sprintf(ebuf, "%s: %s", cp, pcap_strerror(errno)); + goto bad; + } +! /* Map network interface to /dev/dlpi unit */ + ppa = get_dlpi_ppa(p->fd, dname, ppa, ebuf); + if (ppa < 0) + goto bad; + #else + /* Try device without unit number */ + strcpy(dname2, dname); + cp = strchr(dname, *cp); +--- 270,321 ---- + sprintf(ebuf, "%s bad unit number", device); + goto bad; + } ++ *cp = '\0'; + +! /* +! * Use "/dev/dlpi" as the device. +! * +! * XXX - HP's DLPI Programmer's Guide for HP-UX 11.00 says that +! * the "dl_mjr_num" field is for the "major number of interface +! * driver"; that's the major of "/dev/dlpi" on the system on +! * which I tried this, but there may be DLPI devices that +! * use a different driver, in which case we may need to +! * search "/dev" for the appropriate device with that major +! * device number, rather than hardwiring "/dev/dlpi". +! */ + cp = "/dev/dlpi"; + if ((p->fd = open(cp, O_RDWR)) < 0) { + sprintf(ebuf, "%s: %s", cp, pcap_strerror(errno)); + goto bad; + } +! +! /* +! * Get a table of all PPAs for that device, and search that +! * table for the specified device type name and unit number. +! */ + ppa = get_dlpi_ppa(p->fd, dname, ppa, ebuf); + if (ppa < 0) + goto bad; + #else ++ /* ++ ** Determine device and ppa ++ */ ++ cp = strpbrk(device, "0123456789"); ++ if (cp == NULL) { ++ sprintf(ebuf, "%s missing unit number", device); ++ goto bad; ++ } ++ ppa = strtol(cp, &eos, 10); ++ if (*eos != '\0') { ++ sprintf(ebuf, "%s bad unit number", device); ++ goto bad; ++ } ++ ++ if (*device == '/') ++ strcpy(dname, device); ++ else ++ sprintf(dname, "%s/%s", PCAP_DEV_PREFIX, device); ++ + /* Try device without unit number */ + strcpy(dname2, dname); + cp = strchr(dname, *cp); +*************** +*** 391,397 **** + break; + + default: +! sprintf(ebuf, "unknown mac type 0x%lu", infop->dl_mac_type); + goto bad; + } + +--- 431,438 ---- + break; + + default: +! sprintf(ebuf, "unknown mac type 0x%lu", +! (unsigned long)infop->dl_mac_type); + goto bad; + } + +*************** +*** 709,737 **** + + #ifdef DL_HP_PPA_ACK_OBS + /* +! * Under HP-UX 10, we can ask for the ppa + */ + + +! /* Determine ppa number that specifies ifname */ + static int + get_dlpi_ppa(register int fd, register const char *device, register int unit, + register char *ebuf) + { + register dl_hp_ppa_ack_t *ap; +! register dl_hp_ppa_info_t *ip; + register int i; + register u_long majdev; +- dl_hp_ppa_req_t req; + struct stat statbuf; + bpf_u_int32 buf[MAXDLBUF]; + +- if (stat(device, &statbuf) < 0) { +- sprintf(ebuf, "stat: %s: %s", device, pcap_strerror(errno)); +- return (-1); +- } +- majdev = major(statbuf.st_rdev); +- + memset((char *)&req, 0, sizeof(req)); + req.dl_primitive = DL_HP_PPA_REQ; + +--- 750,806 ---- + + #ifdef DL_HP_PPA_ACK_OBS + /* +! * Under HP-UX 10 and HP-UX 11, we can ask for the ppa + */ + + +! /* +! * Determine ppa number that specifies ifname. +! * +! * If the "dl_hp_ppa_info_t" doesn't have a "dl_module_id_1" member, +! * the code that's used here is the old code for HP-UX 10.x. +! * +! * However, HP-UX 10.20, at least, appears to have such a member +! * in its "dl_hp_ppa_info_t" structure, so the new code is used. +! * The new code didn't work on an old 10.20 system on which Rick +! * Jones of HP tried it, but with later patches installed, it +! * worked - it appears that the older system had those members but +! * didn't put anything in them, so, if the search by name fails, we +! * do the old search. +! * +! * Rick suggests that making sure your system is "up on the latest +! * lancommon/DLPI/driver patches" is probably a good idea; it'd fix +! * that problem, as well as allowing libpcap to see packets sent +! * from the system on which the libpcap application is being run. +! * (On 10.20, in addition to getting the latest patches, you need +! * to turn the kernel "lanc_outbound_promisc_flag" flag on with ADB; +! * a posting to "comp.sys.hp.hpux" at +! * +! * http://www.deja.com/[ST_rn=ps]/getdoc.xp?AN=558092266 +! * +! * says that, to see the machine's outgoing traffic, you'd need to +! * apply the right patches to your system, and also set that variable +! * with: +! +! echo 'lanc_outbound_promisc_flag/W1' | /usr/bin/adb -w /stand/vmunix /dev/kmem +! +! * which could be put in, for example, "/sbin/init.d/lan". +! * +! * Setting the variable is not necessary on HP-UX 11.x. +! */ + static int + get_dlpi_ppa(register int fd, register const char *device, register int unit, + register char *ebuf) + { + register dl_hp_ppa_ack_t *ap; +! register dl_hp_ppa_info_t *ipstart, *ip; + register int i; ++ char dname[100]; + register u_long majdev; + struct stat statbuf; ++ dl_hp_ppa_req_t req; + bpf_u_int32 buf[MAXDLBUF]; + + memset((char *)&req, 0, sizeof(req)); + req.dl_primitive = DL_HP_PPA_REQ; + +*************** +*** 741,760 **** + return (-1); + + ap = (dl_hp_ppa_ack_t *)buf; +! ip = (dl_hp_ppa_info_t *)((u_char *)ap + ap->dl_offset); + +! for(i = 0; i < ap->dl_count; i++) { +! if (ip->dl_mjr_num == majdev && ip->dl_instance_num == unit) +! break; + +! ip = (dl_hp_ppa_info_t *)((u_char *)ip + ip->dl_next_offset); +! } + if (i == ap->dl_count) { +! sprintf(ebuf, "can't find PPA for %s", device); + return (-1); + } + if (ip->dl_hdw_state == HDW_DEAD) { +! sprintf(ebuf, "%s: hardware state: DOWN\n", device); + return (-1); + } + return ((int)ip->dl_ppa); +--- 810,887 ---- + return (-1); + + ap = (dl_hp_ppa_ack_t *)buf; +! ipstart = (dl_hp_ppa_info_t *)((u_char *)ap + ap->dl_offset); +! ip = ipstart; + +! #ifdef HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 +! /* +! * The "dl_hp_ppa_info_t" structure has a "dl_module_id_1" +! * member that should, in theory, contain the part of the +! * name for the device that comes before the unit number, +! * and should also have a "dl_module_id_2" member that may +! * contain an alternate name (e.g., I think Ethernet devices +! * have both "lan", for "lanN", and "snap", for "snapN", with +! * the former being for Ethernet packets and the latter being +! * for 802.3/802.2 packets). +! * +! * Search for the device that has the specified name and +! * instance number. +! */ +! for (i = 0; i < ap->dl_count; i++) { +! if ((strcmp(ip->dl_module_id_1, device) == 0 || +! strcmp(ip->dl_module_id_2, device) == 0) && +! ip->dl_instance_num == unit) +! break; + +! ip = (dl_hp_ppa_info_t *)((u_char *)ipstart + ip->dl_next_offset); +! } +! #else +! /* +! * We don't have that member, so the search is impossible; make it +! * look as if the search failed. +! */ +! i = ap->dl_count; +! #endif +! +! if (i == ap->dl_count) { +! /* +! * Well, we didn't, or can't, find the device by name. +! * +! * HP-UX 10.20, whilst it has "dl_module_id_1" and +! * "dl_module_id_2" fields in the "dl_hp_ppa_info_t", +! * doesn't seem to fill them in unless the system is +! * at a reasonably up-to-date patch level. +! * +! * Older HP-UX 10.x systems might not have those fields +! * at all. +! * +! * Therefore, we'll search for the entry with the major +! * device number of a device with the name "/dev/<dev><unit>", +! * if such a device exists, as the old code did. +! */ +! sprintf(dname, "/dev/%s%d", device, unit); +! if (stat(dname, &statbuf) < 0) { +! sprintf(ebuf, "stat: %s: %s", dname, pcap_strerror(errno)); +! return (-1); +! } +! majdev = major(statbuf.st_rdev); +! +! ip = ipstart; +! +! for (i = 0; i < ap->dl_count; i++) { +! if (ip->dl_mjr_num == majdev && +! ip->dl_instance_num == unit) +! break; +! +! ip = (dl_hp_ppa_info_t *)((u_char *)ipstart + ip->dl_next_offset); +! } +! } + if (i == ap->dl_count) { +! sprintf(ebuf, "can't find /dev/dlpi PPA for %s%d", device, unit); + return (-1); + } + if (ip->dl_hdw_state == HDW_DEAD) { +! sprintf(ebuf, "%s%d: hardware state: DOWN\n", device, unit); + return (-1); + } + return ((int)ip->dl_ppa); +*************** +*** 783,789 **** + register int kd; + void *addr; + struct ifnet ifnet; +! char if_name[sizeof(ifnet.if_name)], tifname[32]; + + cp = strrchr(ifname, '/'); + if (cp != NULL) +--- 910,916 ---- + register int kd; + void *addr; + struct ifnet ifnet; +! char if_name[sizeof(ifnet.if_name) + 1]; + + cp = strrchr(ifname, '/'); + if (cp != NULL) +*************** +*** 811,823 **** + if (dlpi_kread(kd, (off_t)addr, + &ifnet, sizeof(ifnet), ebuf) < 0 || + dlpi_kread(kd, (off_t)ifnet.if_name, +! if_name, sizeof(if_name), ebuf) < 0) { + (void)close(kd); + return (-1); + } +! sprintf(tifname, "%.*s%d", +! (int)sizeof(if_name), if_name, ifnet.if_unit); +! if (strcmp(tifname, ifname) == 0) + return (ifnet.if_index); + } + +--- 938,949 ---- + if (dlpi_kread(kd, (off_t)addr, + &ifnet, sizeof(ifnet), ebuf) < 0 || + dlpi_kread(kd, (off_t)ifnet.if_name, +! if_name, sizeof(ifnet.if_name), ebuf) < 0) { + (void)close(kd); + return (-1); + } +! if_name[sizeof(ifnet.if_name)] = '\0'; +! if (strcmp(if_name, ifname) == 0 && ifnet.if_unit == unit) + return (ifnet.if_index); + } + |