diff options
author | hannes <hannes> | 2004-04-23 18:29:44 +0000 |
---|---|---|
committer | hannes <hannes> | 2004-04-23 18:29:44 +0000 |
commit | 0b46813f790826e74e6e9b5deebb81c1d0c3ab20 (patch) | |
tree | c1ed123e7cb130421035784748109cb85bbf9df6 /print-lmp.c | |
parent | d89459c923e8e2acc0f69df747ffa91173d322a0 (diff) | |
download | tcpdump-0b46813f790826e74e6e9b5deebb81c1d0c3ab20.tar.gz |
from Carles Kishimoto <ckishimo@ac.upc.es> :
add support for the {TE,Data}-Link Objects
Diffstat (limited to 'print-lmp.c')
-rw-r--r-- | print-lmp.c | 98 |
1 files changed, 94 insertions, 4 deletions
diff --git a/print-lmp.c b/print-lmp.c index c7ee6dd7..aee81644 100644 --- a/print-lmp.c +++ b/print-lmp.c @@ -15,7 +15,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-lmp.c,v 1.1 2004-04-19 21:17:13 hannes Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-lmp.c,v 1.2 2004-04-23 18:29:44 hannes Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -61,6 +61,19 @@ static const struct tok lmp_header_flag_values[] = { { 0, NULL} }; +static const struct tok lmp_obj_te_link_flag_values[] = { + { 0x01, "Fault Management Supported"}, + { 0x02, "Link Verification Supported"}, + { 0, NULL} +}; + +static const struct tok lmp_obj_data_link_flag_values[] = { + { 0x01, "Data Link Port"}, + { 0x02, "Allocated for user traffic"}, + { 0x04, "Failed link"}, + { 0, NULL} +}; + #define LMP_MSGTYPE_CONFIG 1 #define LMP_MSGTYPE_CONFIG_ACK 2 #define LMP_MSGTYPE_CONFIG_NACK 3 @@ -178,6 +191,9 @@ static const struct tok lmp_obj_values[] = { #define LMP_CTYPE_1 1 #define LMP_CTYPE_2 2 +#define LMP_CTYPE_HELLO_CONFIG 1 +#define LMP_CTYPE_HELLO 1 + #define FALSE 0 #define TRUE 1 @@ -236,7 +252,7 @@ lmp_print(register const u_char *pptr, register u_int len) { const u_char *tptr,*obj_tptr; u_short tlen,lmp_obj_len,lmp_obj_ctype,obj_tlen; int hexdump; - + tptr=pptr; lmp_com_header = (const struct lmp_common_header *)pptr; TCHECK(*lmp_com_header); @@ -385,12 +401,86 @@ lmp_print(register const u_char *pptr, register u_int len) { */ case LMP_OBJ_CONFIG: + switch(lmp_obj_ctype) { + case LMP_CTYPE_HELLO_CONFIG: + printf("\n\t Hello Interval: %u\n\t Hello Dead Interval: %u", + EXTRACT_16BITS(obj_tptr), + EXTRACT_16BITS(obj_tptr+2)); + break; + + default: + hexdump=TRUE; + } + break; + case LMP_OBJ_HELLO: + switch(lmp_obj_ctype) { + case LMP_CTYPE_HELLO: + printf("\n\t TxSeqNum: %u\n\t RcvSeqNum: %u", + EXTRACT_32BITS(obj_tptr), + EXTRACT_32BITS(obj_tptr+4)); + break; + + default: + hexdump=TRUE; + } + break; + + case LMP_OBJ_TE_LINK: + printf("\n\t Flags: [%s]", + bittok2str(lmp_obj_te_link_flag_values, + "none", + EXTRACT_16BITS(obj_tptr)>>8)); + + switch(lmp_obj_ctype) { + case LMP_CTYPE_IPV4: + printf("\n\t Local Link-ID: %s (0x%08x) \ + \n\t Remote Link-ID: %s (0x%08x)", + ipaddr_string(obj_tptr+4), + EXTRACT_32BITS(obj_tptr+4), + ipaddr_string(obj_tptr+8), + EXTRACT_32BITS(obj_tptr+8)); + break; + +#ifdef INET6 + case LMP_CTYPE_IPV6: +#endif + case LMP_CTYPE_UNMD: + default: + hexdump=TRUE; + } + break; + + case LMP_OBJ_DATA_LINK: + printf("\n\t Flags: [%s]", + bittok2str(lmp_obj_data_link_flag_values, + "none", + EXTRACT_16BITS(obj_tptr)>>8)); + + switch(lmp_obj_ctype) { + case LMP_CTYPE_IPV4: + case LMP_CTYPE_UNMD: + printf("\n\t Local Interface ID: %s (0x%08x) \ + \n\t Remote Interface ID: %s (0x%08x)", + ipaddr_string(obj_tptr+4), + EXTRACT_32BITS(obj_tptr+4), + ipaddr_string(obj_tptr+8), + EXTRACT_32BITS(obj_tptr+8)); + + /* FIXME: Missing Data link Subobjects decoder */ + + break; +#ifdef INET6 + case LMP_CTYPE_IPV6: +#endif + default: + hexdump=TRUE; + } + break; + case LMP_OBJ_VERIFY_BEGIN: case LMP_OBJ_VERIFY_BEGIN_ACK: case LMP_OBJ_VERIFY_ID: - case LMP_OBJ_TE_LINK: - case LMP_OBJ_DATA_LINK: case LMP_OBJ_CHANNEL_STATUS: case LMP_OBJ_CHANNEL_STATUS_REQ: case LMP_OBJ_ERROR_CODE: |