diff options
author | Bill Meier <wmeier@newsguy.com> | 2011-04-28 14:38:29 +0000 |
---|---|---|
committer | Bill Meier <wmeier@newsguy.com> | 2011-04-28 14:38:29 +0000 |
commit | 8f0f8a5435cfb04a930c245d3b8f95f47f411637 (patch) | |
tree | 905e63c8e4556364d52af43bcb5a0a81018fb725 /epan/dissectors/packet-mux27010.c | |
parent | 1648ab23e9e4ec1586fbb416c2a178dfc2d6d6d1 (diff) |
#include <stdio.h> not req'd;
Define all internal fcns as static;
fragment_table_init() & reassembled_table_init() need to be
called form a registered_init fcn;
proto_register... and proto_reg_handoff should be at the end of the file as
per Wireshark convention;
proto_reg_handoff .... doesn't need 'if (initialized)...';
proto_register... doesn't need 'if (proto_mux27010 == -1)...'
svn path=/trunk/; revision=36935
Diffstat (limited to 'epan/dissectors/packet-mux27010.c')
-rw-r--r-- | epan/dissectors/packet-mux27010.c | 642 |
1 files changed, 327 insertions, 315 deletions
diff --git a/epan/dissectors/packet-mux27010.c b/epan/dissectors/packet-mux27010.c index 47546243ed..7795d6521b 100644 --- a/epan/dissectors/packet-mux27010.c +++ b/epan/dissectors/packet-mux27010.c @@ -23,7 +23,6 @@ # include "config.h" #endif -#include <stdio.h> #include <glib.h> #include <epan/packet.h> #include <epan/reassemble.h> @@ -37,67 +36,67 @@ #define MUX27010_EXTENDED_HEADER_NOT_ENDED 0x01 /*Address flags*/ -#define MUX27010_DLCI_ADDRESS_FLAG 0xFC -#define MUX27010_EA_ADDRESS_FLAG 0x01 -#define MUX27010_CR_ADDRESS_FLAG 0x02 +#define MUX27010_DLCI_ADDRESS_FLAG 0xFC +#define MUX27010_EA_ADDRESS_FLAG 0x01 +#define MUX27010_CR_ADDRESS_FLAG 0x02 /*Control flags*/ -#define MUX27010_FRAMETYPE_CONTROL_FLAG 0xEF -#define MUX27010_FRAMETYPE_CONTROL_FLAG_SABM 0x2F -#define MUX27010_FRAMETYPE_CONTROL_FLAG_UA 0x63 -#define MUX27010_FRAMETYPE_CONTROL_FLAG_DM 0x0F -#define MUX27010_FRAMETYPE_CONTROL_FLAG_DISC 0x43 -#define MUX27010_FRAMETYPE_CONTROL_FLAG_UIH 0xEF -#define MUX27010_PF_CONTROL_FLAG 0x10 -#define MUX27010_FRAMETYPE_CONTROL_FLAG_UIH_E 0x00 -#define MUX27010_FRAMETYPE_CONTROL_FLAG_RR 0x01 -#define MUX27010_FRAMETYPE_CONTROL_FLAG_RNR 0x05 -#define MUX27010_FRAMETYPE_CONTROL_FLAG_REJ 0x09 -#define MUX27010_FRAMETYPE_CONTROL_FLAG_NS 0x0E -#define MUX27010_FRAMETYPE_CONTROL_FLAG_NR 0xE0 -#define MUX27010_FRAMETYPE_CONTROL_FLAG_NOT_GREATER_THEN_7 0x07 +#define MUX27010_FRAMETYPE_CONTROL_FLAG 0xEF +#define MUX27010_FRAMETYPE_CONTROL_FLAG_SABM 0x2F +#define MUX27010_FRAMETYPE_CONTROL_FLAG_UA 0x63 +#define MUX27010_FRAMETYPE_CONTROL_FLAG_DM 0x0F +#define MUX27010_FRAMETYPE_CONTROL_FLAG_DISC 0x43 +#define MUX27010_FRAMETYPE_CONTROL_FLAG_UIH 0xEF +#define MUX27010_PF_CONTROL_FLAG 0x10 +#define MUX27010_FRAMETYPE_CONTROL_FLAG_UIH_E 0x00 +#define MUX27010_FRAMETYPE_CONTROL_FLAG_RR 0x01 +#define MUX27010_FRAMETYPE_CONTROL_FLAG_RNR 0x05 +#define MUX27010_FRAMETYPE_CONTROL_FLAG_REJ 0x09 +#define MUX27010_FRAMETYPE_CONTROL_FLAG_NS 0x0E +#define MUX27010_FRAMETYPE_CONTROL_FLAG_NR 0xE0 +#define MUX27010_FRAMETYPE_CONTROL_FLAG_NOT_GREATER_THEN_7 0x07 /*Length*/ -#define MUX27010_EA_LENGTH_FLAG 0x01 -#define MUX27010_FRAMESIZE_LENGTH_FLAG 0xFE -#define MUX27010_FRAMESIZE_LENGTH_FLAG_EA 0xFFFE +#define MUX27010_EA_LENGTH_FLAG 0x01 +#define MUX27010_FRAMESIZE_LENGTH_FLAG 0xFE +#define MUX27010_FRAMESIZE_LENGTH_FLAG_EA 0xFFFE /*Control Channel*/ -#define MUX27010_EA_CONTROLCHANNEL_FRAMETYPE_FLAG 0x01 -#define MUX27010_CR_CONTROLCHANNEL_FRAMETYPE_FLAG 0x02 -#define MUX27010_COMMAND_CONTROLCHANNEL_FRAMETYPE_FLAG 0xFC -#define MUX27010_EA_CONTROLCHANNEL_LENGTH_FLAG 0x01 -#define MUX27010_LENGTHFIELD_CONTROLCHANNEL_LENGTH_FLAG 0xFE -#define MUX27010_VALUE_CONTROLCHANNEL_TEST_VERSION 0xFF -#define MUX27010_VALUE_CONTROLCHANNEL_TEST_IEI_TE 0x04 -#define MUX27010_VALUE_CONTROLCHANNEL_TEST_IEI_MS 0x08 -#define MUX27010_VALUE_CONTROLCHANNEL_MSC_DCLI 0xFC -#define MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_FC 0x02 -#define MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_RTC 0x04 -#define MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_RTR 0x08 -#define MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_RING 0x40 -#define MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_DCD 0x80 -#define MUX27010_VALUE_CONTROLCHANNEL_PN_DLCI 0x3F -#define MUX27010_VALUE_CONTROLCHANNEL_PN_FRAMETYPE 0x0F -#define MUX27010_VALUE_CONTROLCHANNEL_PN_CL 0xF0 -#define MUX27010_VALUE_CONTROLCHANNEL_PN_PRIO 0x3F -#define MUX27010_VALUE_CONTROLCHANNEL_PN_WINSIZE 0x07 +#define MUX27010_EA_CONTROLCHANNEL_FRAMETYPE_FLAG 0x01 +#define MUX27010_CR_CONTROLCHANNEL_FRAMETYPE_FLAG 0x02 +#define MUX27010_COMMAND_CONTROLCHANNEL_FRAMETYPE_FLAG 0xFC +#define MUX27010_EA_CONTROLCHANNEL_LENGTH_FLAG 0x01 +#define MUX27010_LENGTHFIELD_CONTROLCHANNEL_LENGTH_FLAG 0xFE +#define MUX27010_VALUE_CONTROLCHANNEL_TEST_VERSION 0xFF +#define MUX27010_VALUE_CONTROLCHANNEL_TEST_IEI_TE 0x04 +#define MUX27010_VALUE_CONTROLCHANNEL_TEST_IEI_MS 0x08 +#define MUX27010_VALUE_CONTROLCHANNEL_MSC_DCLI 0xFC +#define MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_FC 0x02 +#define MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_RTC 0x04 +#define MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_RTR 0x08 +#define MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_RING 0x40 +#define MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_DCD 0x80 +#define MUX27010_VALUE_CONTROLCHANNEL_PN_DLCI 0x3F +#define MUX27010_VALUE_CONTROLCHANNEL_PN_FRAMETYPE 0x0F +#define MUX27010_VALUE_CONTROLCHANNEL_PN_CL 0xF0 +#define MUX27010_VALUE_CONTROLCHANNEL_PN_PRIO 0x3F +#define MUX27010_VALUE_CONTROLCHANNEL_PN_WINSIZE 0x07 /*Command pattern - set C/R bit to 1*/ -#define MUX27010_COMMAND_MULTIPLEXER_CLOSEDOWN 0xC3 /*11000011*/ -#define MUX27010_COMMAND_TEST_COMMAND 0x23 /*00100011*/ -#define MUX27010_COMMAND_POWER_SAVING_CONTROL 0x43 /*01000011*/ -#define MUX27010_COMMAND_NON_SUPPORTED_COMMAND_REPSONSE 0x13 /*00010011*/ -#define MUX27010_COMMAND_MODEM_STATUS_COMMAND 0xE3 /*00010011*/ -#define MUX27010_COMMAND_PARAMETER_NEGOTIATION 0x83 /*10000011*/ +#define MUX27010_COMMAND_MULTIPLEXER_CLOSEDOWN 0xC3 /*11000011*/ +#define MUX27010_COMMAND_TEST_COMMAND 0x23 /*00100011*/ +#define MUX27010_COMMAND_POWER_SAVING_CONTROL 0x43 /*01000011*/ +#define MUX27010_COMMAND_NON_SUPPORTED_COMMAND_REPSONSE 0x13 /*00010011*/ +#define MUX27010_COMMAND_MODEM_STATUS_COMMAND 0xE3 /*00010011*/ +#define MUX27010_COMMAND_PARAMETER_NEGOTIATION 0x83 /*10000011*/ /* Wireshark ID of the MUX27010 protocol */ static int proto_mux27010 = -1; /* Handles of subdissectors */ -static dissector_handle_t ppp_handle=NULL; +static dissector_handle_t ppp_handle; static dissector_handle_t mux27010_handle; void dissect_mux27010(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); @@ -285,7 +284,7 @@ static gint ett_msg_fragments = -1; /* Reassembled in field */ &hf_msg_reassembled_in, /* Reassembled length field */ - &hf_msg_reassembled_length, + &hf_msg_reassembled_length, /* Tag */ "Message fragments" }; @@ -294,24 +293,9 @@ static GHashTable *msg_fragment_table = NULL; static GHashTable *msg_reassembled_table = NULL; -/*Initialize dissector*/ -void proto_reg_handoff_mux27010(void) -{ - static gboolean initialized=FALSE; - - if (!initialized) { - /*Initialization of dissector*/ - mux27010_handle = create_dissector_handle(dissect_mux27010, proto_mux27010); - dissector_add_uint("wtap_encap", WTAP_ENCAP_MUX27010, mux27010_handle); - initialized = TRUE; - - ppp_handle = find_dissector("ppp"); - } - -} - -void getExtendedHeader(tvbuff_t *tvb, proto_tree *field_tree){ +static void +getExtendedHeader(tvbuff_t *tvb, proto_tree *field_tree){ sizeMuxPPPHeader = tvb_get_guint8(tvb, offset); proto_tree_add_item(field_tree, hf_mux27010_extended_header_size, tvb, offset, 1, FALSE); @@ -405,7 +389,8 @@ void getExtendedHeader(tvbuff_t *tvb, proto_tree *field_tree){ /*Get the direction of the actual packet*/ -void getFrameDirection(tvbuff_t *tvb, proto_tree *field_tree){ +static void +getFrameDirection(tvbuff_t *tvb, proto_tree *field_tree){ /*Direction is coded in the first byte of the frame*/ direction_in_out = tvb_get_guint8(tvb, offset); @@ -439,7 +424,8 @@ void getFrameDirection(tvbuff_t *tvb, proto_tree *field_tree){ /*Get the address of the actual frame*/ -void getFrameAddress(tvbuff_t *tvb, proto_tree *field_tree_addr){ +static void +getFrameAddress(tvbuff_t *tvb, proto_tree *field_tree_addr){ /*Get the DCLI number of the frame >> overwrite other bits (E/A, CR) >> shift*/ dlci_number = tvb_get_guint8(tvb, offset); @@ -469,7 +455,8 @@ void getFrameAddress(tvbuff_t *tvb, proto_tree *field_tree_addr){ /*Get frame data from control field*/ -void getFrameControlData(tvbuff_t *tvb, proto_tree *field_tree){ +static void +getFrameControlData(tvbuff_t *tvb, proto_tree *field_tree){ /*Get the type of frame*/ frame_type = tvb_get_guint8(tvb, offset); @@ -581,7 +568,8 @@ void getFrameControlData(tvbuff_t *tvb, proto_tree *field_tree){ /*Get frame data from length field*/ -void getFrameLength(tvbuff_t *tvb, proto_tree *field_tree){ +static void +getFrameLength(tvbuff_t *tvb, proto_tree *field_tree){ /*Get the E/A bit*/ length_ea = tvb_get_guint8(tvb, offset); @@ -624,7 +612,8 @@ void getFrameLength(tvbuff_t *tvb, proto_tree *field_tree){ /*Get frame type of control channel frame*/ -void getControlChannelFrameType(tvbuff_t *tvb, proto_tree *field_tree_ctr){ +static void +getControlChannelFrameType(tvbuff_t *tvb, proto_tree *field_tree_ctr){ /*Get the E/A bit*/ controlchannel_type_ea = tvb_get_guint8(tvb, offset); @@ -702,7 +691,8 @@ void getControlChannelFrameType(tvbuff_t *tvb, proto_tree *field_tree_ctr){ /*Get length of control channel info field*/ -void getControlChannelLength(tvbuff_t *tvb, proto_tree *field_tree_ctr) { +static void +getControlChannelLength(tvbuff_t *tvb, proto_tree *field_tree_ctr) { /*Get the E/A bit*/ controlchannel_length_ea = tvb_get_guint8(tvb, offset); @@ -736,7 +726,8 @@ void getControlChannelLength(tvbuff_t *tvb, proto_tree *field_tree_ctr) { /*Get values of control channel*/ -void getControlChannelValues(tvbuff_t *tvb, proto_tree *field_tree_ctr){ +static void +getControlChannelValues(tvbuff_t *tvb, proto_tree *field_tree_ctr){ /*Command pattern for Test Command (C/R is set to 1)*/ if ((controlchannel_type_command | MUX27010_EA_CONTROLCHANNEL_FRAMETYPE_FLAG | MUX27010_CR_CONTROLCHANNEL_FRAMETYPE_FLAG) == MUX27010_COMMAND_TEST_COMMAND){ @@ -803,7 +794,8 @@ void getControlChannelValues(tvbuff_t *tvb, proto_tree *field_tree_ctr){ /*Get values information field*/ -void getFrameInformation(tvbuff_t *tvb, proto_tree *field_tree){ +static void +getFrameInformation(tvbuff_t *tvb, proto_tree *field_tree){ /*Get the data from information field as string*/ information_field = tvb_get_string(tvb,offset,length_info); @@ -843,248 +835,8 @@ void getFrameInformation(tvbuff_t *tvb, proto_tree *field_tree){ -/*Register the protocol*/ -void proto_register_mux27010 (void) -{ - /* A header field is something you can search/filter on. - * - * Create a structure to register fields. It consists of an - * array of hf_register_info structures, each of which are of the format - * {&(field id), {name, abbrev, type, display, strings, bitmask, blurb, HFILL}}. - */ - - - static hf_register_info hf[] = { - /*Extended MUX header (for PPP)*/ - {&hf_mux27010_extended_header, - { "Extended Header", "mux27010.ext_header",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header", HFILL }}, - {&hf_mux27010_extended_header_size, - { "Header Size", "mux27010.ext_header.size",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Size", HFILL }}, - {&hf_mux27010_extended_header_msg_number_I, - { "Message Number I", "mux27010.ext_header.msg_number_I",FT_UINT16, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Message Number I", HFILL }}, - {&hf_mux27010_extended_header_freq_number_I, - { "Frequenz Number I", "mux27010.ext_header.frequenz_number_I",FT_UINT16, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Frequenz Numnber I", HFILL }}, - {&hf_mux27010_extended_header_start_pos_I, - { "Start Position I", "mux27010.ext_header.start_pos_I",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Start Position I", HFILL }}, - {&hf_mux27010_extended_header_start_byte_I, - { " = Start Byte I", "mux27010.ext_header.start_byte_I",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header Start Byte I", HFILL }}, - {&hf_mux27010_extended_header_end_pos_I, - { "End Position I", "mux27010.ext_header.end_byte_I",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header End Position I", HFILL }}, - {&hf_mux27010_extended_header_end_byte_I, - { " = End Byte I", "mux27010.ext_header.end_byte_I",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header End Byte I", HFILL }}, - {&hf_mux27010_extended_header_flag_ended_I, - { "Flag Ended I", "mux27010.ext_header.flag_ended_I",FT_UINT8, BASE_HEX, NULL, MUX27010_EXTENDED_HEADER_NOT_ENDED, "MUX27010 Extended Header Flag Ended", HFILL }}, - - {&hf_mux27010_extended_header_msg_number_II, - { "Message Number II", "mux27010.ext_header.msg_number_II",FT_UINT16, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Message Number I", HFILL }}, - {&hf_mux27010_extended_header_freq_number_II, - { "Frequenz Number II", "mux27010.ext_header.frequenz_number_II",FT_UINT16, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Frequenz Numnber I", HFILL }}, - {&hf_mux27010_extended_header_start_pos_II, - { "Start Position II", "mux27010.ext_header.start_pos_II",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Start Position I", HFILL }}, - {&hf_mux27010_extended_header_start_byte_II, - { " = Start Byte II", "mux27010.ext_header.start_byte_II",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header Start Byte I", HFILL }}, - {&hf_mux27010_extended_header_end_pos_II, - { "End Position II", "mux27010.ext_header.end_byte_II",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header End Position I", HFILL }}, - {&hf_mux27010_extended_header_end_byte_II, - { " = End Byte II", "mux27010.ext_header.end_byte_II",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header End Byte I", HFILL }}, - {&hf_mux27010_extended_header_flag_ended_II, - { "Flag Ended II", "mux27010.ext_header.flag_ended_II",FT_UINT8, BASE_HEX, NULL, MUX27010_EXTENDED_HEADER_NOT_ENDED, "MUX27010 Extended Header Flag Ended", HFILL }}, - - {&hf_mux27010_extended_header_msg_number_III, - { "Message Number III", "mux27010.ext_header.msg_number_III",FT_UINT16, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Message Number I", HFILL }}, - {&hf_mux27010_extended_header_freq_number_III, - { "Frequenz Number III", "mux27010.ext_header.frequenz_number_III",FT_UINT16, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Frequenz Numnber I", HFILL }}, - {&hf_mux27010_extended_header_start_pos_III, - { "Start Position III", "mux27010.ext_header.start_pos_III",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Start Position I", HFILL }}, - {&hf_mux27010_extended_header_start_byte_III, - { " = Start Byte III", "mux27010.ext_header.start_byte_III",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header Start Byte I", HFILL }}, - {&hf_mux27010_extended_header_end_pos_III, - { "End Position III", "mux27010.ext_header.end_byte_III",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header End Position I", HFILL }}, - {&hf_mux27010_extended_header_end_byte_III, - { " = End Byte III", "mux27010.ext_header.end_byte_III",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header End Byte I", HFILL }}, - {&hf_mux27010_extended_header_flag_ended_III, - { "Flag Ended III", "mux27010.ext_header.flag_ended_III",FT_UINT8, BASE_HEX, NULL, MUX27010_EXTENDED_HEADER_NOT_ENDED, "MUX27010 Extended Header Flag Ended", HFILL }}, - - - /*Direction*/ - {&hf_mux27010_direction, - { "Direction", "mux27010.direction",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Frame Direction", HFILL }}, - - /*Flag*/ - {&hf_mux27010, - { "Flag", "mux27010.flag",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX PDU", HFILL }}, - - /*Address frame*/ - { &hf_mux27010_address, - { "Address field", "mux27010.address", FT_UINT8, BASE_HEX, NULL, 0x0,"MUX27010 Address", HFILL }}, - { &hf_mux27010_dlciaddressflag, - { "DLCI number (decimal)", "mux27010.address.dlciaddress", FT_UINT8, BASE_DEC, NULL, MUX27010_DLCI_ADDRESS_FLAG, NULL, HFILL }}, - { &hf_mux27010_eaaddressflag, - { "EA Address Flag", "mux27010.address.eaaddress", FT_BOOLEAN, 8, NULL, MUX27010_EA_ADDRESS_FLAG, NULL, HFILL }}, - { &hf_mux27010_craddressflag, - { "C/R Address Flag", "mux27010.address.craddress", FT_BOOLEAN, 8, NULL, MUX27010_CR_ADDRESS_FLAG, NULL, HFILL }}, - { &hf_mux27010_addressdirection, - { "Direction", "mux27010.address.direction", FT_UINT8, BASE_HEX, NULL, MUX27010_CR_ADDRESS_FLAG, NULL, HFILL }}, - - /*Control frame*/ - { &hf_mux27010_control, - { "Control field", "mux27010.control", FT_UINT8, BASE_HEX, NULL, 0x0,"MUX27010 Control", HFILL }}, - { &hf_mux27010_controlframetype, - { "Frame Type", "mux27010.control.frametype", FT_UINT8, BASE_HEX, NULL, MUX27010_FRAMETYPE_CONTROL_FLAG, NULL, HFILL }}, - { &hf_mux27010_controlframetypens, - { "N(S) Sequence Number", "mux27010.control.frametype.ns", FT_UINT8, BASE_DEC, NULL, MUX27010_FRAMETYPE_CONTROL_FLAG_NS, NULL, HFILL }}, - { &hf_mux27010_controlframetypenr, - { "N(R) Receive Number", "mux27010.control.frametype.nr", FT_UINT8, BASE_DEC, NULL, MUX27010_FRAMETYPE_CONTROL_FLAG_NR, NULL, HFILL }}, - { &hf_mux27010_pfcontrolflag, - { "Poll/Final bit", "mux27010.control.pfcontrol", FT_UINT8, BASE_DEC, NULL, MUX27010_PF_CONTROL_FLAG, NULL, HFILL }}, - - /*Length frame*/ - { &hf_mux27010_length, - { "Length field", "mux27010.length", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Length", HFILL }}, - { &hf_mux27010_ealengthflag, - { "E/A Flag", "mux27010.length.ealength", FT_BOOLEAN, 8, NULL, MUX27010_EA_LENGTH_FLAG, NULL, HFILL }}, - { &hf_mux27010_lengthframesize_ea, - { "Frame Size", "mux27010.length.framesize_ea", FT_UINT16, BASE_DEC, NULL, MUX27010_FRAMESIZE_LENGTH_FLAG_EA, NULL, HFILL }}, - { &hf_mux27010_lengthframesize, - { "Frame Size", "mux27010.length.framesize", FT_UINT8, BASE_DEC, NULL, MUX27010_FRAMESIZE_LENGTH_FLAG, NULL, HFILL }}, - /*Control Channel DLCI = 0*/ - { &hf_mux27010_controlchannel, - { "Control Channel", "mux27010.controlchannel", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Control Channel", HFILL }}, - /*Frame Type*/ - { &hf_mux27010_controlchannelframetype, - { "Frame Type", "mux27010.controlchannel.frametype", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Control Channel Frametype", HFILL }}, - { &hf_mux27010_controlchanneleaframetype, - { "EA Flag", "mux27010.controlchannel.frametype.eatype", FT_BOOLEAN, 8, NULL, MUX27010_EA_CONTROLCHANNEL_FRAMETYPE_FLAG, NULL, HFILL }}, - { &hf_mux27010_controlchannelcrframetype, - { "C/R Flag", "mux27010.controlchannel.frametype.crtype", FT_BOOLEAN, 8, NULL, MUX27010_CR_CONTROLCHANNEL_FRAMETYPE_FLAG, NULL, HFILL }}, - { &hf_mux27010_controlchannelframetypecommand, - { "Command Type", "mux27010.controlchannel.frametype.command", FT_UINT8, BASE_HEX, NULL, MUX27010_COMMAND_CONTROLCHANNEL_FRAMETYPE_FLAG, NULL, HFILL }}, - /*Length*/ - { &hf_mux27010_controlchannellength, - { "Length", "mux27010.controlchannel.length", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Control Channel Length", HFILL }}, - { &hf_mux27010_controlchannelealength, - { "EA Flag", "mux27010.controlchannel.length.ealength", FT_BOOLEAN, 8, NULL, MUX27010_EA_CONTROLCHANNEL_LENGTH_FLAG, NULL, HFILL }}, - { &hf_mux27010_controlchannellengthfield, - { "Length field", "mux27010.controlchannel.length.length", FT_UINT8, BASE_DEC, NULL, MUX27010_LENGTHFIELD_CONTROLCHANNEL_LENGTH_FLAG, NULL, HFILL }}, - /*Value*/ - { &hf_mux27010_controlchannelvalue, - { "Value", "mux27010.controlchannel.value", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Control Channel Value", HFILL }}, - { &hf_mux27010_controlchanneldetailedvalue, - { "Detailed Values", "mux27010.controlchannel.value.detailedvalues", FT_UINT8, BASE_HEX, NULL, 0xFF, NULL, HFILL }}, - /*Test Coammand*/ - { &hf_mux27010_controlchanneldetailedvaluetestcommandversion, - { "Version", "mux27010.controlchannel.value.detailedvaluetestcommandversion", FT_UINT8, BASE_HEX, NULL, MUX27010_VALUE_CONTROLCHANNEL_TEST_VERSION, NULL, HFILL }}, - /*Modem Status Command*/ - { &hf_mux27010_controlchanneldetailedvaluemscdlci, - { "DLCI number (decimal)", "mux27010.controlchannel.value.detailedvaluemscdlci", FT_UINT8, BASE_DEC, NULL, MUX27010_VALUE_CONTROLCHANNEL_MSC_DCLI, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluemscv24, - { "V.24 Signal", "mux27010.controlchannel.value.detailedvaluemscv24", FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Control Channel MSC V.24 Signals", HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluemscv24fc, - { "FC", "mux27010.controlchannel.value.detailedvaluemscv24.fc", FT_BOOLEAN, 8, NULL, MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_FC, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluemscv24rtc, - { "RTC", "mux27010.controlchannel.value.detailedvaluemscv24.rtc", FT_BOOLEAN, 8, NULL, MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_RTC, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluemscv24rtr, - { "RTR", "mux27010.controlchannel.value.detailedvaluemscv24.rtr", FT_BOOLEAN, 8, NULL, MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_RTR, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluemscv24ring, - { "RING", "mux27010.controlchannel.value.detailedvaluemscv24.ring", FT_BOOLEAN, 8, NULL, MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_RING, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluemscv24dcd, - { "DCD", "mux27010.controlchannel.value.detailedvaluemscv24.dcd", FT_BOOLEAN, 8, NULL, MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_DCD, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluemscbreak, - { "Break Signal", "mux27010.controlchannel.value.detailedvaluemscbreak", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, - /*Parameter Negotation*/ - { &hf_mux27010_controlchanneldetailedvaluepndlci, - { "DLCI", "mux27010.controlchannel.value.detailedvaluepndlci", FT_UINT8, BASE_DEC, NULL, MUX27010_VALUE_CONTROLCHANNEL_PN_DLCI, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluepnframetype, - { "Frame Type", "mux27010.controlchannel.value.detailedvaluepnframetype", FT_UINT8, BASE_HEX, NULL, MUX27010_VALUE_CONTROLCHANNEL_PN_FRAMETYPE, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluepncl, - { "Convergence Layer", "mux27010.controlchannel.value.detailedvaluepncl", FT_UINT8, BASE_DEC, NULL, MUX27010_VALUE_CONTROLCHANNEL_PN_CL, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluepnprio, - { "Priority", "mux27010.controlchannel.value.detailedvaluepnprio", FT_UINT8, BASE_DEC, NULL, MUX27010_VALUE_CONTROLCHANNEL_PN_PRIO, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluepntimer, - { "Acknowledgment Timer (ms)", "mux27010.controlchannel.value.detailedvaluepntimer", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluepnframesize, - { "Max. Frame Size", "mux27010.controlchannel.value.detailedvaluepnframesize", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluepnna, - { "Max. Number of Retransmissions", "mux27010.controlchannel.value.detailedvaluepnna", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, - { &hf_mux27010_controlchanneldetailedvaluepnwinsize, - { "Window Size for Error Recovery Mode", "mux27010.controlchannel.value.detailedvaluepnwinsize", FT_UINT8, BASE_DEC, NULL, MUX27010_VALUE_CONTROLCHANNEL_PN_WINSIZE, NULL, HFILL }}, - /*Information frame*/ - { &hf_mux27010_information, - { "Information field", "mux27010.information", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Information", HFILL }}, - /*Checksum frame*/ - { &hf_mux27010_checksum, - { "Checksum", "mux27010.checksum", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Checksum", HFILL }}, - - {&hf_msg_fragments, - {"Message fragments", "mux27010.fragments", - FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } }, - {&hf_msg_fragment, - {"Message fragment", "mux27010.fragment", - FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } }, - {&hf_msg_fragment_overlap, - {"Message fragment overlap", "mux27010.fragment.overlap", - FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } }, - {&hf_msg_fragment_overlap_conflicts, - {"Message fragment overlapping with conflicting data", - "mux27010.fragment.overlap.conflicts", - FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } }, - {&hf_msg_fragment_multiple_tails, - {"Message has multiple tail fragments", - "mux27010.fragment.multiple_tails", - FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } }, - {&hf_msg_fragment_too_long_fragment, - {"Message fragment too long", "mux27010.fragment.too_long_fragment", - FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } }, - {&hf_msg_fragment_error, - {"Message defragmentation error", "mux27010.fragment.error", - FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } }, - {&hf_msg_fragment_count, - {"Message fragment count", "mux27010.fragment.count", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } }, - {&hf_msg_reassembled_in, - {"Reassembled in", "mux27010.reassembled.in", - FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } }, - {&hf_msg_reassembled_length, - {"Reassembled length", "mux27010.reassembled.length", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } }, - }; - - - /* Setup protocol subtree array */ - static gint *ett[] = { - &ett_mux27010_extended_header, - &ett_mux27010, - &ett_mux27010_address, - &ett_mux27010_control, - &ett_mux27010_length, - &ett_mux27010_controlchannel, - &ett_mux27010_controlchannelframetype, - &ett_mux27010_controlchannellength, - &ett_mux27010_controlchannelvalue, - &ett_mux27010_information, - &ett_mux27010_checksum, - &ett_msg_fragment, - &ett_msg_fragments - }; - - /*Register protocoll*/ - if (proto_mux27010 == -1) { - proto_mux27010 = proto_register_protocol ("MUX27010 Protocol", "MUX27010", "mux27010"); - } - - /*Register arrays*/ - proto_register_field_array (proto_mux27010, hf, array_length (hf)); - proto_register_subtree_array (ett, array_length (ett)); - register_dissector("mux27010", dissect_mux27010, proto_mux27010); - - fragment_table_init(&msg_fragment_table); - reassembled_table_init(&msg_reassembled_table); -} - - - -void +static void dissect_mux27010(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { proto_item *ti = NULL; @@ -1297,7 +1049,7 @@ dissect_mux27010(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) frag_msg = fragment_add_seq_check(tvb, tmpOffsetBegin, pinfo, msg_seqid, /* ID for fragments belonging together */ - msg_fragment_table, /* list of message fragments */ + msg_fragment_table, /* list of message fragments */ msg_reassembled_table, /* list of reassembled messages */ msg_num, /* fragment sequence number */ (tmpOffsetEnd-tmpOffsetBegin)+1, /* fragment length */ @@ -1363,3 +1115,263 @@ dissect_mux27010(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) /*Destination column*/ col_add_str(pinfo->cinfo, COL_DEF_DST, colDestText); } + +static void +mux27010_init(void) +{ + /* + * Initialize the fragment and reassembly tables. + */ + fragment_table_init(&msg_fragment_table); + reassembled_table_init(&msg_reassembled_table); +} + +/*Register the protocol*/ +void +proto_register_mux27010 (void) +{ + /* A header field is something you can search/filter on. + * + * Create a structure to register fields. It consists of an + * array of hf_register_info structures, each of which are of the format + * {&(field id), {name, abbrev, type, display, strings, bitmask, blurb, HFILL}}. + */ + + + static hf_register_info hf[] = { + /*Extended MUX header (for PPP)*/ + {&hf_mux27010_extended_header, + { "Extended Header", "mux27010.ext_header",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header", HFILL }}, + {&hf_mux27010_extended_header_size, + { "Header Size", "mux27010.ext_header.size",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Size", HFILL }}, + {&hf_mux27010_extended_header_msg_number_I, + { "Message Number I", "mux27010.ext_header.msg_number_I",FT_UINT16, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Message Number I", HFILL }}, + {&hf_mux27010_extended_header_freq_number_I, + { "Frequenz Number I", "mux27010.ext_header.frequenz_number_I",FT_UINT16, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Frequenz Numnber I", HFILL }}, + {&hf_mux27010_extended_header_start_pos_I, + { "Start Position I", "mux27010.ext_header.start_pos_I",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Start Position I", HFILL }}, + {&hf_mux27010_extended_header_start_byte_I, + { " = Start Byte I", "mux27010.ext_header.start_byte_I",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header Start Byte I", HFILL }}, + {&hf_mux27010_extended_header_end_pos_I, + { "End Position I", "mux27010.ext_header.end_byte_I",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header End Position I", HFILL }}, + {&hf_mux27010_extended_header_end_byte_I, + { " = End Byte I", "mux27010.ext_header.end_byte_I",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header End Byte I", HFILL }}, + {&hf_mux27010_extended_header_flag_ended_I, + { "Flag Ended I", "mux27010.ext_header.flag_ended_I",FT_UINT8, BASE_HEX, NULL, MUX27010_EXTENDED_HEADER_NOT_ENDED, "MUX27010 Extended Header Flag Ended", HFILL }}, + + {&hf_mux27010_extended_header_msg_number_II, + { "Message Number II", "mux27010.ext_header.msg_number_II",FT_UINT16, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Message Number I", HFILL }}, + {&hf_mux27010_extended_header_freq_number_II, + { "Frequenz Number II", "mux27010.ext_header.frequenz_number_II",FT_UINT16, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Frequenz Numnber I", HFILL }}, + {&hf_mux27010_extended_header_start_pos_II, + { "Start Position II", "mux27010.ext_header.start_pos_II",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Start Position I", HFILL }}, + {&hf_mux27010_extended_header_start_byte_II, + { " = Start Byte II", "mux27010.ext_header.start_byte_II",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header Start Byte I", HFILL }}, + {&hf_mux27010_extended_header_end_pos_II, + { "End Position II", "mux27010.ext_header.end_byte_II",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header End Position I", HFILL }}, + {&hf_mux27010_extended_header_end_byte_II, + { " = End Byte II", "mux27010.ext_header.end_byte_II",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header End Byte I", HFILL }}, + {&hf_mux27010_extended_header_flag_ended_II, + { "Flag Ended II", "mux27010.ext_header.flag_ended_II",FT_UINT8, BASE_HEX, NULL, MUX27010_EXTENDED_HEADER_NOT_ENDED, "MUX27010 Extended Header Flag Ended", HFILL }}, + + {&hf_mux27010_extended_header_msg_number_III, + { "Message Number III", "mux27010.ext_header.msg_number_III",FT_UINT16, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Message Number I", HFILL }}, + {&hf_mux27010_extended_header_freq_number_III, + { "Frequenz Number III", "mux27010.ext_header.frequenz_number_III",FT_UINT16, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Frequenz Numnber I", HFILL }}, + {&hf_mux27010_extended_header_start_pos_III, + { "Start Position III", "mux27010.ext_header.start_pos_III",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header Start Position I", HFILL }}, + {&hf_mux27010_extended_header_start_byte_III, + { " = Start Byte III", "mux27010.ext_header.start_byte_III",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header Start Byte I", HFILL }}, + {&hf_mux27010_extended_header_end_pos_III, + { "End Position III", "mux27010.ext_header.end_byte_III",FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Extended Header End Position I", HFILL }}, + {&hf_mux27010_extended_header_end_byte_III, + { " = End Byte III", "mux27010.ext_header.end_byte_III",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Extended Header End Byte I", HFILL }}, + {&hf_mux27010_extended_header_flag_ended_III, + { "Flag Ended III", "mux27010.ext_header.flag_ended_III",FT_UINT8, BASE_HEX, NULL, MUX27010_EXTENDED_HEADER_NOT_ENDED, "MUX27010 Extended Header Flag Ended", HFILL }}, + + + /*Direction*/ + {&hf_mux27010_direction, + { "Direction", "mux27010.direction",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Frame Direction", HFILL }}, + + /*Flag*/ + {&hf_mux27010, + { "Flag", "mux27010.flag",FT_UINT8, BASE_HEX, NULL, 0x0, "MUX PDU", HFILL }}, + + /*Address frame*/ + { &hf_mux27010_address, + { "Address field", "mux27010.address", FT_UINT8, BASE_HEX, NULL, 0x0,"MUX27010 Address", HFILL }}, + { &hf_mux27010_dlciaddressflag, + { "DLCI number (decimal)", "mux27010.address.dlciaddress", FT_UINT8, BASE_DEC, NULL, MUX27010_DLCI_ADDRESS_FLAG, NULL, HFILL }}, + { &hf_mux27010_eaaddressflag, + { "EA Address Flag", "mux27010.address.eaaddress", FT_BOOLEAN, 8, NULL, MUX27010_EA_ADDRESS_FLAG, NULL, HFILL }}, + { &hf_mux27010_craddressflag, + { "C/R Address Flag", "mux27010.address.craddress", FT_BOOLEAN, 8, NULL, MUX27010_CR_ADDRESS_FLAG, NULL, HFILL }}, + { &hf_mux27010_addressdirection, + { "Direction", "mux27010.address.direction", FT_UINT8, BASE_HEX, NULL, MUX27010_CR_ADDRESS_FLAG, NULL, HFILL }}, + + /*Control frame*/ + { &hf_mux27010_control, + { "Control field", "mux27010.control", FT_UINT8, BASE_HEX, NULL, 0x0,"MUX27010 Control", HFILL }}, + { &hf_mux27010_controlframetype, + { "Frame Type", "mux27010.control.frametype", FT_UINT8, BASE_HEX, NULL, MUX27010_FRAMETYPE_CONTROL_FLAG, NULL, HFILL }}, + { &hf_mux27010_controlframetypens, + { "N(S) Sequence Number", "mux27010.control.frametype.ns", FT_UINT8, BASE_DEC, NULL, MUX27010_FRAMETYPE_CONTROL_FLAG_NS, NULL, HFILL }}, + { &hf_mux27010_controlframetypenr, + { "N(R) Receive Number", "mux27010.control.frametype.nr", FT_UINT8, BASE_DEC, NULL, MUX27010_FRAMETYPE_CONTROL_FLAG_NR, NULL, HFILL }}, + { &hf_mux27010_pfcontrolflag, + { "Poll/Final bit", "mux27010.control.pfcontrol", FT_UINT8, BASE_DEC, NULL, MUX27010_PF_CONTROL_FLAG, NULL, HFILL }}, + + /*Length frame*/ + { &hf_mux27010_length, + { "Length field", "mux27010.length", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Length", HFILL }}, + { &hf_mux27010_ealengthflag, + { "E/A Flag", "mux27010.length.ealength", FT_BOOLEAN, 8, NULL, MUX27010_EA_LENGTH_FLAG, NULL, HFILL }}, + { &hf_mux27010_lengthframesize_ea, + { "Frame Size", "mux27010.length.framesize_ea", FT_UINT16, BASE_DEC, NULL, MUX27010_FRAMESIZE_LENGTH_FLAG_EA, NULL, HFILL }}, + { &hf_mux27010_lengthframesize, + { "Frame Size", "mux27010.length.framesize", FT_UINT8, BASE_DEC, NULL, MUX27010_FRAMESIZE_LENGTH_FLAG, NULL, HFILL }}, + + /*Control Channel DLCI = 0*/ + { &hf_mux27010_controlchannel, + { "Control Channel", "mux27010.controlchannel", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Control Channel", HFILL }}, + /*Frame Type*/ + { &hf_mux27010_controlchannelframetype, + { "Frame Type", "mux27010.controlchannel.frametype", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Control Channel Frametype", HFILL }}, + { &hf_mux27010_controlchanneleaframetype, + { "EA Flag", "mux27010.controlchannel.frametype.eatype", FT_BOOLEAN, 8, NULL, MUX27010_EA_CONTROLCHANNEL_FRAMETYPE_FLAG, NULL, HFILL }}, + { &hf_mux27010_controlchannelcrframetype, + { "C/R Flag", "mux27010.controlchannel.frametype.crtype", FT_BOOLEAN, 8, NULL, MUX27010_CR_CONTROLCHANNEL_FRAMETYPE_FLAG, NULL, HFILL }}, + { &hf_mux27010_controlchannelframetypecommand, + { "Command Type", "mux27010.controlchannel.frametype.command", FT_UINT8, BASE_HEX, NULL, MUX27010_COMMAND_CONTROLCHANNEL_FRAMETYPE_FLAG, NULL, HFILL }}, + /*Length*/ + { &hf_mux27010_controlchannellength, + { "Length", "mux27010.controlchannel.length", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Control Channel Length", HFILL }}, + { &hf_mux27010_controlchannelealength, + { "EA Flag", "mux27010.controlchannel.length.ealength", FT_BOOLEAN, 8, NULL, MUX27010_EA_CONTROLCHANNEL_LENGTH_FLAG, NULL, HFILL }}, + { &hf_mux27010_controlchannellengthfield, + { "Length field", "mux27010.controlchannel.length.length", FT_UINT8, BASE_DEC, NULL, MUX27010_LENGTHFIELD_CONTROLCHANNEL_LENGTH_FLAG, NULL, HFILL }}, + /*Value*/ + { &hf_mux27010_controlchannelvalue, + { "Value", "mux27010.controlchannel.value", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Control Channel Value", HFILL }}, + { &hf_mux27010_controlchanneldetailedvalue, + { "Detailed Values", "mux27010.controlchannel.value.detailedvalues", FT_UINT8, BASE_HEX, NULL, 0xFF, NULL, HFILL }}, + /*Test Coammand*/ + { &hf_mux27010_controlchanneldetailedvaluetestcommandversion, + { "Version", "mux27010.controlchannel.value.detailedvaluetestcommandversion", FT_UINT8, BASE_HEX, NULL, MUX27010_VALUE_CONTROLCHANNEL_TEST_VERSION, NULL, HFILL }}, + /*Modem Status Command*/ + { &hf_mux27010_controlchanneldetailedvaluemscdlci, + { "DLCI number (decimal)", "mux27010.controlchannel.value.detailedvaluemscdlci", FT_UINT8, BASE_DEC, NULL, MUX27010_VALUE_CONTROLCHANNEL_MSC_DCLI, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluemscv24, + { "V.24 Signal", "mux27010.controlchannel.value.detailedvaluemscv24", FT_UINT8, BASE_DEC, NULL, 0x0, "MUX27010 Control Channel MSC V.24 Signals", HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluemscv24fc, + { "FC", "mux27010.controlchannel.value.detailedvaluemscv24.fc", FT_BOOLEAN, 8, NULL, MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_FC, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluemscv24rtc, + { "RTC", "mux27010.controlchannel.value.detailedvaluemscv24.rtc", FT_BOOLEAN, 8, NULL, MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_RTC, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluemscv24rtr, + { "RTR", "mux27010.controlchannel.value.detailedvaluemscv24.rtr", FT_BOOLEAN, 8, NULL, MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_RTR, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluemscv24ring, + { "RING", "mux27010.controlchannel.value.detailedvaluemscv24.ring", FT_BOOLEAN, 8, NULL, MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_RING, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluemscv24dcd, + { "DCD", "mux27010.controlchannel.value.detailedvaluemscv24.dcd", FT_BOOLEAN, 8, NULL, MUX27010_VALUE_CONTROLCHANNEL_MSC_V24_DCD, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluemscbreak, + { "Break Signal", "mux27010.controlchannel.value.detailedvaluemscbreak", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, + /*Parameter Negotation*/ + { &hf_mux27010_controlchanneldetailedvaluepndlci, + { "DLCI", "mux27010.controlchannel.value.detailedvaluepndlci", FT_UINT8, BASE_DEC, NULL, MUX27010_VALUE_CONTROLCHANNEL_PN_DLCI, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluepnframetype, + { "Frame Type", "mux27010.controlchannel.value.detailedvaluepnframetype", FT_UINT8, BASE_HEX, NULL, MUX27010_VALUE_CONTROLCHANNEL_PN_FRAMETYPE, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluepncl, + { "Convergence Layer", "mux27010.controlchannel.value.detailedvaluepncl", FT_UINT8, BASE_DEC, NULL, MUX27010_VALUE_CONTROLCHANNEL_PN_CL, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluepnprio, + { "Priority", "mux27010.controlchannel.value.detailedvaluepnprio", FT_UINT8, BASE_DEC, NULL, MUX27010_VALUE_CONTROLCHANNEL_PN_PRIO, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluepntimer, + { "Acknowledgment Timer (ms)", "mux27010.controlchannel.value.detailedvaluepntimer", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluepnframesize, + { "Max. Frame Size", "mux27010.controlchannel.value.detailedvaluepnframesize", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluepnna, + { "Max. Number of Retransmissions", "mux27010.controlchannel.value.detailedvaluepnna", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, + { &hf_mux27010_controlchanneldetailedvaluepnwinsize, + { "Window Size for Error Recovery Mode", "mux27010.controlchannel.value.detailedvaluepnwinsize", FT_UINT8, BASE_DEC, NULL, MUX27010_VALUE_CONTROLCHANNEL_PN_WINSIZE, NULL, HFILL }}, + /*Information frame*/ + { &hf_mux27010_information, + { "Information field", "mux27010.information", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Information", HFILL }}, + /*Checksum frame*/ + { &hf_mux27010_checksum, + { "Checksum", "mux27010.checksum", FT_UINT8, BASE_HEX, NULL, 0x0, "MUX27010 Checksum", HFILL }}, + + {&hf_msg_fragments, + {"Message fragments", "mux27010.fragments", + FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } }, + {&hf_msg_fragment, + {"Message fragment", "mux27010.fragment", + FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } }, + {&hf_msg_fragment_overlap, + {"Message fragment overlap", "mux27010.fragment.overlap", + FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } }, + {&hf_msg_fragment_overlap_conflicts, + {"Message fragment overlapping with conflicting data", + "mux27010.fragment.overlap.conflicts", + FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } }, + {&hf_msg_fragment_multiple_tails, + {"Message has multiple tail fragments", + "mux27010.fragment.multiple_tails", + FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } }, + {&hf_msg_fragment_too_long_fragment, + {"Message fragment too long", "mux27010.fragment.too_long_fragment", + FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } }, + {&hf_msg_fragment_error, + {"Message defragmentation error", "mux27010.fragment.error", + FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } }, + {&hf_msg_fragment_count, + {"Message fragment count", "mux27010.fragment.count", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } }, + {&hf_msg_reassembled_in, + {"Reassembled in", "mux27010.reassembled.in", + FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } }, + {&hf_msg_reassembled_length, + {"Reassembled length", "mux27010.reassembled.length", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } }, + }; + + + /* Setup protocol subtree array */ + static gint *ett[] = { + &ett_mux27010_extended_header, + &ett_mux27010, + &ett_mux27010_address, + &ett_mux27010_control, + &ett_mux27010_length, + &ett_mux27010_controlchannel, + &ett_mux27010_controlchannelframetype, + &ett_mux27010_controlchannellength, + &ett_mux27010_controlchannelvalue, + &ett_mux27010_information, + &ett_mux27010_checksum, + &ett_msg_fragment, + &ett_msg_fragments + }; + + /*Register protocoll*/ + proto_mux27010 = proto_register_protocol ("MUX27010 Protocol", "MUX27010", "mux27010"); + + /*Register arrays*/ + proto_register_field_array (proto_mux27010, hf, array_length (hf)); + proto_register_subtree_array (ett, array_length (ett)); + register_dissector("mux27010", dissect_mux27010, proto_mux27010); + + register_init_routine(mux27010_init); +} + +/*Initialize dissector*/ +void +proto_reg_handoff_mux27010(void) +{ + /*Initialization of dissector*/ + mux27010_handle = create_dissector_handle(dissect_mux27010, proto_mux27010); + dissector_add_uint("wtap_encap", WTAP_ENCAP_MUX27010, mux27010_handle); + + ppp_handle = find_dissector("ppp"); + +} + |