summaryrefslogtreecommitdiff
path: root/README.hpux
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2000-08-13 07:48:56 +0000
committerGuy Harris <guy@alum.mit.edu>2000-08-13 07:48:56 +0000
commite01997e3d0cce9c97620656f52b31cefb26418a7 (patch)
treeff3b4a666884be2ccce33b5d5488c1c349149ded /README.hpux
parent60ac4e87b21c5b1502ac9670ce69a4d4157aab6e (diff)
downloadwireshark-e01997e3d0cce9c97620656f52b31cefb26418a7.tar.gz
Give, in "README.hpux", what appears to be the new URL for the UK HP-UX
Porting and Archive Centre site. Warn in the very beginning of that file that libpcap may not work very well without patches. Give patches to libpcap for: vanilla LBL libpcap 0.4 vanilla tcpdump.org libpcap 0.5 libpcap 0.4 from the HP-UX Porting and Archive Centre (which is the only version that includes configure-script changes to work with HP's C compiler as well as GCC) and put them in files separate from "README.hpux" (to make it easier for users to apply the patches). Make those versions of the patch give a slightly different error message if libpcap fails to find the PPA for the device, to make it easier to figure out if the user reporting a problem with HP-UX capture has a patched version of libpcap or not (so that we know whether the problem may just be that they're using an unmodified libpcap, or if they're running a patched version and that patch needs more work, e.g. to look at devices other than just "/dev/dlpi"). Give information on how to find "patch", warn that probably only the HP-UX Porting and Archive Centre version will work with the HP C compiler, warn that applying a version of the patch other than the one for the particular version of libpcap you've downloaded will probably not work, and warn that you need to download source to libpcap in order to do any of this in the first place. (The current libpcap CVS tree at tcpdump.org has this patch in it, so the next release of libpcap from tcpdump.org should have it; hopefully the HP-UX Porting and Archive Centre will switch to that version when it comes out, and people will just be able to push a few buttons to get an Ethereal that works on HP-UX.) svn path=/trunk/; revision=2264
Diffstat (limited to 'README.hpux')
-rw-r--r--README.hpux563
1 files changed, 47 insertions, 516 deletions
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.