mirror of
https://github.com/the-tcpdump-group/tcpdump.git
synced 2024-11-28 04:25:16 +08:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
4d4f42a37b
@ -77,7 +77,7 @@ CSRC = addrtoname.c af.c checksum.c cpack.c gmpls.c oui.c gmt2local.c ipproto.c
|
|||||||
print-chdlc.c print-cip.c print-cnfp.c print-dccp.c print-decnet.c \
|
print-chdlc.c print-cip.c print-cnfp.c print-dccp.c print-decnet.c \
|
||||||
print-domain.c print-dtp.c print-dvmrp.c print-enc.c print-egp.c \
|
print-domain.c print-dtp.c print-dvmrp.c print-enc.c print-egp.c \
|
||||||
print-eap.c print-eigrp.c\
|
print-eap.c print-eigrp.c\
|
||||||
print-esp.c print-ether.c print-fddi.c print-fr.c \
|
print-esp.c print-ether.c print-fddi.c print-forces.c print-fr.c \
|
||||||
print-gre.c print-hsrp.c print-icmp.c print-igmp.c \
|
print-gre.c print-hsrp.c print-icmp.c print-igmp.c \
|
||||||
print-igrp.c print-ip.c print-ipcomp.c print-ipfc.c print-ipnet.c \
|
print-igrp.c print-ip.c print-ipcomp.c print-ipfc.c print-ipnet.c \
|
||||||
print-ipx.c print-isoclns.c print-juniper.c print-krb.c \
|
print-ipx.c print-isoclns.c print-juniper.c print-krb.c \
|
||||||
@ -91,8 +91,8 @@ CSRC = addrtoname.c af.c checksum.c cpack.c gmpls.c oui.c gmt2local.c ipproto.c
|
|||||||
print-rx.c print-sctp.c print-sflow.c print-sip.c print-sl.c print-sll.c \
|
print-rx.c print-sctp.c print-sflow.c print-sip.c print-sl.c print-sll.c \
|
||||||
print-slow.c print-snmp.c print-stp.c print-sunatm.c print-sunrpc.c \
|
print-slow.c print-snmp.c print-stp.c print-sunatm.c print-sunrpc.c \
|
||||||
print-symantec.c print-syslog.c print-tcp.c print-telnet.c print-tftp.c \
|
print-symantec.c print-syslog.c print-tcp.c print-telnet.c print-tftp.c \
|
||||||
print-timed.c print-token.c print-udld.c print-udp.c print-usb.c \
|
print-timed.c print-tipc.c print-token.c print-udld.c print-udp.c \
|
||||||
print-vjc.c print-vqp.c print-vrrp.c print-vtp.c print-forces.c \
|
print-usb.c print-vjc.c print-vqp.c print-vrrp.c print-vtp.c \
|
||||||
print-wb.c print-zephyr.c signature.c setsignal.c tcpdump.c util.c
|
print-wb.c print-zephyr.c signature.c setsignal.c tcpdump.c util.c
|
||||||
|
|
||||||
LIBNETDISSECT_SRC=print-isakmp.c
|
LIBNETDISSECT_SRC=print-isakmp.c
|
||||||
|
9
aclocal.m4
vendored
9
aclocal.m4
vendored
@ -445,7 +445,14 @@ AC_DEFUN(AC_LBL_LIBPCAP,
|
|||||||
[
|
[
|
||||||
AC_MSG_ERROR(
|
AC_MSG_ERROR(
|
||||||
[Report this to tcpdump-workers@lists.tcpdump.org, and include the
|
[Report this to tcpdump-workers@lists.tcpdump.org, and include the
|
||||||
config.log file in your report])
|
config.log file in your report. If you have downloaded libpcap from
|
||||||
|
tcpdump.org, and built it yourself, please also include the config.log
|
||||||
|
file from the libpcap source directory, the Makefile from the libpcap
|
||||||
|
source directory, and the output of the make process for libpcap, as
|
||||||
|
this could be a problem with the libpcap that was built, and we will
|
||||||
|
not be able to determine why this is happening, and thus will not be
|
||||||
|
able to fix it, without that information, as we have not been able to
|
||||||
|
reproduce this problem ourselves.])
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
|
22
configure
vendored
22
configure
vendored
@ -7554,9 +7554,23 @@ if test $ac_cv_func_pcap_loop = yes; then
|
|||||||
else
|
else
|
||||||
|
|
||||||
{ { echo "$as_me:$LINENO: error: Report this to tcpdump-workers@lists.tcpdump.org, and include the
|
{ { echo "$as_me:$LINENO: error: Report this to tcpdump-workers@lists.tcpdump.org, and include the
|
||||||
config.log file in your report" >&5
|
config.log file in your report. If you have downloaded libpcap from
|
||||||
|
tcpdump.org, and built it yourself, please also include the config.log
|
||||||
|
file from the libpcap source directory, the Makefile from the libpcap
|
||||||
|
source directory, and the output of the make process for libpcap, as
|
||||||
|
this could be a problem with the libpcap that was built, and we will
|
||||||
|
not be able to determine why this is happening, and thus will not be
|
||||||
|
able to fix it, without that information, as we have not been able to
|
||||||
|
reproduce this problem ourselves." >&5
|
||||||
echo "$as_me: error: Report this to tcpdump-workers@lists.tcpdump.org, and include the
|
echo "$as_me: error: Report this to tcpdump-workers@lists.tcpdump.org, and include the
|
||||||
config.log file in your report" >&2;}
|
config.log file in your report. If you have downloaded libpcap from
|
||||||
|
tcpdump.org, and built it yourself, please also include the config.log
|
||||||
|
file from the libpcap source directory, the Makefile from the libpcap
|
||||||
|
source directory, and the output of the make process for libpcap, as
|
||||||
|
this could be a problem with the libpcap that was built, and we will
|
||||||
|
not be able to determine why this is happening, and thus will not be
|
||||||
|
able to fix it, without that information, as we have not been able to
|
||||||
|
reproduce this problem ourselves." >&2;}
|
||||||
{ (exit 1); exit 1; }; }
|
{ (exit 1); exit 1; }; }
|
||||||
|
|
||||||
fi
|
fi
|
||||||
@ -9330,7 +9344,7 @@ fi
|
|||||||
done
|
done
|
||||||
|
|
||||||
if test $ac_cv_func_pcap_findalldevs = "yes" ; then
|
if test $ac_cv_func_pcap_findalldevs = "yes" ; then
|
||||||
savedppflags="$CPPLAGS"
|
savedppflags="$CPPFLAGS"
|
||||||
CPPFLAGS="$CPPFLAGS $V_INCLS"
|
CPPFLAGS="$CPPFLAGS $V_INCLS"
|
||||||
{ echo "$as_me:$LINENO: checking for pcap_if_t" >&5
|
{ echo "$as_me:$LINENO: checking for pcap_if_t" >&5
|
||||||
echo $ECHO_N "checking for pcap_if_t... $ECHO_C" >&6; }
|
echo $ECHO_N "checking for pcap_if_t... $ECHO_C" >&6; }
|
||||||
@ -11748,7 +11762,7 @@ _ACEOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
savedppflags="$CPPLAGS"
|
savedppflags="$CPPFLAGS"
|
||||||
CPPFLAGS="$CPPFLAGS $V_INCLS"
|
CPPFLAGS="$CPPFLAGS $V_INCLS"
|
||||||
|
|
||||||
for ac_header in openssl/evp.h
|
for ac_header in openssl/evp.h
|
||||||
|
@ -732,7 +732,7 @@ if test $ac_cv_func_pcap_findalldevs = "yes" ; then
|
|||||||
dnl Check for Mac OS X, which may ship pcap.h from 0.6 but libpcap may
|
dnl Check for Mac OS X, which may ship pcap.h from 0.6 but libpcap may
|
||||||
dnl be 0.8; this means that lib has pcap_findalldevs but header doesn't
|
dnl be 0.8; this means that lib has pcap_findalldevs but header doesn't
|
||||||
dnl have pcap_if_t.
|
dnl have pcap_if_t.
|
||||||
savedppflags="$CPPLAGS"
|
savedppflags="$CPPFLAGS"
|
||||||
CPPFLAGS="$CPPFLAGS $V_INCLS"
|
CPPFLAGS="$CPPFLAGS $V_INCLS"
|
||||||
AC_CHECK_TYPES(pcap_if_t, , , [#include <pcap.h>])
|
AC_CHECK_TYPES(pcap_if_t, , , [#include <pcap.h>])
|
||||||
CPPFLAGS="$savedcppflags"
|
CPPFLAGS="$savedcppflags"
|
||||||
@ -1067,7 +1067,7 @@ if test "$want_libcrypto" != "no"; then
|
|||||||
fi
|
fi
|
||||||
AC_CHECK_LIB(crypto, DES_cbc_encrypt)
|
AC_CHECK_LIB(crypto, DES_cbc_encrypt)
|
||||||
|
|
||||||
savedppflags="$CPPLAGS"
|
savedppflags="$CPPFLAGS"
|
||||||
CPPFLAGS="$CPPFLAGS $V_INCLS"
|
CPPFLAGS="$CPPFLAGS $V_INCLS"
|
||||||
AC_CHECK_HEADERS(openssl/evp.h)
|
AC_CHECK_HEADERS(openssl/evp.h)
|
||||||
CPPFLAGS="$savedcppflags"
|
CPPFLAGS="$savedcppflags"
|
||||||
|
@ -100,6 +100,9 @@
|
|||||||
#ifndef ETHERTYPE_AARP
|
#ifndef ETHERTYPE_AARP
|
||||||
#define ETHERTYPE_AARP 0x80f3
|
#define ETHERTYPE_AARP 0x80f3
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef ETHERTYPE_TIPC
|
||||||
|
#define ETHERTYPE_TIPC 0x88ca
|
||||||
|
#endif
|
||||||
#ifndef ETHERTYPE_8021Q
|
#ifndef ETHERTYPE_8021Q
|
||||||
#define ETHERTYPE_8021Q 0x8100
|
#define ETHERTYPE_8021Q 0x8100
|
||||||
#endif
|
#endif
|
||||||
|
@ -280,6 +280,7 @@ extern int esp_print(netdissect_options *,
|
|||||||
register const u_char *bp, int len, register const u_char *bp2,
|
register const u_char *bp, int len, register const u_char *bp2,
|
||||||
int *nhdr, int *padlen);
|
int *nhdr, int *padlen);
|
||||||
extern void arp_print(netdissect_options *,const u_char *, u_int, u_int);
|
extern void arp_print(netdissect_options *,const u_char *, u_int, u_int);
|
||||||
|
extern void tipc_print(netdissect_options *, const u_char *, u_int, u_int);
|
||||||
extern void icmp6_print(netdissect_options *ndo, const u_char *,
|
extern void icmp6_print(netdissect_options *ndo, const u_char *,
|
||||||
u_int, const u_char *, int);
|
u_int, const u_char *, int);
|
||||||
extern void isakmp_print(netdissect_options *,const u_char *,
|
extern void isakmp_print(netdissect_options *,const u_char *,
|
||||||
|
185
print-bgp.c
185
print-bgp.c
@ -93,6 +93,7 @@ struct bgp_opt {
|
|||||||
/* variable length */
|
/* variable length */
|
||||||
};
|
};
|
||||||
#define BGP_OPT_SIZE 2 /* some compilers may pad to 4 bytes */
|
#define BGP_OPT_SIZE 2 /* some compilers may pad to 4 bytes */
|
||||||
|
#define BGP_CAP_HEADER_SIZE 2 /* some compilers may pad to 4 bytes */
|
||||||
|
|
||||||
#define BGP_UPDATE_MINSIZE 23
|
#define BGP_UPDATE_MINSIZE 23
|
||||||
|
|
||||||
@ -2159,15 +2160,98 @@ trunc:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bgp_capabilities_print(const u_char *opt, int caps_len)
|
||||||
|
{
|
||||||
|
char tokbuf[TOKBUFSIZE];
|
||||||
|
char tokbuf2[TOKBUFSIZE];
|
||||||
|
int cap_type, cap_len, tcap_len, cap_offset;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
while (i < caps_len) {
|
||||||
|
TCHECK2(opt[i], BGP_CAP_HEADER_SIZE);
|
||||||
|
cap_type=opt[i];
|
||||||
|
cap_len=opt[i+1];
|
||||||
|
tcap_len=cap_len;
|
||||||
|
printf("\n\t %s (%u), length: %u",
|
||||||
|
tok2strbuf(bgp_capcode_values, "Unknown",
|
||||||
|
cap_type, tokbuf, sizeof(tokbuf)),
|
||||||
|
cap_type,
|
||||||
|
cap_len);
|
||||||
|
TCHECK2(opt[i+2], cap_len);
|
||||||
|
switch (cap_type) {
|
||||||
|
case BGP_CAPCODE_MP:
|
||||||
|
printf("\n\t\tAFI %s (%u), SAFI %s (%u)",
|
||||||
|
tok2strbuf(af_values, "Unknown",
|
||||||
|
EXTRACT_16BITS(opt+i+2),
|
||||||
|
tokbuf, sizeof(tokbuf)),
|
||||||
|
EXTRACT_16BITS(opt+i+2),
|
||||||
|
tok2strbuf(bgp_safi_values, "Unknown",
|
||||||
|
opt[i+5],
|
||||||
|
tokbuf, sizeof(tokbuf)),
|
||||||
|
opt[i+5]);
|
||||||
|
break;
|
||||||
|
case BGP_CAPCODE_RESTART:
|
||||||
|
printf("\n\t\tRestart Flags: [%s], Restart Time %us",
|
||||||
|
((opt[i+2])&0x80) ? "R" : "none",
|
||||||
|
EXTRACT_16BITS(opt+i+2)&0xfff);
|
||||||
|
tcap_len-=2;
|
||||||
|
cap_offset=4;
|
||||||
|
while(tcap_len>=4) {
|
||||||
|
printf("\n\t\t AFI %s (%u), SAFI %s (%u), Forwarding state preserved: %s",
|
||||||
|
tok2strbuf(af_values,"Unknown",
|
||||||
|
EXTRACT_16BITS(opt+i+cap_offset),
|
||||||
|
tokbuf, sizeof(tokbuf)),
|
||||||
|
EXTRACT_16BITS(opt+i+cap_offset),
|
||||||
|
tok2strbuf(bgp_safi_values,"Unknown",
|
||||||
|
opt[i+cap_offset+2],
|
||||||
|
tokbuf2, sizeof(tokbuf2)),
|
||||||
|
opt[i+cap_offset+2],
|
||||||
|
((opt[i+cap_offset+3])&0x80) ? "yes" : "no" );
|
||||||
|
tcap_len-=4;
|
||||||
|
cap_offset+=4;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BGP_CAPCODE_RR:
|
||||||
|
case BGP_CAPCODE_RR_CISCO:
|
||||||
|
break;
|
||||||
|
case BGP_CAPCODE_AS_NEW:
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Extract the 4 byte AS number encoded.
|
||||||
|
*/
|
||||||
|
if (cap_len == 4) {
|
||||||
|
printf("\n\t\t 4 Byte AS %s",
|
||||||
|
as_printf(astostr, sizeof(astostr),
|
||||||
|
EXTRACT_32BITS(opt + i + 2)));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("\n\t\tno decoder for Capability %u",
|
||||||
|
cap_type);
|
||||||
|
if (vflag <= 1)
|
||||||
|
print_unknown_data(&opt[i+2],"\n\t\t",cap_len);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (vflag > 1 && cap_len > 0) {
|
||||||
|
print_unknown_data(&opt[i+2],"\n\t\t",cap_len);
|
||||||
|
}
|
||||||
|
i += BGP_CAP_HEADER_SIZE + cap_len;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
trunc:
|
||||||
|
printf("[|BGP]");
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bgp_open_print(const u_char *dat, int length)
|
bgp_open_print(const u_char *dat, int length)
|
||||||
{
|
{
|
||||||
struct bgp_open bgpo;
|
struct bgp_open bgpo;
|
||||||
struct bgp_opt bgpopt;
|
struct bgp_opt bgpopt;
|
||||||
const u_char *opt;
|
const u_char *opt;
|
||||||
int i,cap_type,cap_len,tcap_len,cap_offset;
|
int i;
|
||||||
char tokbuf[TOKBUFSIZE];
|
char tokbuf[TOKBUFSIZE];
|
||||||
char tokbuf2[TOKBUFSIZE];
|
|
||||||
|
|
||||||
TCHECK2(dat[0], BGP_OPEN_SIZE);
|
TCHECK2(dat[0], BGP_OPEN_SIZE);
|
||||||
memcpy(&bgpo, dat, BGP_OPEN_SIZE);
|
memcpy(&bgpo, dat, BGP_OPEN_SIZE);
|
||||||
@ -2192,96 +2276,31 @@ bgp_open_print(const u_char *dat, int length)
|
|||||||
TCHECK2(opt[i], BGP_OPT_SIZE);
|
TCHECK2(opt[i], BGP_OPT_SIZE);
|
||||||
memcpy(&bgpopt, &opt[i], BGP_OPT_SIZE);
|
memcpy(&bgpopt, &opt[i], BGP_OPT_SIZE);
|
||||||
if (i + 2 + bgpopt.bgpopt_len > bgpo.bgpo_optlen) {
|
if (i + 2 + bgpopt.bgpopt_len > bgpo.bgpo_optlen) {
|
||||||
printf("\n\t Option %d, length: %u", bgpopt.bgpopt_type, bgpopt.bgpopt_len);
|
printf("\n\t Option %d, length: %u", bgpopt.bgpopt_type, bgpopt.bgpopt_len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n\t Option %s (%u), length: %u",
|
printf("\n\t Option %s (%u), length: %u",
|
||||||
tok2strbuf(bgp_opt_values,"Unknown",
|
tok2strbuf(bgp_opt_values,"Unknown",
|
||||||
bgpopt.bgpopt_type,
|
bgpopt.bgpopt_type,
|
||||||
tokbuf, sizeof(tokbuf)),
|
tokbuf, sizeof(tokbuf)),
|
||||||
bgpopt.bgpopt_type,
|
bgpopt.bgpopt_type,
|
||||||
bgpopt.bgpopt_len);
|
bgpopt.bgpopt_len);
|
||||||
|
|
||||||
/* now lets decode the options we know*/
|
/* now let's decode the options we know*/
|
||||||
switch(bgpopt.bgpopt_type) {
|
switch(bgpopt.bgpopt_type) {
|
||||||
case BGP_OPT_CAP:
|
|
||||||
cap_type=opt[i+BGP_OPT_SIZE];
|
|
||||||
cap_len=opt[i+BGP_OPT_SIZE+1];
|
|
||||||
tcap_len=cap_len;
|
|
||||||
printf("\n\t %s (%u), length: %u",
|
|
||||||
tok2strbuf(bgp_capcode_values, "Unknown",
|
|
||||||
cap_type, tokbuf, sizeof(tokbuf)),
|
|
||||||
cap_type,
|
|
||||||
cap_len);
|
|
||||||
switch(cap_type) {
|
|
||||||
case BGP_CAPCODE_MP:
|
|
||||||
printf("\n\t\tAFI %s (%u), SAFI %s (%u)",
|
|
||||||
tok2strbuf(af_values, "Unknown",
|
|
||||||
EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+2),
|
|
||||||
tokbuf, sizeof(tokbuf)),
|
|
||||||
EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+2),
|
|
||||||
tok2strbuf(bgp_safi_values, "Unknown",
|
|
||||||
opt[i+BGP_OPT_SIZE+5],
|
|
||||||
tokbuf, sizeof(tokbuf)),
|
|
||||||
opt[i+BGP_OPT_SIZE+5]);
|
|
||||||
break;
|
|
||||||
case BGP_CAPCODE_RESTART:
|
|
||||||
printf("\n\t\tRestart Flags: [%s], Restart Time %us",
|
|
||||||
((opt[i+BGP_OPT_SIZE+2])&0x80) ? "R" : "none",
|
|
||||||
EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+2)&0xfff);
|
|
||||||
tcap_len-=2;
|
|
||||||
cap_offset=4;
|
|
||||||
while(tcap_len>=4) {
|
|
||||||
printf("\n\t\t AFI %s (%u), SAFI %s (%u), Forwarding state preserved: %s",
|
|
||||||
tok2strbuf(af_values,"Unknown",
|
|
||||||
EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+cap_offset),
|
|
||||||
tokbuf, sizeof(tokbuf)),
|
|
||||||
EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+cap_offset),
|
|
||||||
tok2strbuf(bgp_safi_values,"Unknown",
|
|
||||||
opt[i+BGP_OPT_SIZE+cap_offset+2],
|
|
||||||
tokbuf2, sizeof(tokbuf2)),
|
|
||||||
opt[i+BGP_OPT_SIZE+cap_offset+2],
|
|
||||||
((opt[i+BGP_OPT_SIZE+cap_offset+3])&0x80) ? "yes" : "no" );
|
|
||||||
tcap_len-=4;
|
|
||||||
cap_offset+=4;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case BGP_CAPCODE_RR:
|
|
||||||
case BGP_CAPCODE_RR_CISCO:
|
|
||||||
break;
|
|
||||||
case BGP_CAPCODE_AS_NEW:
|
|
||||||
|
|
||||||
/*
|
case BGP_OPT_CAP:
|
||||||
* Extract the 4 byte AS number encoded.
|
bgp_capabilities_print(&opt[i+BGP_OPT_SIZE],
|
||||||
*/
|
bgpopt.bgpopt_len);
|
||||||
TCHECK2(opt[i + BGP_OPT_SIZE + 2], cap_len);
|
break;
|
||||||
if (cap_len == 4) {
|
|
||||||
printf("\n\t\t 4 Byte AS %s",
|
|
||||||
as_printf(astostr, sizeof(astostr),
|
|
||||||
EXTRACT_32BITS(opt + i + BGP_OPT_SIZE + 2)));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
TCHECK2(opt[i+BGP_OPT_SIZE+2],cap_len);
|
|
||||||
printf("\n\t\tno decoder for Capability %u",
|
|
||||||
cap_type);
|
|
||||||
if (vflag <= 1)
|
|
||||||
print_unknown_data(&opt[i+BGP_OPT_SIZE+2],"\n\t\t",cap_len);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (vflag > 1) {
|
|
||||||
TCHECK2(opt[i+BGP_OPT_SIZE+2],cap_len);
|
|
||||||
print_unknown_data(&opt[i+BGP_OPT_SIZE+2],"\n\t\t",cap_len);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case BGP_OPT_AUTH:
|
|
||||||
default:
|
|
||||||
printf("\n\t no decoder for option %u",
|
|
||||||
bgpopt.bgpopt_type);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
case BGP_OPT_AUTH:
|
||||||
|
default:
|
||||||
|
printf("\n\t no decoder for option %u",
|
||||||
|
bgpopt.bgpopt_type);
|
||||||
|
break;
|
||||||
|
}
|
||||||
i += BGP_OPT_SIZE + bgpopt.bgpopt_len;
|
i += BGP_OPT_SIZE + bgpopt.bgpopt_len;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -37,7 +37,6 @@ static const char rcsid[] _U_ =
|
|||||||
#include "extract.h"
|
#include "extract.h"
|
||||||
#include "addrtoname.h"
|
#include "addrtoname.h"
|
||||||
#include "ethertype.h"
|
#include "ethertype.h"
|
||||||
|
|
||||||
#include "ether.h"
|
#include "ether.h"
|
||||||
|
|
||||||
const struct tok ethertype_values[] = {
|
const struct tok ethertype_values[] = {
|
||||||
@ -84,6 +83,7 @@ const struct tok ethertype_values[] = {
|
|||||||
{ ETHERTYPE_CFM_OLD, "CFM (old)" },
|
{ ETHERTYPE_CFM_OLD, "CFM (old)" },
|
||||||
{ ETHERTYPE_CFM, "CFM" },
|
{ ETHERTYPE_CFM, "CFM" },
|
||||||
{ ETHERTYPE_LLDP, "LLDP" },
|
{ ETHERTYPE_LLDP, "LLDP" },
|
||||||
|
{ ETHERTYPE_TIPC, "TIPC"},
|
||||||
{ 0, NULL}
|
{ 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -408,6 +408,10 @@ ethertype_print(netdissect_options *ndo,
|
|||||||
mpls_print(/*ndo,*/p, length);
|
mpls_print(/*ndo,*/p, length);
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
|
case ETHERTYPE_TIPC:
|
||||||
|
tipc_print(ndo, p, length, caplen);
|
||||||
|
return (1);
|
||||||
|
|
||||||
case ETHERTYPE_LAT:
|
case ETHERTYPE_LAT:
|
||||||
case ETHERTYPE_SCA:
|
case ETHERTYPE_SCA:
|
||||||
case ETHERTYPE_MOPRC:
|
case ETHERTYPE_MOPRC:
|
||||||
|
@ -141,6 +141,8 @@ ip6_opt_print(const u_char *bp, int len)
|
|||||||
int i;
|
int i;
|
||||||
int optlen = 0;
|
int optlen = 0;
|
||||||
|
|
||||||
|
if (len == 0)
|
||||||
|
return;
|
||||||
for (i = 0; i < len; i += optlen) {
|
for (i = 0; i < len; i += optlen) {
|
||||||
if (bp[i] == IP6OPT_PAD1)
|
if (bp[i] == IP6OPT_PAD1)
|
||||||
optlen = 1;
|
optlen = 1;
|
||||||
@ -271,10 +273,11 @@ ip6_opt_print(const u_char *bp, int len)
|
|||||||
printf("(type %d: trunc)", bp[i]);
|
printf("(type %d: trunc)", bp[i]);
|
||||||
goto trunc;
|
goto trunc;
|
||||||
}
|
}
|
||||||
printf("(opt_type 0x%02x: len=%d) ", bp[i], bp[i + 1]);
|
printf("(opt_type 0x%02x: len=%d)", bp[i], bp[i + 1]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
end:
|
end:
|
||||||
|
@ -385,9 +385,9 @@ static const struct tok lldp_tia_application_type_values[] = {
|
|||||||
{ 0, NULL}
|
{ 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LLDP_TIA_NETWORK_POLICY_U_BIT (1 << 5)
|
#define LLDP_TIA_NETWORK_POLICY_X_BIT (1 << 5)
|
||||||
#define LLDP_TIA_NETWORK_POLICY_T_BIT (1 << 6)
|
#define LLDP_TIA_NETWORK_POLICY_T_BIT (1 << 6)
|
||||||
#define LLDP_TIA_NETWORK_POLICY_X_BIT (1 << 7)
|
#define LLDP_TIA_NETWORK_POLICY_U_BIT (1 << 7)
|
||||||
|
|
||||||
static const struct tok lldp_tia_network_policy_bits_values[] = {
|
static const struct tok lldp_tia_network_policy_bits_values[] = {
|
||||||
{ LLDP_TIA_NETWORK_POLICY_U_BIT, "Unknown"},
|
{ LLDP_TIA_NETWORK_POLICY_U_BIT, "Unknown"},
|
||||||
|
392
print-tipc.c
Normal file
392
print-tipc.c
Normal file
@ -0,0 +1,392 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that: (1) source code distributions
|
||||||
|
* retain the above copyright notice and this paragraph in its entirety, (2)
|
||||||
|
* distributions including binary code include the above copyright notice and
|
||||||
|
* this paragraph in its entirety in the documentation or other materials
|
||||||
|
* provided with the distribution, and (3) all advertising materials mentioning
|
||||||
|
* features or use of this software display the following acknowledgement:
|
||||||
|
* ``This product includes software developed by the University of California,
|
||||||
|
* Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
|
||||||
|
* the University nor the names of its contributors may be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior
|
||||||
|
* written permission.
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef lint
|
||||||
|
static const char rcsid[] _U_ =
|
||||||
|
"@(#) $Header: /tcpdump/master/tcpdump/print-arp.c,v 1.66 2006-03-03 22:53:21 hannes Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <tcpdump-stdinc.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "netdissect.h"
|
||||||
|
#include "addrtoname.h"
|
||||||
|
#include "ether.h"
|
||||||
|
#include "ethertype.h"
|
||||||
|
#include "extract.h" /* must come after interface.h */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Transparent Inter-Process Communication (TIPC) protocol.
|
||||||
|
*
|
||||||
|
* http://tipc.sourceforge.net/doc/draft-spec-tipc-07.html
|
||||||
|
* http://tipc.sourceforge.net/doc/tipc_message_formats.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define TIPC_USER_LOW_IMPORTANCE 0
|
||||||
|
#define TIPC_USER_MEDIUM_IMPORTANCE 1
|
||||||
|
#define TIPC_USER_HIGH_IMPORTANCE 2
|
||||||
|
#define TIPC_USER_CRITICAL_IMPORTANCE 3
|
||||||
|
#define TIPC_USER_BCAST_PROTOCOL 5
|
||||||
|
#define TIPC_USER_MSG_BUNDLER 6
|
||||||
|
#define TIPC_USER_LINK_PROTOCOL 7
|
||||||
|
#define TIPC_USER_CONN_MANAGER 8
|
||||||
|
#define TIPC_USER_CHANGEOVER_PROTOCOL 10
|
||||||
|
#define TIPC_USER_NAME_DISTRIBUTOR 11
|
||||||
|
#define TIPC_USER_MSG_FRAGMENTER 12
|
||||||
|
#define TIPC_USER_LINK_CONFIG 13
|
||||||
|
|
||||||
|
#define TIPC_CONN_MSG 0
|
||||||
|
#define TIPC_DIRECT_MSG 1
|
||||||
|
#define TIPC_NAMED_MSG 2
|
||||||
|
#define TIPC_MCAST_MSG 3
|
||||||
|
|
||||||
|
#define TIPC_ZONE(addr) (((addr) >> 24) & 0xFF)
|
||||||
|
#define TIPC_CLUSTER(addr) (((addr) >> 12) & 0xFFF)
|
||||||
|
#define TIPC_NODE(addr) (((addr) >> 0) & 0xFFF)
|
||||||
|
|
||||||
|
struct tipc_pkthdr {
|
||||||
|
u_int32_t w0;
|
||||||
|
u_int32_t w1;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TIPC_VER(w0) (((w0) >> 29) & 0x07)
|
||||||
|
#define TIPC_USER(w0) (((w0) >> 25) & 0x0F)
|
||||||
|
#define TIPC_HSIZE(w0) (((w0) >> 21) & 0x0F)
|
||||||
|
#define TIPC_MSIZE(w0) (((w0) >> 0) & 0xFFFF)
|
||||||
|
#define TIPC_MTYPE(w1) (((w1) >> 29) & 0x07)
|
||||||
|
#define TIPC_BROADCAST_ACK(w1) (((w1) >> 0) & 0xFFFF)
|
||||||
|
#define TIPC_LINK_ACK(w2) (((w2) >> 16) & 0xFFFF)
|
||||||
|
#define TIPC_LINK_SEQ(w2) (((w2) >> 0) & 0xFFFF)
|
||||||
|
|
||||||
|
static const struct tok tipcuser_values[] = {
|
||||||
|
{ TIPC_USER_LOW_IMPORTANCE, "Low Importance Data payload" },
|
||||||
|
{ TIPC_USER_MEDIUM_IMPORTANCE, "Medium Importance Data payload" },
|
||||||
|
{ TIPC_USER_HIGH_IMPORTANCE, "High Importance Data payload" },
|
||||||
|
{ TIPC_USER_CRITICAL_IMPORTANCE, "Critical Importance Data payload" },
|
||||||
|
{ TIPC_USER_BCAST_PROTOCOL, "Broadcast Link Protocol internal" },
|
||||||
|
{ TIPC_USER_MSG_BUNDLER, "Message Bundler Protocol internal" },
|
||||||
|
{ TIPC_USER_LINK_PROTOCOL, "Link State Protocol internal" },
|
||||||
|
{ TIPC_USER_CONN_MANAGER, "Connection Manager internal" },
|
||||||
|
{ TIPC_USER_CHANGEOVER_PROTOCOL, "Link Changeover Protocol internal" },
|
||||||
|
{ TIPC_USER_NAME_DISTRIBUTOR, "Name Table Update Protocol internal" },
|
||||||
|
{ TIPC_USER_MSG_FRAGMENTER, "Message Fragmentation Protocol internal" },
|
||||||
|
{ TIPC_USER_LINK_CONFIG, "Neighbor Detection Protocol internal" },
|
||||||
|
{ 0, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct tok tipcmtype_values[] = {
|
||||||
|
{ TIPC_CONN_MSG, "CONN_MSG" },
|
||||||
|
{ TIPC_DIRECT_MSG, "MCAST_MSG" },
|
||||||
|
{ TIPC_NAMED_MSG, "NAMED_MSG" },
|
||||||
|
{ TIPC_MCAST_MSG, "DIRECT_MSG" },
|
||||||
|
{ 0, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct tok tipc_linkconf_mtype_values[] = {
|
||||||
|
{ 0, "Link request" },
|
||||||
|
{ 1, "Link response" },
|
||||||
|
{ 0, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct payload_tipc_pkthdr {
|
||||||
|
u_int32_t w0;
|
||||||
|
u_int32_t w1;
|
||||||
|
u_int32_t w2;
|
||||||
|
u_int32_t prev_node;
|
||||||
|
u_int32_t orig_port;
|
||||||
|
u_int32_t dest_port;
|
||||||
|
u_int32_t orig_node;
|
||||||
|
u_int32_t dest_node;
|
||||||
|
u_int32_t name_type;
|
||||||
|
u_int32_t w9;
|
||||||
|
u_int32_t wA;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct internal_tipc_pkthdr {
|
||||||
|
u_int32_t w0;
|
||||||
|
u_int32_t w1;
|
||||||
|
u_int32_t w2;
|
||||||
|
u_int32_t prev_node;
|
||||||
|
u_int32_t w4;
|
||||||
|
u_int32_t w5;
|
||||||
|
u_int32_t orig_node;
|
||||||
|
u_int32_t dest_node;
|
||||||
|
u_int32_t trans_seq;
|
||||||
|
u_int32_t w9;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TIPC_SEQ_GAP(w1) (((w1) >> 16) & 0x1FFF)
|
||||||
|
#define TIPC_BC_GAP_AFTER(w2) (((w2) >> 16) & 0xFFFF)
|
||||||
|
#define TIPC_BC_GAP_TO(w2) (((w2) >> 0) & 0xFFFF)
|
||||||
|
#define TIPC_LAST_SENT_FRAG(w4) (((w4) >> 16) & 0xFFFF)
|
||||||
|
#define TIPC_NEXT_SENT_FRAG(w4) (((w4) >> 0) & 0xFFFF)
|
||||||
|
#define TIPC_SESS_NO(w5) (((w5) >> 16) & 0xFFFF)
|
||||||
|
#define TIPC_MSG_CNT(w9) (((w9) >> 16) & 0xFFFF)
|
||||||
|
#define TIPC_LINK_TOL(w9) (((w9) >> 0) & 0xFFFF)
|
||||||
|
|
||||||
|
struct link_conf_tipc_pkthdr {
|
||||||
|
u_int32_t w0;
|
||||||
|
u_int32_t w1;
|
||||||
|
u_int32_t dest_domain;
|
||||||
|
u_int32_t prev_node;
|
||||||
|
u_int32_t ntwrk_id;
|
||||||
|
u_int32_t w5;
|
||||||
|
u_int8_t media_address[16];
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TIPC_NODE_SIG(w1) (((w1) >> 0) & 0xFFFF)
|
||||||
|
#define TIPC_MEDIA_ID(w5) (((w5) >> 0) & 0xFF)
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_payload(netdissect_options *ndo, const struct payload_tipc_pkthdr *ap)
|
||||||
|
{
|
||||||
|
u_int32_t w0, w1, w2;
|
||||||
|
u_int user;
|
||||||
|
u_int hsize;
|
||||||
|
u_int msize;
|
||||||
|
u_int mtype;
|
||||||
|
u_int broadcast_ack;
|
||||||
|
u_int link_ack;
|
||||||
|
u_int link_seq;
|
||||||
|
u_int prev_node;
|
||||||
|
u_int orig_port;
|
||||||
|
u_int dest_port;
|
||||||
|
u_int orig_node;
|
||||||
|
u_int dest_node;
|
||||||
|
|
||||||
|
ND_TCHECK(ap->dest_port);
|
||||||
|
w0 = EXTRACT_32BITS(&ap->w0);
|
||||||
|
user = TIPC_USER(w0);
|
||||||
|
hsize = TIPC_HSIZE(w0);
|
||||||
|
msize = TIPC_MSIZE(w0);
|
||||||
|
w1 = EXTRACT_32BITS(&ap->w1);
|
||||||
|
mtype = TIPC_MTYPE(w1);
|
||||||
|
prev_node = EXTRACT_32BITS(&ap->prev_node);
|
||||||
|
orig_port = EXTRACT_32BITS(&ap->orig_port);
|
||||||
|
dest_port = EXTRACT_32BITS(&ap->dest_port);
|
||||||
|
if (hsize <= 6) {
|
||||||
|
ND_PRINT((ndo, "TIPC v%u.0 %u.%u.%u:%u > %u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s",
|
||||||
|
TIPC_VER(w0),
|
||||||
|
TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node),
|
||||||
|
orig_port, dest_port,
|
||||||
|
hsize*4, msize,
|
||||||
|
tok2str(tipcuser_values, "unknown", user),
|
||||||
|
tok2str(tipcmtype_values, "Unknown", mtype)));
|
||||||
|
} else {
|
||||||
|
ND_TCHECK(ap->dest_node);
|
||||||
|
orig_node = EXTRACT_32BITS(&ap->orig_node);
|
||||||
|
dest_node = EXTRACT_32BITS(&ap->dest_node);
|
||||||
|
ND_PRINT((ndo, "TIPC v%u.0 %u.%u.%u:%u > %u.%u.%u:%u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s",
|
||||||
|
TIPC_VER(w0),
|
||||||
|
TIPC_ZONE(orig_node), TIPC_CLUSTER(orig_node), TIPC_NODE(orig_node),
|
||||||
|
orig_port,
|
||||||
|
TIPC_ZONE(dest_node), TIPC_CLUSTER(dest_node), TIPC_NODE(dest_node),
|
||||||
|
dest_port,
|
||||||
|
hsize*4, msize,
|
||||||
|
tok2str(tipcuser_values, "unknown", user),
|
||||||
|
tok2str(tipcmtype_values, "Unknown", mtype)));
|
||||||
|
|
||||||
|
if (ndo->ndo_vflag) {
|
||||||
|
broadcast_ack = TIPC_BROADCAST_ACK(w1);
|
||||||
|
w2 = EXTRACT_32BITS(&ap->w2);
|
||||||
|
link_ack = TIPC_LINK_ACK(w2);
|
||||||
|
link_seq = TIPC_LINK_SEQ(w2);
|
||||||
|
ND_PRINT((ndo, "\n\tPrevious Node %u.%u.%u, Broadcast Ack %u, Link Ack %u, Link Sequence %u",
|
||||||
|
TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node),
|
||||||
|
broadcast_ack, link_ack, link_seq));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
trunc:
|
||||||
|
ND_PRINT((ndo, "[|TIPC]"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_internal(netdissect_options *ndo, const struct internal_tipc_pkthdr *ap)
|
||||||
|
{
|
||||||
|
u_int32_t w0, w1, w2, w4, w5, w9;
|
||||||
|
u_int user;
|
||||||
|
u_int hsize;
|
||||||
|
u_int msize;
|
||||||
|
u_int mtype;
|
||||||
|
u_int seq_gap;
|
||||||
|
u_int broadcast_ack;
|
||||||
|
u_int bc_gap_after;
|
||||||
|
u_int bc_gap_to;
|
||||||
|
u_int prev_node;
|
||||||
|
u_int last_sent_frag;
|
||||||
|
u_int next_sent_frag;
|
||||||
|
u_int sess_no;
|
||||||
|
u_int orig_node;
|
||||||
|
u_int dest_node;
|
||||||
|
u_int trans_seq;
|
||||||
|
u_int msg_cnt;
|
||||||
|
u_int link_tol;
|
||||||
|
|
||||||
|
ND_TCHECK(ap->dest_node);
|
||||||
|
w0 = EXTRACT_32BITS(&ap->w0);
|
||||||
|
user = TIPC_USER(w0);
|
||||||
|
hsize = TIPC_HSIZE(w0);
|
||||||
|
msize = TIPC_MSIZE(w0);
|
||||||
|
w1 = EXTRACT_32BITS(&ap->w1);
|
||||||
|
mtype = TIPC_MTYPE(w1);
|
||||||
|
orig_node = EXTRACT_32BITS(&ap->orig_node);
|
||||||
|
dest_node = EXTRACT_32BITS(&ap->dest_node);
|
||||||
|
ND_PRINT((ndo, "TIPC v%u.0 %u.%u.%u > %u.%u.%u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s (0x%08x)",
|
||||||
|
TIPC_VER(w0),
|
||||||
|
TIPC_ZONE(orig_node), TIPC_CLUSTER(orig_node), TIPC_NODE(orig_node),
|
||||||
|
TIPC_ZONE(dest_node), TIPC_CLUSTER(dest_node), TIPC_NODE(dest_node),
|
||||||
|
hsize*4, msize,
|
||||||
|
tok2str(tipcuser_values, "unknown", user),
|
||||||
|
tok2str(tipcmtype_values, "Unknown", mtype), w1));
|
||||||
|
|
||||||
|
if (ndo->ndo_vflag) {
|
||||||
|
ND_TCHECK(*ap);
|
||||||
|
seq_gap = TIPC_SEQ_GAP(w1);
|
||||||
|
broadcast_ack = TIPC_BROADCAST_ACK(w1);
|
||||||
|
w2 = EXTRACT_32BITS(&ap->w2);
|
||||||
|
bc_gap_after = TIPC_BC_GAP_AFTER(w2);
|
||||||
|
bc_gap_to = TIPC_BC_GAP_TO(w2);
|
||||||
|
prev_node = EXTRACT_32BITS(&ap->prev_node);
|
||||||
|
w4 = EXTRACT_32BITS(&ap->w4);
|
||||||
|
last_sent_frag = TIPC_LAST_SENT_FRAG(w4);
|
||||||
|
next_sent_frag = TIPC_NEXT_SENT_FRAG(w4);
|
||||||
|
w5 = EXTRACT_32BITS(&ap->w5);
|
||||||
|
sess_no = TIPC_SESS_NO(w5);
|
||||||
|
trans_seq = EXTRACT_32BITS(&ap->trans_seq);
|
||||||
|
w9 = EXTRACT_32BITS(&ap->w9);
|
||||||
|
msg_cnt = TIPC_MSG_CNT(w9);
|
||||||
|
link_tol = TIPC_LINK_TOL(w9);
|
||||||
|
ND_PRINT((ndo, "\n\tPrevious Node %u.%u.%u, Session No. %u, Broadcast Ack %u, Sequence Gap %u, Broadcast Gap After %u, Broadcast Gap To %u, Last Sent Packet No. %u, Next sent Packet No. %u, Transport Sequence %u, msg_count %u, Link Tolerance %u",
|
||||||
|
TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node),
|
||||||
|
sess_no, broadcast_ack, seq_gap, bc_gap_after, bc_gap_to,
|
||||||
|
last_sent_frag, next_sent_frag, trans_seq, msg_cnt,
|
||||||
|
link_tol));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
trunc:
|
||||||
|
ND_PRINT((ndo, "[|TIPC]"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_link_conf(netdissect_options *ndo, const struct link_conf_tipc_pkthdr *ap)
|
||||||
|
{
|
||||||
|
u_int32_t w0, w1, w5;
|
||||||
|
u_int user;
|
||||||
|
u_int hsize;
|
||||||
|
u_int msize;
|
||||||
|
u_int mtype;
|
||||||
|
u_int node_sig;
|
||||||
|
u_int prev_node;
|
||||||
|
u_int dest_domain;
|
||||||
|
u_int ntwrk_id;
|
||||||
|
u_int media_id;
|
||||||
|
|
||||||
|
ND_TCHECK(ap->prev_node);
|
||||||
|
w0 = EXTRACT_32BITS(&ap->w0);
|
||||||
|
user = TIPC_USER(w0);
|
||||||
|
hsize = TIPC_HSIZE(w0);
|
||||||
|
msize = TIPC_MSIZE(w0);
|
||||||
|
w1 = EXTRACT_32BITS(&ap->w1);
|
||||||
|
mtype = TIPC_MTYPE(w1);
|
||||||
|
prev_node = EXTRACT_32BITS(&ap->prev_node);
|
||||||
|
dest_domain = EXTRACT_32BITS(&ap->dest_domain);
|
||||||
|
prev_node = EXTRACT_32BITS(&ap->prev_node);
|
||||||
|
|
||||||
|
ND_PRINT((ndo, "TIPC v%u.0 %u.%u.%u > %u.%u.%u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s",
|
||||||
|
TIPC_VER(w0),
|
||||||
|
TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node),
|
||||||
|
TIPC_ZONE(dest_domain), TIPC_CLUSTER(dest_domain), TIPC_NODE(dest_domain),
|
||||||
|
hsize*4, msize,
|
||||||
|
tok2str(tipcuser_values, "unknown", user),
|
||||||
|
tok2str(tipc_linkconf_mtype_values, "Unknown", mtype)));
|
||||||
|
if (ndo->ndo_vflag) {
|
||||||
|
ND_TCHECK(ap->w5);
|
||||||
|
node_sig = TIPC_NODE_SIG(w1);
|
||||||
|
ntwrk_id = EXTRACT_32BITS(&ap->ntwrk_id);
|
||||||
|
w5 = EXTRACT_32BITS(&ap->w5);
|
||||||
|
media_id = TIPC_MEDIA_ID(w5);
|
||||||
|
ND_PRINT((ndo, "\n\tNodeSignature %u, network_id %u, media_id %u",
|
||||||
|
node_sig, ntwrk_id, media_id));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
trunc:
|
||||||
|
ND_PRINT((ndo, "[|TIPC]"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tipc_print(netdissect_options *ndo, const u_char *bp, u_int length _U_,
|
||||||
|
u_int caplen _U_)
|
||||||
|
{
|
||||||
|
const struct tipc_pkthdr *ap;
|
||||||
|
u_int32_t w0;
|
||||||
|
u_int user;
|
||||||
|
|
||||||
|
ap = (struct tipc_pkthdr *)bp;
|
||||||
|
ND_TCHECK(ap->w0);
|
||||||
|
w0 = EXTRACT_32BITS(&ap->w0);
|
||||||
|
user = TIPC_USER(w0);
|
||||||
|
|
||||||
|
switch (user)
|
||||||
|
{
|
||||||
|
case TIPC_USER_LOW_IMPORTANCE:
|
||||||
|
case TIPC_USER_MEDIUM_IMPORTANCE:
|
||||||
|
case TIPC_USER_HIGH_IMPORTANCE:
|
||||||
|
case TIPC_USER_CRITICAL_IMPORTANCE:
|
||||||
|
case TIPC_USER_NAME_DISTRIBUTOR:
|
||||||
|
case TIPC_USER_CONN_MANAGER:
|
||||||
|
print_payload(ndo, (struct payload_tipc_pkthdr *)bp);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TIPC_USER_LINK_CONFIG:
|
||||||
|
print_link_conf(ndo, (struct link_conf_tipc_pkthdr *)bp);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TIPC_USER_BCAST_PROTOCOL:
|
||||||
|
case TIPC_USER_MSG_BUNDLER:
|
||||||
|
case TIPC_USER_LINK_PROTOCOL:
|
||||||
|
case TIPC_USER_CHANGEOVER_PROTOCOL:
|
||||||
|
case TIPC_USER_MSG_FRAGMENTER:
|
||||||
|
print_internal(ndo, (struct internal_tipc_pkthdr *)bp);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
trunc:
|
||||||
|
ND_PRINT((ndo, "[|TIPC]"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local Variables:
|
||||||
|
* c-style: bsd
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
|
14
tcpdump.c
14
tcpdump.c
@ -87,6 +87,12 @@ extern int SIZE_BUF;
|
|||||||
#define NAME_MAX 255
|
#define NAME_MAX 255
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SIGINFO
|
||||||
|
#define SIGNAL_REQ_INFO SIGINFO
|
||||||
|
#elif SIGUSR1
|
||||||
|
#define SIGNAL_REQ_INFO SIGUSR1
|
||||||
|
#endif
|
||||||
|
|
||||||
netdissect_options Gndo;
|
netdissect_options Gndo;
|
||||||
netdissect_options *gndo = &Gndo;
|
netdissect_options *gndo = &Gndo;
|
||||||
|
|
||||||
@ -119,7 +125,7 @@ static void ndo_error(netdissect_options *ndo, const char *fmt, ...)
|
|||||||
__attribute__ ((noreturn, format (printf, 2, 3)));
|
__attribute__ ((noreturn, format (printf, 2, 3)));
|
||||||
static void ndo_warning(netdissect_options *ndo, const char *fmt, ...);
|
static void ndo_warning(netdissect_options *ndo, const char *fmt, ...);
|
||||||
|
|
||||||
#ifdef SIGINFO
|
#ifdef SIGNAL_REQ_INFO
|
||||||
RETSIGTYPE requestinfo(int);
|
RETSIGTYPE requestinfo(int);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1349,13 +1355,13 @@ main(int argc, char **argv)
|
|||||||
pcap_userdata = (u_char *)&printinfo;
|
pcap_userdata = (u_char *)&printinfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SIGINFO
|
#ifdef SIGNAL_REQ_INFO
|
||||||
/*
|
/*
|
||||||
* We can't get statistics when reading from a file rather
|
* We can't get statistics when reading from a file rather
|
||||||
* than capturing from a device.
|
* than capturing from a device.
|
||||||
*/
|
*/
|
||||||
if (RFileName == NULL)
|
if (RFileName == NULL)
|
||||||
(void)setsignal(SIGINFO, requestinfo);
|
(void)setsignal(SIGNAL_REQ_INFO, requestinfo);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (vflag > 0 && WFileName) {
|
if (vflag > 0 && WFileName) {
|
||||||
@ -1844,7 +1850,7 @@ default_print(const u_char *bp, u_int length)
|
|||||||
ndo_default_print(gndo, bp, length);
|
ndo_default_print(gndo, bp, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SIGINFO
|
#ifdef SIGNAL_REQ_INFO
|
||||||
RETSIGTYPE requestinfo(int signo _U_)
|
RETSIGTYPE requestinfo(int signo _U_)
|
||||||
{
|
{
|
||||||
if (infodelay)
|
if (infodelay)
|
||||||
|
@ -14,10 +14,10 @@ do
|
|||||||
then
|
then
|
||||||
echo $i: passed.
|
echo $i: passed.
|
||||||
rm -f DIFF/$i.result
|
rm -f DIFF/$i.result
|
||||||
passed=$(($passed + 1))
|
passed=`expr $passed + 1`
|
||||||
else
|
else
|
||||||
echo $i: failed.
|
echo $i: failed.
|
||||||
failed=$(($failed + 1))
|
failed=`expr $failed + 1`
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -36,11 +36,11 @@ do
|
|||||||
then
|
then
|
||||||
echo $name: passed.
|
echo $name: passed.
|
||||||
rm -f DIFF/$output.diff
|
rm -f DIFF/$output.diff
|
||||||
passed=$(($passed + 1))
|
passed=`expr passed + 1`
|
||||||
echo $passed >.passed
|
echo $passed >.passed
|
||||||
else
|
else
|
||||||
echo $name: failed.
|
echo $name: failed.
|
||||||
failed=$(($failed + 1))
|
failed=`expr $failed + 1`
|
||||||
echo $failed >.failed
|
echo $failed >.failed
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
21
tests/icmpv6.out
Normal file
21
tests/icmpv6.out
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
IP6 (hlim 255, next-header ICMPv6 (58) payload length: 80) fe80::d498:f9ff:fee7:896 > ff02::1: 0000: fe 80 00 00 00 00 00 00 d4 98 f9 ff fe e7 08 96 ................ .
|
||||||
|
0010: ff 02 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ................ .
|
||||||
|
0020: 00 00 00 50 00 00 00 3a ...P...: .
|
||||||
|
0000: 86 00 37 de 40 20 00 0f 00 00 00 00 00 00 00 00 ..7.@ .......... .
|
||||||
|
0010: 08 01 00 00 c3 51 00 0f 07 01 00 00 00 00 13 88 .....Q.......... .
|
||||||
|
0020: 03 04 48 c0 00 27 8d 00 00 09 3a 80 00 00 00 00 ..H..'....:..... .
|
||||||
|
0030: 22 22 33 33 44 44 55 55 66 00 00 00 00 00 00 00 ""33DDUUf....... .
|
||||||
|
0040: 01 01 d6 98 f9 e7 08 96 05 01 00 00 00 00 00 64 ...............d .
|
||||||
|
[icmp6 sum ok] ICMP6, router advertisement, length 80
|
||||||
|
hop limit 64, Flags [home agent], pref medium, router lifetime 15s, reachable time 0s, retrans time 0s
|
||||||
|
homeagent information option (8), length 8 (1): preference 50001, lifetime 15
|
||||||
|
0x0000: 0000 c351 000f
|
||||||
|
advertisement interval option (7), length 8 (1): 5000ms
|
||||||
|
0x0000: 0000 0000 1388
|
||||||
|
prefix info option (3), length 32 (4): 2222:3333:4444:5555:6600::/72, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
|
||||||
|
0x0000: 48c0 0027 8d00 0009 3a80 0000 0000 2222
|
||||||
|
0x0010: 3333 4444 5555 6600 0000 0000 0000
|
||||||
|
source link-address option (1), length 8 (1): d6:98:f9:e7:08:96
|
||||||
|
0x0000: d698 f9e7 0896
|
||||||
|
mtu option (5), length 8 (1): 100
|
||||||
|
0x0000: 0000 0000 0064
|
BIN
tests/icmpv6.pcap
Normal file
BIN
tests/icmpv6.pcap
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user