From: hannes Date: Wed, 27 Jul 2005 09:01:03 +0000 (+0000) Subject: -share some code between the FRF.15 and FRF.16 printer X-Git-Tag: tcpdump-4.0.0~353 X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/84fcf28a11255c922bc13d5e86f909700a5b3941?ds=sidebyside -share some code between the FRF.15 and FRF.16 printer -display B, E & C header flags in the FRF.16 printer -evaluate the correct data [!flags] in the FRF.15 printer for deciding if the frame is a end-to-end frag or an interface frag --- diff --git a/print-fr.c b/print-fr.c index e651ff28..43af22b2 100644 --- a/print-fr.c +++ b/print-fr.c @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#)$Header: /tcpdump/master/tcpdump/print-fr.c,v 1.43 2005-07-27 00:25:58 guy Exp $ (LBL)"; + "@(#)$Header: /tcpdump/master/tcpdump/print-fr.c,v 1.44 2005-07-27 09:01:03 hannes Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -82,6 +82,20 @@ struct tok fr_header_flag_values[] = { { 0, NULL } }; +/* FRF.15 / FRF.16 */ +#define MFR_B_BIT 0x80 +#define MFR_E_BIT 0x40 +#define MFR_C_BIT 0x20 +#define MFR_BEC_MASK (MFR_B_BIT | MFR_E_BIT | MFR_C_BIT) +#define MFR_CTRL_FRAME (MFR_B_BIT | MFR_E_BIT | MFR_C_BIT) +#define MFR_FRAG_FRAME (MFR_B_BIT | MFR_E_BIT ) + +struct tok frf_flag_values[] = { + { MFR_B_BIT, "Begin" }, + { MFR_E_BIT, "End" }, + { MFR_C_BIT, "Control" }, + { 0, NULL } +}; /* Finds out Q.922 address length, DLCI and flags. Returns 0 on success * save the flags dep. on address length @@ -304,13 +318,6 @@ fr_print(register const u_char *p, u_int length) } -#define MFR_B_BIT 0x80 -#define MFR_E_BIT 0x40 -#define MFR_C_BIT 0x20 -#define MFR_BEC_MASK (MFR_B_BIT | MFR_E_BIT | MFR_C_BIT) -#define MFR_CTRL_FRAME (MFR_B_BIT | MFR_E_BIT | MFR_C_BIT) -#define MFR_FRAG_FRAME (MFR_B_BIT | MFR_E_BIT ) - #define MFR_CTRL_MSG_ADD_LINK 1 #define MFR_CTRL_MSG_ADD_LINK_ACK 2 #define MFR_CTRL_MSG_ADD_LINK_REJ 3 @@ -379,7 +386,8 @@ mfr_print(register const u_char *p, u_int length) TCHECK2(*p, 4); /* minimum frame header length */ if ((p[0] & MFR_BEC_MASK) == MFR_CTRL_FRAME && p[1] == 0) { - printf("FRF.16 Control, %s, length %u", + printf("FRF.16 Control, Flags [%s], %s, length %u", + bittok2str(frf_flag_values,"none",(p[0] & MFR_BEC_MASK)), tok2str(mfr_ctrl_msg_values,"Unknown Message (0x%02x)",p[2]), length); tptr = p + 3; @@ -473,7 +481,9 @@ mfr_print(register const u_char *p, u_int length) if ((p[0] & MFR_BEC_MASK) == MFR_FRAG_FRAME) { sequence_num = (p[0]&0x1e)<<7 | p[1]; if (eflag) - printf("FRF.16 Frag, seq %u, ", sequence_num); + printf("FRF.16 Frag, seq %u, Flags [%s], ", + sequence_num, + bittok2str(frf_flag_values,"none",(p[0] & MFR_BEC_MASK))); hdr_len = 2; fr_print(p+hdr_len,length-hdr_len); } @@ -500,13 +510,6 @@ mfr_print(register const u_char *p, u_int length) * +----+----+----+----+----+----+----+----+ */ -struct tok frf15_flag_values[] = { - { 0x80, "Begin" }, - { 0x40, "End" }, - { 0x20, "Control" }, - { 0, NULL } -}; - #define FR_FRF15_FRAGTYPE 0x01 static void @@ -514,13 +517,13 @@ frf15_print (const u_char *p, u_int length) { u_int16_t sequence_num, flags; - flags = p[0]&0xe0; + flags = p[0]&MFR_BEC_MASK; sequence_num = (p[0]&0x1e)<<7 | p[1]; printf("FRF.15, seq 0x%03x, Flags [%s],%s Fragmentation, length %u", sequence_num, - bittok2str(frf15_flag_values,"none",flags), - flags&FR_FRF15_FRAGTYPE ? "Interface" : "End-to-End", + bittok2str(frf_flag_values,"none",flags), + p[0]&FR_FRF15_FRAGTYPE ? "Interface" : "End-to-End", length); /* TODO: