Ethereal-dev: [ethereal-dev] dissect PPPoE.
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Jeff Jahr <jjahr@xxxxxxxxxxxxxx>
Date: Tue, 8 Jun 1999 14:11:25 -0700 (PDT)
I'm attaching Ethereal diffs and the file packet-pppoe.c . They allow Ethereal to decode the PPPoE protocol as described in RFC 2516, "A Method for Transmitting PPP Over Ethernet (PPPoE)". After I wrote the PPPoE decoder, I realized that the PPP dissection routine already in ethereal could not be called with an offset. Rather than change the interface to dissect_ppp(), I copied the routine to dissect_payload_ppp() where I added the offset parameter that I needed and removed the decodes for the ppp_addr and ppp_ctl fields. In addition to dissect_payload_ppp, I added the dissection routines dissect_pppoed, dissect_pppoes, dissect_pppoe_tags, dissect_lcp, and dissect_ipcp. The lcp and ipcp dissection routines are not complete in that the lcp/ipcp option dissections haven't been written yet, but given the recent interest in decoding encapsulated PPP I'm guessing that someone will write those soon. Merging dissect_payload_ppp and dissect_ppp back into a single dissect_ppp routine is another bit that should probably happen. The unified diffs are between cvs and my local source tree which was last updated on May 18th. -jsj
/* packet-arp.c * Routines for ARP packet disassembly * * $Id: packet-arp.c,v 1.12 1999/03/23 03:14:35 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@xxxxxxxx> * Copyright 1998 Gerald Combs * * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_SYS_TYPES_H # include <sys/types.h> #endif #include <glib.h> #include "packet.h" #include "etypes.h" /* For lack of a better source, I made up the following defines. -jsj */ #define PPPOE_CODE_SESSION 0x00 #define PPPOE_CODE_PADO 0x7 #define PPPOE_CODE_PADI 0x9 #define PPPOE_CODE_PADR 0x19 #define PPPOE_CODE_PADS 0x65 #define PPPOE_CODE_PADT 0xa7 #define PPPOE_TAG_EOL 0x0000 #define PPPOE_TAG_SVC_NAME 0x0101 #define PPPOE_TAG_AC_NAME 0x0102 #define PPPOE_TAG_HOST_UNIQ 0x0103 #define PPPOE_TAG_AC_COOKIE 0x0104 #define PPPOE_TAG_VENDOR 0x0105 #define PPPOE_TAG_RELAY_ID 0x0110 #define PPPOE_TAG_SVC_ERR 0x0201 #define PPPOE_TAG_AC_ERR 0x0202 #define PPPOE_TAG_GENERIC_ERR 0x0203 gchar * pppoecode_to_str(guint8 codetype, const char *fmt) { static const value_string code_vals[] = { {PPPOE_CODE_SESSION, "Session Data" }, {PPPOE_CODE_PADO, "Active Discovery Offer (PADO)" }, {PPPOE_CODE_PADI, "Active Discovery Initiation (PADI)" }, {PPPOE_CODE_PADR, "Active Discovery Request (PADR)" }, {PPPOE_CODE_PADS, "Active Discovery Session-confirmation (PADS)"}, {PPPOE_CODE_PADT, "Active Discovery Terminate (PADT)" }, {0, NULL } }; return val_to_str(codetype, code_vals, fmt); } gchar * pppoetag_to_str(guint16 tag_type, const char *fmt) { static const value_string code_vals[] = { {PPPOE_TAG_EOL, "End-Of-List" }, {PPPOE_TAG_SVC_NAME, "Service-Name" }, {PPPOE_TAG_AC_NAME, "AC-Name" }, {PPPOE_TAG_HOST_UNIQ, "Host-Uniq" }, {PPPOE_TAG_AC_COOKIE, "AC-Cookie" }, {PPPOE_TAG_VENDOR, "Vendor-Specific" }, {PPPOE_TAG_RELAY_ID, "Relay-Session-Id" }, {PPPOE_TAG_SVC_ERR, "Service-Name-Error"}, {PPPOE_TAG_AC_ERR, "AC-System-Error" }, {PPPOE_TAG_GENERIC_ERR,"Generic-Error" }, {0, NULL } }; return val_to_str(tag_type, code_vals, fmt); } void dissect_pppoe_tags(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int payload_length) { guint16 poe_tag; guint16 poe_tag_length; int tagstart; proto_tree *pppoe_tree; proto_item *ti; /* Start Decoding Here. */ if (tree) { ti = proto_tree_add_item(tree,offset,payload_length,"PPPoE Tags"); pppoe_tree = proto_tree_new(); proto_item_add_subtree(ti, pppoe_tree, ETT_PPPOED_TAGS); tagstart = offset; while(tagstart <= payload_length-2 ) { poe_tag = pntohs(&pd[tagstart]); poe_tag_length = pntohs(&pd[tagstart + 2]); proto_tree_add_item(pppoe_tree,tagstart,4, "Tag: %s", pppoetag_to_str(poe_tag,"Unknown (0x%02x)")); switch(poe_tag) { case PPPOE_TAG_SVC_NAME: case PPPOE_TAG_AC_NAME: case PPPOE_TAG_SVC_ERR: case PPPOE_TAG_AC_ERR: case PPPOE_TAG_GENERIC_ERR: /* tag value should be interpreted as a utf-8 unterminated string.*/ if(poe_tag_length > 0 ) { /* really should do some limit checking here. :( */ proto_tree_add_item(pppoe_tree,tagstart+4,poe_tag_length, " String Data: %s", format_text(&pd[tagstart+4],poe_tag_length )); } break; default: if(poe_tag_length > 0 ) { proto_tree_add_item(pppoe_tree,tagstart+4,poe_tag_length, " Binary Data: (%d bytes)", poe_tag_length ); } } if (poe_tag == PPPOE_TAG_EOL) break; tagstart += 4 + poe_tag_length; } } } void dissect_pppoed(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) { guint8 pppoe_ver; guint8 pppoe_type; guint8 pppoe_code; guint16 pppoe_session_id; guint16 pppoe_length; proto_tree *pppoe_tree; proto_item *ti; /* Start Decoding Here. */ pppoe_ver = (guint8) ((pd[offset] >> 4) & 0x0f); pppoe_type = (guint8) (pd[offset] & 0x0f); pppoe_code = (guint8) pd[offset + 1]; pppoe_session_id = pntohs(&pd[offset + 2]); pppoe_length = pntohs(&pd[offset + 4]); if (check_col(fd, COL_PROTOCOL)) { col_add_str(fd,COL_PROTOCOL, "PPPoED"); } if (check_col(fd,COL_INFO)) { col_add_fstr(fd,COL_INFO,pppoecode_to_str(pppoe_code,"Unknown code (0x%02x)")); } if (tree) { ti = proto_tree_add_item(tree,offset,pppoe_length+6,"PPPoE Discovery"); pppoe_tree = proto_tree_new(); proto_item_add_subtree(ti, pppoe_tree, ETT_PPPOED); proto_tree_add_item(pppoe_tree,offset,1, "Version: %d", pppoe_ver); proto_tree_add_item(pppoe_tree,offset,1, "Type: %d", pppoe_type); proto_tree_add_item(pppoe_tree,offset+1,1, "Code: %s", pppoecode_to_str(pppoe_code,"Unknown (0x%02x)")); proto_tree_add_item(pppoe_tree,offset+2,2, "Session ID: %04x", pppoe_session_id); proto_tree_add_item(pppoe_tree,offset+4,2, "Payload Length: %d", pppoe_length); } dissect_pppoe_tags(pd,offset+6,fd,tree,offset+6+pppoe_length); } void dissect_pppoes(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) { guint8 pppoe_ver; guint8 pppoe_type; guint8 pppoe_code; guint16 pppoe_session_id; guint16 pppoe_length; proto_tree *pppoe_tree; proto_item *ti; /* Start Decoding Here. */ pppoe_ver = (guint8) ((pd[offset] >> 4) & 0x0f); pppoe_type = (guint8) (pd[offset] & 0x0f); pppoe_code = (guint8) pd[offset + 1]; pppoe_session_id = pntohs(&pd[offset + 2]); pppoe_length = pntohs(&pd[offset + 4]); if (check_col(fd, COL_PROTOCOL)) { col_add_str(fd,COL_PROTOCOL, "PPPoES"); } if (check_col(fd,COL_INFO)) { col_add_fstr(fd,COL_INFO,pppoecode_to_str(pppoe_code,"Unknown code (0x%02x)")); } if (tree) { ti = proto_tree_add_item(tree,offset,pppoe_length+6,"PPPoE Session"); pppoe_tree = proto_tree_new(); proto_item_add_subtree(ti, pppoe_tree, ETT_PPPOED); proto_tree_add_item(pppoe_tree,offset,1, "Version: %d", pppoe_ver); proto_tree_add_item(pppoe_tree,offset,1, "Type: %d", pppoe_type); proto_tree_add_item(pppoe_tree,offset+1,1, "Code: %s", pppoecode_to_str(pppoe_code,"Unknown (0x%02x)")); proto_tree_add_item(pppoe_tree,offset+2,2, "Session ID: %04x", pppoe_session_id); proto_tree_add_item(pppoe_tree,offset+4,2, "Payload Length: %d", pppoe_length); } /* dissect_ppp is apparently done as a 'top level' dissector, * so this doesn't work: * dissect_ppp(pd,offset+6,fd,tree); * Im gonna try fudging it. */ dissect_payload_ppp(pd,offset+6,fd,tree); }
? rdps ? config.log ? config.h ? config.cache ? config.status ? stamp-h ? Makefile ? .deps ? ps.c ? ethereal.1 ? packet-pppoe.c ? cs.out Index: Makefile.am =================================================================== RCS file: /cvsroot/ethereal/Makefile.am,v retrieving revision 1.29 diff -u -r1.29 Makefile.am --- Makefile.am 1999/05/16 04:27:08 1.29 +++ Makefile.am 1999/06/08 20:30:31 @@ -59,6 +59,7 @@ packet-ospf.h \ packet-pop.c \ packet-ppp.c \ + packet-pppoe.c \ packet-raw.c \ packet-rip.c \ packet-rip.h \ Index: Makefile.in =================================================================== RCS file: /cvsroot/ethereal/Makefile.in,v retrieving revision 1.35 diff -u -r1.35 Makefile.in --- Makefile.in 1999/05/16 04:27:08 1.35 +++ Makefile.in 1999/06/08 20:30:32 @@ -135,6 +135,7 @@ packet-ospf.h \ packet-pop.c \ packet-ppp.c \ + packet-pppoe.c \ packet-raw.c \ packet-rip.c \ packet-rip.h \ @@ -207,9 +208,10 @@ packet-icmpv6.o packet-ip.o packet-ipsec.o packet-ipv6.o packet-ipx.o \ packet-llc.o packet-lpd.o packet-nbipx.o packet-nbns.o packet-ncp.o \ packet-nntp.o packet-null.o packet-osi.o packet-ospf.o packet-pop.o \ -packet-ppp.o packet-raw.o packet-rip.o packet-smb.o packet-tcp.o \ -packet-telnet.o packet-tftp.o packet-tr.o packet-trmac.o packet-udp.o \ -packet-vines.o packet.o prefs.o print.o ps.o resolv.o util.o +packet-ppp.o packet-pppoe.o packet-raw.o packet-rip.o packet-smb.o \ +packet-tcp.o packet-telnet.o packet-tftp.o packet-tr.o packet-trmac.o \ +packet-udp.o packet-vines.o packet.o prefs.o print.o ps.o resolv.o \ +util.o ethereal_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) @@ -241,12 +243,12 @@ .deps/packet-llc.P .deps/packet-lpd.P .deps/packet-nbipx.P \ .deps/packet-nbns.P .deps/packet-ncp.P .deps/packet-nntp.P \ .deps/packet-null.P .deps/packet-osi.P .deps/packet-ospf.P \ -.deps/packet-pop.P .deps/packet-ppp.P .deps/packet-raw.P \ -.deps/packet-rip.P .deps/packet-smb.P .deps/packet-snmp.P \ -.deps/packet-tcp.P .deps/packet-telnet.P .deps/packet-tftp.P \ -.deps/packet-tr.P .deps/packet-trmac.P .deps/packet-udp.P \ -.deps/packet-vines.P .deps/packet.P .deps/prefs.P .deps/print.P \ -.deps/ps.P .deps/resolv.P .deps/snprintf.P .deps/util.P +.deps/packet-pop.P .deps/packet-ppp.P .deps/packet-pppoe.P \ +.deps/packet-raw.P .deps/packet-rip.P .deps/packet-smb.P \ +.deps/packet-snmp.P .deps/packet-tcp.P .deps/packet-telnet.P \ +.deps/packet-tftp.P .deps/packet-tr.P .deps/packet-trmac.P \ +.deps/packet-udp.P .deps/packet-vines.P .deps/packet.P .deps/prefs.P \ +.deps/print.P .deps/ps.P .deps/resolv.P .deps/snprintf.P .deps/util.P SOURCES = $(ethereal_SOURCES) $(EXTRA_ethereal_SOURCES) OBJECTS = $(ethereal_OBJECTS) Index: aclocal.m4 =================================================================== RCS file: /cvsroot/ethereal/aclocal.m4,v retrieving revision 1.9 diff -u -r1.9 aclocal.m4 --- aclocal.m4 1999/05/01 05:19:22 1.9 +++ aclocal.m4 1999/06/08 20:30:32 @@ -1,7 +1,7 @@ -dnl aclocal.m4 generated automatically by aclocal 1.4 +dnl aclocal.m4 generated automatically by aclocal 1.3 -dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation +dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +dnl This Makefile.in is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -182,7 +182,7 @@ dnl AM_INIT_AUTOMAKE(package,version, [no-define]) AC_DEFUN(AM_INIT_AUTOMAKE, -[AC_REQUIRE([AC_PROG_INSTALL]) +[AC_REQUIRE([AM_PROG_INSTALL]) PACKAGE=[$1] AC_SUBST(PACKAGE) VERSION=[$2] @@ -192,8 +192,8 @@ AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi ifelse([$3],, -AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) -AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") +AC_DEFINE_UNQUOTED(VERSION, "$VERSION")) AC_REQUIRE([AM_SANITY_CHECK]) AC_REQUIRE([AC_ARG_PROGRAM]) dnl FIXME This is truly gross. @@ -205,6 +205,15 @@ AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) AC_REQUIRE([AC_PROG_MAKE_SET])]) + +# serial 1 + +AC_DEFUN(AM_PROG_INSTALL, +[AC_REQUIRE([AC_PROG_INSTALL]) +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' +AC_SUBST(INSTALL_SCRIPT)dnl +]) + # # Check to make sure that the build environment is sane. # @@ -267,7 +276,7 @@ # Configure paths for GTK+ # Owen Taylor 97-11-3 -dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) +dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS dnl AC_DEFUN(AM_PATH_GTK, @@ -281,15 +290,6 @@ AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program], , enable_gtktest=yes) - for module in . $4 - do - case "$module" in - gthread) - gtk_config_args="$gtk_config_args gthread" - ;; - esac - done - if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then @@ -322,7 +322,7 @@ ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" - LIBS="$GTK_LIBS $LIBS" + LIBS="$LIBS $GTK_LIBS" dnl dnl Now check if the installed GTK is sufficiently new. (Also sanity dnl checks the results of gtk-config to some extent @@ -331,7 +331,6 @@ AC_TRY_RUN([ #include <gtk/gtk.h> #include <stdio.h> -#include <stdlib.h> int main () @@ -364,17 +363,6 @@ printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } -#if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) - else if ((gtk_major_version != GTK_MAJOR_VERSION) || - (gtk_minor_version != GTK_MINOR_VERSION) || - (gtk_micro_version != GTK_MICRO_VERSION)) - { - printf("*** GTK+ header files (version %d.%d.%d) do not match\n", - GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); - printf("*** library (version %d.%d.%d)\n", - gtk_major_version, gtk_minor_version, gtk_micro_version); - } -#endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || Index: config.h.in =================================================================== RCS file: /cvsroot/ethereal/config.h.in,v retrieving revision 1.14 diff -u -r1.14 config.h.in --- config.h.in 1999/05/12 05:56:40 1.14 +++ config.h.in 1999/06/08 20:30:32 @@ -7,6 +7,10 @@ byte first (like Motorola and SPARC, unlike Intel and VAX). */ #undef WORDS_BIGENDIAN +#undef PACKAGE + +#undef VERSION + #undef HAVE_SA_LEN #undef DATAFILE_DIR @@ -48,10 +52,3 @@ /* Define if you have the pcap library (-lpcap). */ #undef HAVE_LIBPCAP - -/* Name of package */ -#undef PACKAGE - -/* Version number of package */ -#undef VERSION - Index: configure =================================================================== RCS file: /cvsroot/ethereal/configure,v retrieving revision 1.22 diff -u -r1.22 configure --- configure 1999/05/12 05:56:40 1.22 +++ configure 1999/06/08 20:30:34 @@ -1,7 +1,7 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.13 +# 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 @@ -62,7 +62,6 @@ # 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,7 +345,7 @@ verbose=yes ;; -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.13" + echo "configure generated by autoconf version 2.12" exit 0 ;; -with-* | --with-*) @@ -516,11 +515,9 @@ # 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' +ac_link='${CC-cc} -o conftest $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@xxxxxxxxxxxxxxxx. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then @@ -561,30 +558,28 @@ # 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:570: checking for a BSD compatible install" >&5 +echo "configure:566: 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="${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. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do + 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" @@ -614,12 +609,13 @@ # 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' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 -echo "configure:623: checking whether build environment is sane" >&5 +echo "configure:619: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile @@ -676,7 +672,7 @@ test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:680: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "configure:676: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -722,7 +718,7 @@ missing_dir=`cd $ac_aux_dir && pwd` echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 -echo "configure:726: checking for working aclocal" >&5 +echo "configure:722: checking for working aclocal" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -735,7 +731,7 @@ fi echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 -echo "configure:739: checking for working autoconf" >&5 +echo "configure:735: checking for working autoconf" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -748,7 +744,7 @@ fi echo $ac_n "checking for working automake""... $ac_c" 1>&6 -echo "configure:752: checking for working automake" >&5 +echo "configure:748: checking for working automake" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -761,7 +757,7 @@ fi echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 -echo "configure:765: checking for working autoheader" >&5 +echo "configure:761: checking for working autoheader" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -774,7 +770,7 @@ fi echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 -echo "configure:778: checking for working makeinfo" >&5 +echo "configure:774: checking for working makeinfo" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -790,26 +786,26 @@ # Make sure we can run config.sub. -if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : +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:799: checking host system type" >&5 +echo "configure:795: 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 : + 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=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` +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/'` @@ -819,16 +815,15 @@ # 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:823: checking for $ac_word" >&5 +echo "configure:819: 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 + 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" @@ -849,17 +844,16 @@ # 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:853: checking for $ac_word" >&5 +echo "configure:848: 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="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" ac_prog_rejected=no - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do + 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 @@ -894,61 +888,25 @@ 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:904: 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:936: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:896: 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' +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 947 "configure" +cat > conftest.$ac_ext <<EOF +#line 906 "configure" #include "confdefs.h" - main(){return(0);} EOF -if { (eval echo configure:952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:910: \"$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 @@ -962,24 +920,18 @@ 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:978: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:930: 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:983: checking whether we are using GNU C" >&5 +echo "configure:935: 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 @@ -988,7 +940,7 @@ yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:992: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:944: \"$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 @@ -999,15 +951,11 @@ 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:1011: checking whether ${CC-cc} accepts -g" >&5 + 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:959: 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 @@ -1022,35 +970,30 @@ 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 + 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="-g" - fi -else - if test "$GCC" = yes; then CFLAGS="-O2" - else - CFLAGS= fi +else + GCC= + test "${CFLAGS+set}" = set || CFLAGS="-g" fi # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1045: checking for $ac_word" >&5 +echo "configure:989: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$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 + 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_RANLIB="ranlib" @@ -1071,7 +1014,7 @@ # If we're running gcc, add '-Wall' to CFLAGS. echo $ac_n "checking to see if we can add '-Wall' to CFLAGS""... $ac_c" 1>&6 -echo "configure:1075: checking to see if we can add '-Wall' to CFLAGS" >&5 +echo "configure:1018: checking to see if we can add '-Wall' to CFLAGS" >&5 if test x$GCC != x ; then CFLAGS="-Wall $CFLAGS" echo "$ac_t""yes" 1>&6 @@ -1097,7 +1040,7 @@ case "$host_os" in solaris*) echo $ac_n "checking for LD_LIBRARY_PATH""... $ac_c" 1>&6 -echo "configure:1101: checking for LD_LIBRARY_PATH" >&5 +echo "configure:1044: checking for LD_LIBRARY_PATH" >&5 if test x$LD_LIBRARY_PATH != x ; then LIBS="$LIBS -R$LD_LIBRARY_PATH" echo "$ac_t""yes -- added LD_LIBRARY_PATH to run-time linker path" 1>&6 @@ -1133,15 +1076,6 @@ fi - for module in . - do - case "$module" in - gthread) - gtk_config_args="$gtk_config_args gthread" - ;; - esac - done - if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then @@ -1158,7 +1092,7 @@ # Extract the first word of "gtk-config", so it can be a program name with args. set dummy gtk-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1162: checking for $ac_word" >&5 +echo "configure:1096: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1166,13 +1100,9 @@ /*) ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path. ;; - ?:/*) - ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a dos path. - ;; *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do + 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_path_GTK_CONFIG="$ac_dir/$ac_word" @@ -1193,7 +1123,7 @@ min_gtk_version=1.0.0 echo $ac_n "checking for GTK - version >= $min_gtk_version""... $ac_c" 1>&6 -echo "configure:1197: checking for GTK - version >= $min_gtk_version" >&5 +echo "configure:1127: checking for GTK - version >= $min_gtk_version" >&5 no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes @@ -1210,18 +1140,17 @@ ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" - LIBS="$GTK_LIBS $LIBS" + LIBS="$LIBS $GTK_LIBS" rm -f conf.gtktest if test "$cross_compiling" = yes; then echo $ac_n "cross compiling; assumed OK... $ac_c" else cat > conftest.$ac_ext <<EOF -#line 1220 "configure" +#line 1150 "configure" #include "confdefs.h" #include <gtk/gtk.h> #include <stdio.h> -#include <stdlib.h> int main () @@ -1254,17 +1183,6 @@ printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } -#if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) - else if ((gtk_major_version != GTK_MAJOR_VERSION) || - (gtk_minor_version != GTK_MINOR_VERSION) || - (gtk_micro_version != GTK_MICRO_VERSION)) - { - printf("*** GTK+ header files (version %d.%d.%d) do not match\n", - GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); - printf("*** library (version %d.%d.%d)\n", - gtk_major_version, gtk_minor_version, gtk_micro_version); - } -#endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || @@ -1294,7 +1212,7 @@ } EOF -if { (eval echo configure:1298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then : else @@ -1328,7 +1246,7 @@ CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" cat > conftest.$ac_ext <<EOF -#line 1332 "configure" +#line 1250 "configure" #include "confdefs.h" #include <gtk/gtk.h> @@ -1338,7 +1256,7 @@ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ; return 0; } EOF -if { (eval echo configure:1342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1260: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" @@ -1379,7 +1297,7 @@ # Evidently, some systems have pcap.h, etc. in */include/pcap echo $ac_n "checking for extraneous pcap header directories""... $ac_c" 1>&6 -echo "configure:1383: checking for extraneous pcap header directories" >&5 +echo "configure:1301: checking for extraneous pcap header directories" >&5 found_pcap_dir="" for pcap_dir in /usr/include/pcap /usr/local/include/pcap do @@ -1399,7 +1317,7 @@ # Pcap checks echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1403: checking how to run the C preprocessor" >&5 +echo "configure:1321: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1414,14 +1332,14 @@ # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext <<EOF -#line 1418 "configure" +#line 1336 "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:1424: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:1342: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : else @@ -1430,32 +1348,15 @@ cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext <<EOF -#line 1435 "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:1441: \"$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 1452 "configure" +#line 1353 "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:1458: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:1359: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : else @@ -1468,8 +1369,6 @@ rm -f conftest* fi rm -f conftest* -fi -rm -f conftest* ac_cv_prog_CPP="$CPP" fi CPP="$ac_cv_prog_CPP" @@ -1480,18 +1379,18 @@ ac_safe=`echo "net/bpf.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for net/bpf.h""... $ac_c" 1>&6 -echo "configure:1484: checking for net/bpf.h" >&5 +echo "configure:1383: checking for net/bpf.h" >&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 1489 "configure" +#line 1388 "configure" #include "confdefs.h" #include <net/bpf.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1494: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:1393: \"$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" @@ -1514,18 +1413,18 @@ ac_safe=`echo "pcap.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for pcap.h""... $ac_c" 1>&6 -echo "configure:1518: checking for pcap.h" >&5 +echo "configure:1417: checking for pcap.h" >&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 1523 "configure" +#line 1422 "configure" #include "confdefs.h" #include <pcap.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1528: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:1427: \"$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" @@ -1547,7 +1446,7 @@ fi echo $ac_n "checking for pcap_open_offline in -lpcap""... $ac_c" 1>&6 -echo "configure:1551: checking for pcap_open_offline in -lpcap" >&5 +echo "configure:1450: checking for pcap_open_offline in -lpcap" >&5 ac_lib_var=`echo pcap'_'pcap_open_offline | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1555,7 +1454,7 @@ ac_save_LIBS="$LIBS" LIBS="-lpcap $LIBS" cat > conftest.$ac_ext <<EOF -#line 1559 "configure" +#line 1458 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -1566,7 +1465,7 @@ pcap_open_offline() ; return 0; } EOF -if { (eval echo configure:1570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1597,7 +1496,7 @@ # Wiretap check echo $ac_n "checking whether to include wiretap library""... $ac_c" 1>&6 -echo "configure:1601: checking whether to include wiretap library" >&5 +echo "configure:1500: checking whether to include wiretap library" >&5 # Check whether --with-wiretap or --without-wiretap was given. if test "${with_wiretap+set}" = set; then withval="$with_wiretap" @@ -1639,7 +1538,7 @@ echo $ac_n "checking whether to enable ipv6 name resolution if available""... $ac_c" 1>&6 -echo "configure:1643: checking whether to enable ipv6 name resolution if available" >&5 +echo "configure:1542: checking whether to enable ipv6 name resolution if available" >&5 if test "x$enable_ipv6" = "xno" ; then echo "$ac_t""no" 1>&6 else @@ -1649,12 +1548,12 @@ v6lib=none echo $ac_n "checking ipv6 stack type""... $ac_c" 1>&6 -echo "configure:1653: checking ipv6 stack type" >&5 +echo "configure:1552: checking ipv6 stack type" >&5 for i in v6d toshiba kame inria zeta linux; do case $i in v6d) cat > conftest.$ac_ext <<EOF -#line 1658 "configure" +#line 1557 "configure" #include "confdefs.h" dnl #include </usr/local/v6/include/sys/types.h> @@ -1674,7 +1573,7 @@ ;; toshiba) cat > conftest.$ac_ext <<EOF -#line 1678 "configure" +#line 1577 "configure" #include "confdefs.h" dnl #include <sys/param.h> @@ -1694,7 +1593,7 @@ ;; kame) cat > conftest.$ac_ext <<EOF -#line 1698 "configure" +#line 1597 "configure" #include "confdefs.h" dnl #include <netinet/in.h> @@ -1714,7 +1613,7 @@ ;; inria) cat > conftest.$ac_ext <<EOF -#line 1718 "configure" +#line 1617 "configure" #include "confdefs.h" dnl #include <netinet/in.h> @@ -1732,7 +1631,7 @@ ;; zeta) cat > conftest.$ac_ext <<EOF -#line 1736 "configure" +#line 1635 "configure" #include "confdefs.h" dnl #include <sys/param.h> @@ -1781,12 +1680,12 @@ echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1785: checking for ANSI C header files" >&5 +echo "configure:1684: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1790 "configure" +#line 1689 "configure" #include "confdefs.h" #include <stdlib.h> #include <stdarg.h> @@ -1794,8 +1693,8 @@ #include <float.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1798: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:1697: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes @@ -1811,7 +1710,7 @@ if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext <<EOF -#line 1815 "configure" +#line 1714 "configure" #include "confdefs.h" #include <string.h> EOF @@ -1829,7 +1728,7 @@ if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext <<EOF -#line 1833 "configure" +#line 1732 "configure" #include "confdefs.h" #include <stdlib.h> EOF @@ -1850,7 +1749,7 @@ : else cat > conftest.$ac_ext <<EOF -#line 1854 "configure" +#line 1753 "configure" #include "confdefs.h" #include <ctype.h> #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1861,7 +1760,7 @@ exit (0); } EOF -if { (eval echo configure:1865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then : else @@ -1888,18 +1787,18 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1892: checking for $ac_hdr" >&5 +echo "configure:1791: 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 1897 "configure" +#line 1796 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1902: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:1801: \"$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" @@ -1929,18 +1828,18 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1933: checking for $ac_hdr" >&5 +echo "configure:1832: 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 1938 "configure" +#line 1837 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1943: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:1842: \"$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" @@ -1979,7 +1878,7 @@ SNMP_A='' SNMP_O='' echo $ac_n "checking whether to use SNMP library if available""... $ac_c" 1>&6 -echo "configure:1983: checking whether to use SNMP library if available" >&5 +echo "configure:1882: checking whether to use SNMP library if available" >&5 if test "x$enable_snmp" = "xno" ; then echo "$ac_t""no" 1>&6 else @@ -1988,18 +1887,18 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1992: checking for $ac_hdr" >&5 +echo "configure:1891: 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 1997 "configure" +#line 1896 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2002: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:1901: \"$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" @@ -2025,7 +1924,7 @@ done echo $ac_n "checking for asn_parse_header in -lsnmp""... $ac_c" 1>&6 -echo "configure:2029: checking for asn_parse_header in -lsnmp" >&5 +echo "configure:1928: checking for asn_parse_header in -lsnmp" >&5 ac_lib_var=`echo snmp'_'asn_parse_header | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2033,7 +1932,7 @@ ac_save_LIBS="$LIBS" LIBS="-lsnmp $LIBS" cat > conftest.$ac_ext <<EOF -#line 2037 "configure" +#line 1936 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2044,7 +1943,7 @@ asn_parse_header() ; return 0; } EOF -if { (eval echo configure:2048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2077,12 +1976,12 @@ # for get_interface_list(). echo $ac_n "checking for sa_len in struct sockaddr""... $ac_c" 1>&6 -echo "configure:2081: checking for sa_len in struct sockaddr" >&5 +echo "configure:1980: checking for sa_len in struct sockaddr" >&5 if eval "test \"`echo '$''{'ac_cv_ethereal_struct_sa_len'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2086 "configure" +#line 1985 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/socket.h> @@ -2090,7 +1989,7 @@ struct sockaddr s; s.sa_len; ; return 0; } EOF -if { (eval echo configure:2094: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_ethereal_struct_sa_len=yes else @@ -2113,14 +2012,14 @@ # We must know our byte order echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:2117: checking whether byte ordering is bigendian" >&5 +echo "configure:2016: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext <<EOF -#line 2124 "configure" +#line 2023 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/param.h> @@ -2131,11 +2030,11 @@ #endif ; return 0; } EOF -if { (eval echo configure:2135: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2034: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext <<EOF -#line 2139 "configure" +#line 2038 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/param.h> @@ -2146,7 +2045,7 @@ #endif ; return 0; } EOF -if { (eval echo configure:2150: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2049: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -2166,7 +2065,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 2170 "configure" +#line 2069 "configure" #include "confdefs.h" main () { /* Are we little or big endian? From Harbison&Steele. */ @@ -2179,7 +2078,7 @@ exit (u.c[sizeof (long) - 1] == 1); } EOF -if { (eval echo configure:2183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -2205,13 +2104,13 @@ if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 -echo "configure:2209: checking whether ${CC-cc} needs -traditional" >&5 +echo "configure:2108: checking whether ${CC-cc} needs -traditional" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext <<EOF -#line 2215 "configure" +#line 2114 "configure" #include "confdefs.h" #include <sgtty.h> Autoconf TIOCGETP @@ -2229,7 +2128,7 @@ if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext <<EOF -#line 2233 "configure" +#line 2132 "configure" #include "confdefs.h" #include <termio.h> Autoconf TCGETA @@ -2251,12 +2150,12 @@ fi echo $ac_n "checking for socket""... $ac_c" 1>&6 -echo "configure:2255: checking for socket" >&5 +echo "configure:2154: checking for socket" >&5 if eval "test \"`echo '$''{'ac_cv_func_socket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2260 "configure" +#line 2159 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char socket(); below. */ @@ -2279,7 +2178,7 @@ ; return 0; } EOF -if { (eval echo configure:2283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_socket=yes" else @@ -2305,12 +2204,12 @@ SNPRINTF_C="" SNPRINTF_O="" echo $ac_n "checking for snprintf""... $ac_c" 1>&6 -echo "configure:2309: checking for snprintf" >&5 +echo "configure:2208: checking for snprintf" >&5 if eval "test \"`echo '$''{'ac_cv_func_snprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2314 "configure" +#line 2213 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char snprintf(); below. */ @@ -2333,7 +2232,7 @@ ; return 0; } EOF -if { (eval echo configure:2337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_snprintf=yes" else @@ -2393,7 +2292,7 @@ # 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 + 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 \). @@ -2460,7 +2359,7 @@ 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" + echo "$CONFIG_STATUS generated by autoconf version 2.12" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; @@ -2480,11 +2379,9 @@ 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 @@ -2504,8 +2401,8 @@ s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@PACKAGE@%$PACKAGE%g s%@VERSION@%$VERSION%g s%@ACLOCAL@%$ACLOCAL%g Index: ethertype.c =================================================================== RCS file: /cvsroot/ethereal/ethertype.c,v retrieving revision 1.13 diff -u -r1.13 ethertype.c --- ethertype.c 1999/03/23 03:14:34 1.13 +++ ethertype.c 1999/06/08 20:30:34 @@ -52,6 +52,8 @@ {ETHERTYPE_VINES, "Vines" }, {ETHERTYPE_CDP, "CDP" }, /* Cisco Discovery Protocol */ {ETHERTYPE_LOOP, "Loopback" }, /* Ethernet Loopback */ + {ETHERTYPE_PPPOED, "PPPoE Discovery"}, + {ETHERTYPE_PPPOES, "PPPoE Session" }, {0, NULL } }; return val_to_str(etype, etype_vals, fmt); @@ -112,6 +114,12 @@ dissect_data(pd, offset, fd, tree); if (check_col(fd, COL_PROTOCOL)) { col_add_fstr(fd, COL_PROTOCOL, "LOOP"); } break; + case ETHERTYPE_PPPOED: + dissect_pppoed(pd, offset, fd, tree); + break; + case ETHERTYPE_PPPOES: + dissect_pppoes(pd, offset, fd, tree); + break; default: dissect_data(pd, offset, fd, tree); if (check_col(fd, COL_PROTOCOL)) { col_add_fstr(fd, COL_PROTOCOL, "0x%04x", etype); } Index: etypes.h =================================================================== RCS file: /cvsroot/ethereal/etypes.h,v retrieving revision 1.4 diff -u -r1.4 etypes.h --- etypes.h 1998/12/19 00:12:20 1.4 +++ etypes.h 1999/06/08 20:30:34 @@ -78,4 +78,13 @@ #define ETHERTYPE_LOOP 0x9000 /* used for layer 2 testing (do i see my own frames on the wire) */ #endif +#ifndef ETHERTYPE_PPPOED +#define ETHERTYPE_PPPOED 0x8863 /* PPPoE Discovery Protocol */ +#endif + +#ifndef ETHERTYPE_PPPOES +#define ETHERTYPE_PPPOES 0x8864 /* PPPoE Session Protocol */ +#endif + + #endif /* etypes.h */ Index: packet-ppp.c =================================================================== RCS file: /cvsroot/ethereal/packet-ppp.c,v retrieving revision 1.10 diff -u -r1.10 packet-ppp.c --- packet-ppp.c 1999/03/23 03:14:43 1.10 +++ packet-ppp.c 1999/06/08 20:30:35 @@ -67,6 +67,116 @@ #define PPP_CHAP 0xc223 /* Cryptographic Handshake Auth. Protocol */ #define PPP_CBCP 0xc029 /* Callback Control Protocol */ + +static const value_string ppp_vals[] = { + {PPP_IP, "IP" }, + {PPP_AT, "Appletalk" }, + {PPP_IPX, "Netware IPX/SPX"}, + {PPP_VJC_COMP, "VJ compressed TCP"}, + {PPP_VJC_UNCOMP,"VJ uncompressed TCP"}, + {PPP_VINES, "Vines" }, + {PPP_IPV6, "IPv6" }, + {PPP_COMP, "compressed packet" }, + {PPP_IPCP, "IP Control Protocol" }, + {PPP_ATCP, "AppleTalk Control Protocol" }, + {PPP_IPXCP, "IPX Control Protocol" }, + {PPP_CCP, "Compression Control Protocol" }, + {PPP_LCP, "Link Control Protocol" }, + {PPP_PAP, "Password Authentication Protocol" }, + {PPP_LQR, "Link Quality Report protocol" }, + {PPP_CHAP, "Cryptographic Handshake Auth. Protocol" }, + {PPP_CBCP, "Callback Control Protocol" }, + {0, NULL } }; + +/* CP (LCP, IPCP, etc.) codes. + * from pppd fsm.h + */ +#define CONFREQ 1 /* Configuration Request */ +#define CONFACK 2 /* Configuration Ack */ +#define CONFNAK 3 /* Configuration Nak */ +#define CONFREJ 4 /* Configuration Reject */ +#define TERMREQ 5 /* Termination Request */ +#define TERMACK 6 /* Termination Ack */ +#define CODEREJ 7 /* Code Reject */ + +static const value_string cp_vals[] = { + {CONFREQ, "Configuration Request " }, + {CONFACK, "Configuration Ack " }, + {CONFNAK, "Configuration Nak " }, + {CONFREJ, "Configuration Reject " }, + {TERMREQ, "Termination Request " }, + {TERMACK, "Termination Ack " }, + {CODEREJ, "Code Reject " }, + {0, NULL } }; + +/* + * LCP-specific packet types. + */ +#define PROTREJ 8 /* Protocol Reject */ +#define ECHOREQ 9 /* Echo Request */ +#define ECHOREP 10 /* Echo Reply */ +#define DISCREQ 11 /* Discard Request */ +#define CBCP_OPT 6 /* Use callback control protocol */ + +static const value_string lcp_vals[] = { + {CONFREQ, "Configuration Request " }, + {CONFACK, "Configuration Ack " }, + {CONFNAK, "Configuration Nak " }, + {CONFREJ, "Configuration Reject " }, + {TERMREQ, "Termination Request " }, + {TERMACK, "Termination Ack " }, + {CODEREJ, "Code Reject " }, + {PROTREJ, "Protocol Reject " }, + {ECHOREQ, "Echo Request " }, + {ECHOREP, "Echo Reply " }, + {DISCREQ, "Discard Request " }, + {CBCP_OPT, "Use callback control protocol" }, + {0, NULL } }; + +/* + * Options. (LCP) + */ +#define CI_MRU 1 /* Maximum Receive Unit */ +#define CI_ASYNCMAP 2 /* Async Control Character Map */ +#define CI_AUTHTYPE 3 /* Authentication Type */ +#define CI_QUALITY 4 /* Quality Protocol */ +#define CI_MAGICNUMBER 5 /* Magic Number */ +#define CI_PCOMPRESSION 7 /* Protocol Field Compression */ +#define CI_ACCOMPRESSION 8 /* Address/Control Field Compression */ +#define CI_CALLBACK 13 /* callback */ + +static const value_string lcp_opt_vals[] = { + {CI_MRU, "Maximum Receive Unit" }, + {CI_ASYNCMAP, "Async Control Character Map" }, + {CI_AUTHTYPE, "Authentication Type" }, + {CI_QUALITY, "Quality Protocol" }, + {CI_MAGICNUMBER, "Magic Number" }, + {CI_PCOMPRESSION, "Protocol Field Compression" }, + {CI_ACCOMPRESSION,"Address/Control Field Compression" }, + {CI_CALLBACK, "callback" }, + {0, NULL } }; + +/* + * Options. (IPCP) + */ +#define CI_ADDRS 1 /* IP Addresses */ +#define CI_COMPRESSTYPE 2 /* Compression Type */ +#define CI_ADDR 3 +#define CI_MS_DNS1 129 /* Primary DNS value */ +#define CI_MS_WINS1 130 /* Primary WINS value */ +#define CI_MS_DNS2 131 /* Secondary DNS value */ +#define CI_MS_WINS2 132 /* Secondary WINS value */ + +static const value_string ipcp_opt_vals[] = { + {CI_ADDRS, "IP Addresses" }, + {CI_COMPRESSTYPE,"Compression Type" }, + {CI_ADDR, "Address" }, + {CI_MS_DNS1, "Primary DNS value" }, + {CI_MS_WINS1, "Primary WINS value" }, + {CI_MS_DNS2, "Secondary DNS value" }, + {CI_MS_WINS2, "Secondary WINS value" }, + {0, NULL } }; + void capture_ppp( const u_char *pd, guint32 cap_len, packet_counts *ld ) { switch (pntohs(&pd[2])) { @@ -80,6 +190,131 @@ } void +dissect_ipcp( const u_char *pd, int offset, frame_data *fd, proto_tree *tree ) { + proto_tree *fh_tree; + proto_item *ti; + + int ipcpcode; + int ipcpid; + int optionslength; + + ipcpcode = pd[0+offset]; + ipcpid = pd[1+offset]; + optionslength= pntohs(&pd[2+offset]); + + if(check_col(fd, COL_INFO)) + col_add_fstr(fd, COL_INFO, "IPCP %s", + val_to_str(ipcpcode, cp_vals, "Unknown")); + + if(tree) { + ti = proto_tree_add_item(tree, 0+offset, 4, "IP Control Protocol" ); + fh_tree = proto_tree_new(); + proto_item_add_subtree(ti, fh_tree, ETT_IPCP); + proto_tree_add_item(fh_tree, 0+offset, 1, "Code: %s (0x%02x)", + val_to_str(ipcpcode, cp_vals, "Unknown"), ipcpcode); + proto_tree_add_item(fh_tree, 1+offset, 1, "Identifier: 0x%02x", + ipcpid); + proto_tree_add_item(fh_tree, 2+offset, 2, "Length: %d", + optionslength); + } + + switch (ipcpcode) { + /* decode lcp options here. */ + default: + dissect_data(pd, 4+offset, fd, tree); + break; + } +} + +void +dissect_lcp( const u_char *pd, int offset, frame_data *fd, proto_tree *tree ) { + proto_tree *fh_tree; + proto_item *ti; + + int lcpcode; + int lcpid; + int optionslength; + + lcpcode = pd[0+offset]; + lcpid = pd[1+offset]; + optionslength= pntohs(&pd[2+offset]); + + if(check_col(fd, COL_INFO)) + col_add_fstr(fd, COL_INFO, "LCP %s", + val_to_str(lcpcode, lcp_vals, "Unknown")); + + if(tree) { + ti = proto_tree_add_item(tree, 0+offset, 4, "Link Control Protocol" ); + fh_tree = proto_tree_new(); + proto_item_add_subtree(ti, fh_tree, ETT_LCP); + proto_tree_add_item(fh_tree, 0+offset, 1, "Code: %s (0x%02x)", + val_to_str(lcpcode, lcp_vals, "Unknown"), lcpcode); + proto_tree_add_item(fh_tree, 1+offset, 1, "Identifier: 0x%02x", + lcpid); + proto_tree_add_item(fh_tree, 2+offset, 2, "Length: %d", + optionslength); + } + + switch (lcpcode) { + /* decode lcp options here. */ + default: + dissect_data(pd, 4+offset, fd, tree); + break; + } +} + +void +dissect_payload_ppp( const u_char *pd, int offset, frame_data *fd, proto_tree *tree ) { + e_ppphdr ph; + proto_tree *fh_tree; + proto_item *ti; + +/* ph.ppp_addr = pd[0+offset]; */ +/* ph.ppp_ctl = pd[1+offset]; */ + ph.ppp_prot = pntohs(&pd[0+offset]); + + /* populate a tree in the second pane with the status of the link + layer (ie none) */ + if(tree) { + ti = proto_tree_add_item(tree, 0+offset, 2, "Point-to-Point Protocol" ); + fh_tree = proto_tree_new(); + proto_item_add_subtree(ti, fh_tree, ETT_PPP); + proto_tree_add_item(fh_tree, 0+offset, 2, "Protocol: %s (0x%04x)", + val_to_str(ph.ppp_prot, ppp_vals, "Unknown"), ph.ppp_prot); + } + + switch (ph.ppp_prot) { + case PPP_IP: + dissect_ip(pd, 2+offset, fd, tree); + break; + case PPP_AT: + dissect_ddp(pd, 2+offset, fd, tree); + break; + case PPP_IPX: + dissect_ipx(pd, 2+offset, fd, tree); + break; + case PPP_VINES: + dissect_vines(pd, 2+offset, fd, tree); + break; + case PPP_IPV6: + dissect_ipv6(pd, 2+offset, fd, tree); + break; + case PPP_LCP: + dissect_lcp(pd, 2+offset, fd, tree); + break; + case PPP_IPCP: + dissect_ipcp(pd, 2+offset, fd, tree); + break; + default: + dissect_data(pd, 2+offset, fd, tree); + if (check_col(fd, COL_INFO)) + col_add_fstr(fd, COL_INFO, "PPP %s (0x%04x)", + val_to_str(ph.ppp_prot, ppp_vals, "Unknown"), ph.ppp_prot); + break; + } +} + +void dissect_ppp( const u_char *pd, frame_data *fd, proto_tree *tree ) { e_ppphdr ph; proto_tree *fh_tree; @@ -99,14 +334,15 @@ /* load the top pane info. This should be overwritten by the next protocol in the stack */ - if(check_col(fd, COL_RES_DL_SRC)) - col_add_str(fd, COL_RES_DL_SRC, "N/A" ); - if(check_col(fd, COL_RES_DL_DST)) - col_add_str(fd, COL_RES_DL_DST, "N/A" ); - if(check_col(fd, COL_PROTOCOL)) - col_add_str(fd, COL_PROTOCOL, "N/A" ); - if(check_col(fd, COL_INFO)) - col_add_str(fd, COL_INFO, "PPP" ); + + if(check_col(fd, COL_RES_DL_SRC)) + col_add_str(fd, COL_RES_DL_SRC, "N/A" ); + if(check_col(fd, COL_RES_DL_DST)) + col_add_str(fd, COL_RES_DL_DST, "N/A" ); + if(check_col(fd, COL_PROTOCOL)) + col_add_str(fd, COL_PROTOCOL, "N/A" ); + if(check_col(fd, COL_INFO)) + col_add_str(fd, COL_INFO, "PPP" ); /* populate a tree in the second pane with the status of the link layer (ie none) */ Index: packet.h =================================================================== RCS file: /cvsroot/ethereal/packet.h,v retrieving revision 1.56 diff -u -r1.56 packet.h --- packet.h 1999/05/13 16:42:43 1.56 +++ packet.h 1999/06/08 20:30:35 @@ -236,6 +236,11 @@ ETT_SMB_CAPS, ETT_SMB_RAWMODE, ETT_SMB_AFLAGS, + ETT_PPPOED, + ETT_PPPOED_TAGS, + ETT_PPPOES, + ETT_LCP, + ETT_IPCP, NUM_TREE_TYPES /* last item number plus one */ }; @@ -387,6 +392,7 @@ void dissect_vines_ipc(const u_char *, int, frame_data *, proto_tree *); void dissect_vines_rtp(const u_char *, int, frame_data *, proto_tree *); void dissect_vines_spp(const u_char *, int, frame_data *, proto_tree *); +void dissect_payload_ppp(const u_char *, int, frame_data *, proto_tree *); void dissect_ftp(const u_char *, int, frame_data *, proto_tree *, int); void dissect_ftpdata(const u_char *, int, frame_data *, proto_tree *, int);
- References:
- Re: [ethereal-dev] newbie question
- From: Gilbert Ramirez
- Re: [ethereal-dev] newbie question
- Prev by Date: Re: [ethereal-dev] newbie question
- Next by Date: [ethereal-dev] Code for ISAKMP, GRE, and PPTP
- Previous by thread: Re: [ethereal-dev] newbie question
- Next by thread: [ethereal-dev] Code for ISAKMP, GRE, and PPTP
- Index(es):