#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-ppp.c,v 1.105 2004-10-28 11:21:23 hannes Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-ppp.c,v 1.109 2005-04-20 22:15:17 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
{ PPP_PAP, "PAP" },
{ PPP_LQM, "LQM" },
{ PPP_CHAP, "CHAP" },
+ { PPP_EAP, "EAP" },
+ { PPP_SPAP, "SPAP" },
+ { PPP_SPAP_OLD, "Old-SPAP" },
{ PPP_BACP, "BACP" },
{ PPP_BAP, "BAP" },
{ PPP_MPCP, "MLPPP-CP" },
#define AUTHALG_MSCHAP1 128 /* RFC2433 */
#define AUTHALG_MSCHAP2 129 /* RFC2795 */
+struct tok authalg_values[] = {
+ { AUTHALG_CHAPMD5, "MD5" },
+ { AUTHALG_MSCHAP1, "MS-CHAPv1" },
+ { AUTHALG_MSCHAP2, "MS-CHAPv2" },
+ { 0, NULL }
+};
+
/* FCS Alternatives - to be supported */
/* Multilink Endpoint Discriminator (RFC1717) */
case LCPOPT_AP:
if (len >= 4) {
TCHECK2(*(p + 2), 2);
+ printf(" %s", tok2str(ppptype2str,"Unknown Auth Proto (0x04x)",EXTRACT_16BITS(p+2)));
+
switch (EXTRACT_16BITS(p+2)) {
- case PPP_PAP:
- printf(" PAP");
- break;
case PPP_CHAP:
- printf(" CHAP");
TCHECK(p[4]);
- switch (p[4]) {
- default:
- printf(", unknown-algorithm-%u", p[4]);
- break;
- case AUTHALG_CHAPMD5:
- printf(", MD5");
- break;
- case AUTHALG_MSCHAP1:
- printf(", MSCHAPv1");
- break;
- case AUTHALG_MSCHAP2:
- printf(", MSCHAPv2");
- break;
- }
+ printf(", %s",tok2str(authalg_values,"Unknown Auth Alg %u",p[4]));
break;
+ case PPP_PAP: /* fall through */
case PPP_EAP:
- printf(" EAP");
- break;
case PPP_SPAP:
- printf(" SPAP");
- break;
case PPP_SPAP_OLD:
- printf(" Old-SPAP");
- break;
+ break;
default:
- printf("unknown");
+ print_unknown_data(p,"\n\t",len);
}
}
break;
len = EXTRACT_16BITS(p);
p += 2;
+ if ((int)len > length) {
+ printf(", length %u > packet size", len);
+ return;
+ }
+ length = len;
+ if (length < (p - p0)) {
+ printf(", length %u < PAP header length", length);
+ return;
+ }
+
switch (code) {
case PAP_AREQ:
if (length - (p - p0) < 1)
switch (proto) {
case PPP_IP:
- ip_print(b+1, t - b - 1);
- goto cleanup;
+ ip_print(gndo, b+1, t - b - 1);
+ goto cleanup;
#ifdef INET6
case PPP_IPV6:
ip6_print(b+1, t - b - 1);
proto = EXTRACT_16BITS(b); /* next guess - load two octets */
switch (proto) {
- case 0xff03: /* looks like a PPP frame */
+ case (PPP_ADDRESS << 8 | PPP_CONTROL): /* looks like a PPP frame */
proto = EXTRACT_16BITS(b+2); /* load the PPP proto-id */
handle_ppp(proto, b+4, t - b - 4);
break;
case ETHERTYPE_IP: /*XXX*/
case PPP_VJNC:
case PPP_IP:
- ip_print(p, length);
+ ip_print(gndo, p, length);
break;
#ifdef INET6
case ETHERTYPE_IPV6: /*XXX*/
#endif /* __bsdi__ */
return (hdrlength);
}
+
+
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 8
+ * End:
+ */