X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/cae86031a39330ef0d84d767eea63ab413060134..50b4920bc51263ce3a2647b6a1d2289629650854:/print-ldp.c?ds=inline diff --git a/print-ldp.c b/print-ldp.c index 39079cb1..f36f2d00 100644 --- a/print-ldp.c +++ b/print-ldp.c @@ -16,7 +16,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-ldp.c,v 1.16 2006-02-01 14:56:25 hannes Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ldp.c,v 1.18 2006-02-21 10:27:40 hannes Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -35,6 +35,7 @@ static const char rcsid[] _U_ = #include "addrtoname.h" #include "l2vpn.h" +#include "af.h" /* * ldp common header @@ -130,6 +131,7 @@ static const struct tok ldp_msg_values[] = { #define LDP_TLV_FEC 0x0100 #define LDP_TLV_ADDRESS_LIST 0x0101 +#define LDP_TLV_ADDRESS_LIST_AFNUM_LEN 2 #define LDP_TLV_HOP_COUNT 0x0103 #define LDP_TLV_PATH_VECTOR 0x0104 #define LDP_TLV_GENERIC_LABEL 0x0200 @@ -214,10 +216,6 @@ static const struct tok ldp_fec_martini_ifparm_vccv_cv_values[] = { { 0, NULL} }; -/* RFC1700 address family numbers, same definition in print-bgp.c */ -#define AFNUM_INET 1 -#define AFNUM_INET6 2 - #define FALSE 0 #define TRUE 1 @@ -296,24 +294,31 @@ ldp_tlv_print(register const u_char *tptr) { case LDP_TLV_ADDRESS_LIST: af = EXTRACT_16BITS(tptr); - tptr+=2; - printf("\n\t Address Family: "); - if (af == AFNUM_INET) { - printf("IPv4, addresses:"); - for (i=0; i<(tlv_tlen-2)/4; i++) { + tptr+=LDP_TLV_ADDRESS_LIST_AFNUM_LEN; + tlv_tlen -= LDP_TLV_ADDRESS_LIST_AFNUM_LEN; + printf("\n\t Address Family: %s, addresses", + tok2str(af_values, "Unknown (%u)", af)); + switch (af) { + case AFNUM_INET: + while(tlv_tlen >= sizeof(struct in_addr)) { printf(" %s",ipaddr_string(tptr)); - tptr+=sizeof(struct in_addr); + tlv_tlen-=sizeof(struct in_addr); + tptr+=sizeof(struct in_addr); } - } + break; #ifdef INET6 - else if (af == AFNUM_INET6) { - printf("IPv6, addresses:"); - for (i=0; i<(tlv_tlen-2)/16; i++) { + case AFNUM_INET6: + while(tlv_tlen >= sizeof(struct in6_addr)) { printf(" %s",ip6addr_string(tptr)); - tptr+=sizeof(struct in6_addr); + tlv_tlen-=sizeof(struct in6_addr); + tptr+=sizeof(struct in6_addr); } - } + break; #endif + default: + /* unknown AF */ + break; + } break; case LDP_TLV_COMMON_SESSION: