aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-mux27010.c
diff options
context:
space:
mode:
authorBill Meier <wmeier@newsguy.com>2011-04-28 14:38:29 +0000
committerBill Meier <wmeier@newsguy.com>2011-04-28 14:38:29 +0000
commit8f0f8a5435cfb04a930c245d3b8f95f47f411637 (patch)
tree905e63c8e4556364d52af43bcb5a0a81018fb725 /epan/dissectors/packet-mux27010.c
parent1648ab23e9e4ec1586fbb416c2a178dfc2d6d6d1 (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.c642
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");
+
+}
+