Dissect End-to-End and Link-by-Link messages.
svn path=/trunk/; revision=22560
This commit is contained in:
parent
ee86c4c30e
commit
76a0564376
|
@ -60,7 +60,10 @@ static int hf_dpnss_sic_oct2_net_ind_clk = -1;
|
|||
static int hf_dpnss_sic_oct2_async_data = -1;
|
||||
static int hf_dpnss_sic_oct2_async_flow_ctrl = -1;
|
||||
static int hf_dpnss_clearing_cause = -1;
|
||||
static int hf_dpnss_rejection_cause = -1;
|
||||
static int hf_dpnss_rejection_cause = -1;
|
||||
static int hf_dpnss_man_code = -1;
|
||||
static int hf_dpnss_subcode = -1;
|
||||
static int hf_dpnss_maintenance_action = -1;
|
||||
|
||||
#define DPNNS_MESSAGE_GROUP_CC 0
|
||||
#define DPNNS_MESSAGE_GROUP_E2E 2
|
||||
|
@ -122,6 +125,15 @@ static const value_string dpnss_cc_msg_short_type_vals[] = {
|
|||
{0, NULL }
|
||||
};
|
||||
|
||||
#define DPNSS_E2E_MSG_EEM_C 2
|
||||
#define DPNSS_E2E_MSG_EEM_I 3
|
||||
#define DPNSS_E2E_MSG_SCRM 4
|
||||
#define DPNSS_E2E_MSG_SCIM 5
|
||||
#define DPNSS_E2E_MSG_ERM_C 6
|
||||
#define DPNSS_E2E_MSG_ERM_I 7
|
||||
#define DPNSS_E2E_MSG_NSIM 8
|
||||
|
||||
|
||||
/* 2.2 END-TO-END MESSAGE GROUP */
|
||||
static const value_string dpnss_e2e_msg_type_vals[] = {
|
||||
{2, "END-to-END Message (COMPLETE) - EEM(C)"},
|
||||
|
@ -145,6 +157,13 @@ static const value_string dpnss_e2e_msg_short_type_vals[] = {
|
|||
{ 0, NULL }
|
||||
};
|
||||
|
||||
#define DPNSS_LbL_MSG_LLM_C 0
|
||||
#define DPNSS_LbL_MSG_LLM_I 1
|
||||
#define DPNSS_LbL_MSG_LLRM 2
|
||||
#define DPNSS_LbL_MSG_SM 4
|
||||
#define DPNSS_LbL_MSG_LMM 5
|
||||
#define DPNSS_LbL_MSG_LMRM 6
|
||||
|
||||
/* 2.3 LINK-BY-LINK MESSAGE GROUP */
|
||||
static const value_string dpnss_LbL_msg_type_vals[] = {
|
||||
{0, "LINK-by-LINK Message (COMPLETE) - LLM(C)"},
|
||||
|
@ -326,6 +345,31 @@ static const value_string dpnss_clearing_cause_code_vals[] = {
|
|||
{0x2e, "DTE Uncontrolled Not Ready"},
|
||||
{ 0, NULL }
|
||||
};
|
||||
/* ANNEX 6 : MAINTENANCE ACTIONS (p235) */
|
||||
static const value_string dpnss_maintenance_actions_vals[] = {
|
||||
{0x1, "BBC - Back-Busy Control"},
|
||||
{0x2, "LBC - Loop-Back Control"},
|
||||
{0x3, "LBA - Loop-Back Abort"},
|
||||
{0x4, "TCS-R - Traffic Channel Status Request"},
|
||||
{0x5, "ACK - Acknowledge"},
|
||||
{0x6, "NTC - Non-Looped-Back Test Control"},
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
/* ANNEX 7 : CODING OF USAGE IDENTIFIERS */
|
||||
static const value_string dpnss_man_code_vals[] = {
|
||||
{0x0, "Reserved"},
|
||||
{0x1, "BT"},
|
||||
{0x2, "Ericsson"},
|
||||
{0x3, "Lucent"},
|
||||
{0x4, "Philips"},
|
||||
{0x5, "Siemens"},
|
||||
{0x6, "Westell"},
|
||||
{0x7, "Mitel"},
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
|
||||
static int
|
||||
dissect_dpnss_sic(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
|
||||
{
|
||||
|
@ -448,8 +492,13 @@ dissect_dpnss_sup_info_str(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr
|
|||
static void
|
||||
dissect_dpnss_LbL_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
||||
{
|
||||
proto_item *sic_field_item, *ind_field_item;
|
||||
proto_tree *sic_field_tree, *ind_field_tree;
|
||||
int offset = 0;
|
||||
guint8 octet;
|
||||
int tvb_end_offset;
|
||||
guint8 octet;
|
||||
|
||||
tvb_end_offset = tvb_length(tvb);
|
||||
|
||||
proto_tree_add_item(tree, hf_dpnss_LbL_msg_type, tvb, offset, 1, FALSE);
|
||||
octet = tvb_get_guint8(tvb,offset)&0x0f;
|
||||
|
@ -457,10 +506,70 @@ dissect_dpnss_LbL_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
|||
if(check_col(pinfo->cinfo, COL_INFO))
|
||||
col_add_fstr(pinfo->cinfo, COL_INFO, "%s ",
|
||||
val_to_str(octet, dpnss_LbL_msg_short_type_vals, "Unknown (%d)" ));
|
||||
switch (octet){
|
||||
default:
|
||||
proto_tree_add_text(tree, tvb, offset, 1, "Dissection of this message not supported yet");
|
||||
break;
|
||||
if(tree){
|
||||
switch (octet){
|
||||
case DPNSS_LbL_MSG_LLM_C:
|
||||
/* 2.3.1 LINK-by-LINK Message (COMPLETE) - LLM(C)*/
|
||||
case DPNSS_LbL_MSG_LLM_I:
|
||||
/* 2.3.2 LINK-by-LINK Message (INCOMPLETE) - LLM(I) */
|
||||
/* Indication Field */
|
||||
ind_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Indication Field: %s",tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
|
||||
ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
|
||||
offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
|
||||
break;
|
||||
case DPNSS_LbL_MSG_LLRM:
|
||||
/* 2.3.3 LINK-by-LINK REJECT Message - LLRM */
|
||||
/* Rejection Cause */
|
||||
proto_tree_add_item(tree, hf_dpnss_rejection_cause, tvb, offset, 1, FALSE);
|
||||
/* Indication Field (Optional) */
|
||||
if(tvb_end_offset>offset){
|
||||
ind_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Indication Field: %s",tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
|
||||
ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
|
||||
offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
|
||||
}
|
||||
break;
|
||||
case DPNSS_LbL_MSG_SM:
|
||||
/* 2.3.4 SWAP Message - SM */
|
||||
/* Service Indicator Code
|
||||
* Note: On data calls the SIC may comprise more than one octet.
|
||||
* The Service Indicator Code is coded in accordance with ANNEX 1.
|
||||
*/
|
||||
sic_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Service Indicator Code");
|
||||
sic_field_tree = proto_item_add_subtree(sic_field_item, ett_dpnss_sic_field);
|
||||
offset =dissect_dpnss_sic(tvb, pinfo, sic_field_tree, offset);
|
||||
/* Indication Field */
|
||||
ind_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Indication Field: %s",tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
|
||||
ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
|
||||
offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
|
||||
break;
|
||||
case DPNSS_LbL_MSG_LMM:
|
||||
/* 2.3.5 LINK MAINTENANCE Message - LMM */
|
||||
/* Maintenance Action
|
||||
* respond to a request for,maintenance actions to be performed.
|
||||
* The Maintenance Action field identifies the action required or
|
||||
* the response being made. The Maintenance Action field is coded
|
||||
* as shown in ANNEX 6.
|
||||
*/
|
||||
proto_tree_add_item(tree, hf_dpnss_maintenance_action, tvb, offset, 1, FALSE);
|
||||
offset++;
|
||||
/* Indication Field */
|
||||
ind_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Indication Field: %s",tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
|
||||
ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
|
||||
offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
|
||||
break;
|
||||
case DPNSS_LbL_MSG_LMRM:
|
||||
/* 2.3.6 LINK MAINTENANCE REJECT Message - LMRM */
|
||||
proto_tree_add_item(tree, hf_dpnss_clearing_cause, tvb, offset, 1, FALSE);
|
||||
offset++;
|
||||
/* Indication Field */
|
||||
ind_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Indication Field: %s",tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
|
||||
ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
|
||||
offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
|
||||
break;
|
||||
default:
|
||||
proto_tree_add_text(tree, tvb, offset, 1, "Dissection of this message not supported yet");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -468,8 +577,13 @@ dissect_dpnss_LbL_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
|||
static void
|
||||
dissect_dpnss_e2e_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
||||
{
|
||||
proto_item *sel_field_item, *sic_field_item, *ind_field_item;
|
||||
proto_tree *sel_field_tree, *sic_field_tree, *ind_field_tree;
|
||||
int offset = 0;
|
||||
guint8 octet;
|
||||
int tvb_end_offset;
|
||||
guint8 octet;
|
||||
|
||||
tvb_end_offset = tvb_length(tvb);
|
||||
|
||||
proto_tree_add_item(tree, hf_dpnss_e2e_msg_type, tvb, offset, 1, FALSE);
|
||||
octet = tvb_get_guint8(tvb,offset)&0x0f;
|
||||
|
@ -477,10 +591,76 @@ dissect_dpnss_e2e_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
|||
if(check_col(pinfo->cinfo, COL_INFO))
|
||||
col_add_fstr(pinfo->cinfo, COL_INFO, "%s ",
|
||||
val_to_str(octet, dpnss_e2e_msg_short_type_vals, "Unknown (%d)" ));
|
||||
switch (octet){
|
||||
default:
|
||||
proto_tree_add_text(tree, tvb, offset, 1, "Dissection of this message not supported yet");
|
||||
break;
|
||||
if(tree){
|
||||
switch (octet){
|
||||
case DPNSS_E2E_MSG_EEM_C:
|
||||
/* 2.2.1 END-to-END Message (COMPLETE) - EEM(C) */
|
||||
case DPNSS_E2E_MSG_EEM_I:
|
||||
/* Fall trough /*
|
||||
/* Indication Field */
|
||||
ind_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Indication Field: %s",tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
|
||||
ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
|
||||
offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
|
||||
break;
|
||||
case DPNSS_E2E_MSG_SCRM:
|
||||
/* 2.2.3 SINGLE-CHANNEL CLEAR REQUEST Message - SCRM */
|
||||
case DPNSS_E2E_MSG_SCIM:
|
||||
/* 2.2.4 SINGLE-CHANNEL CLEAR INDICATION Message - SCIM */
|
||||
/* Clearing Cause */
|
||||
proto_tree_add_item(tree, hf_dpnss_clearing_cause, tvb, offset, 1, FALSE);
|
||||
offset++;
|
||||
/* Indication Field (Optional) */
|
||||
if(tvb_end_offset>offset){
|
||||
ind_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Indication Field: %s",tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
|
||||
ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
|
||||
offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
|
||||
}
|
||||
break;
|
||||
case DPNSS_E2E_MSG_ERM_C:
|
||||
/* 2.2.5 END-to-END RECALL Message (COMPLETE) - ERM(C) */
|
||||
case DPNSS_E2E_MSG_ERM_I:
|
||||
/* 2.2.6 END-to-END RECALL Message (INCOMPLETE) - ERM(I) */
|
||||
/* Service Indicator Code
|
||||
* Note: On data calls the SIC may comprise more than one octet.
|
||||
* The Service Indicator Code is coded in accordance with ANNEX 1.
|
||||
*/
|
||||
sic_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Service Indicator Code");
|
||||
sic_field_tree = proto_item_add_subtree(sic_field_item, ett_dpnss_sic_field);
|
||||
offset =dissect_dpnss_sic(tvb, pinfo, sic_field_tree, offset);
|
||||
/*
|
||||
* Selection Field
|
||||
* The Selection Field contains the selection information relating
|
||||
* to a call set-up or Supplementary Service Request, and is
|
||||
* structured as shown in Subsection 3.
|
||||
*/
|
||||
sel_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Selection Field: %s",tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
|
||||
sel_field_tree = proto_item_add_subtree(sel_field_item, ett_dpnss_sel_field);
|
||||
offset = dissect_dpnss_sup_info_str(tvb, pinfo, sel_field_tree, offset);
|
||||
break;
|
||||
case DPNSS_E2E_MSG_NSIM:
|
||||
/* 2.2.7 NON SPECIFIED INFORMATION Message - NSIM */
|
||||
/* Usage Identifier Oct 1 -
|
||||
* coding of the Usage Identifier, as described in section 49.
|
||||
* The use of NSIMs is described in greater detail in SECTION 49.
|
||||
* BIT 8 7 6 5 4 3 2 1
|
||||
* ext | Manufacturer code | subcode
|
||||
*/
|
||||
octet = tvb_get_guint8(tvb,offset);
|
||||
proto_tree_add_item(tree, hf_dpnss_ext_bit, tvb, offset, 1, FALSE);
|
||||
proto_tree_add_item(tree, hf_dpnss_man_code, tvb, offset, 1, FALSE);
|
||||
proto_tree_add_item(tree, hf_dpnss_subcode, tvb, offset, 1, FALSE);
|
||||
offset++;
|
||||
if((octet&0x80)==0x80){
|
||||
/* /* Extension bit set */
|
||||
offset++;
|
||||
}
|
||||
/* User Information oct 2 + n
|
||||
*/
|
||||
proto_tree_add_text(tree, tvb, offset, -1, "User Information");
|
||||
default:
|
||||
proto_tree_add_text(tree, tvb, offset, 1, "Dissection of this message not supported yet");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -514,8 +694,6 @@ dissect_dpnss_cc_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
|||
case DPNSS_CC_MSG_RM_I:
|
||||
/* 2.1.4 RECALL Message (INCOMPLETE) - RM(I)*/
|
||||
/* fall trough */
|
||||
|
||||
|
||||
/* Service Indicator Code
|
||||
* Note: On data calls the SIC may comprise more than one octet.
|
||||
* The Service Indicator Code is coded in accordance with ANNEX 1.
|
||||
|
@ -547,7 +725,7 @@ dissect_dpnss_cc_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
|||
/* fall trough */
|
||||
case DPNSS_CC_MSG_NAM:
|
||||
/* 2.1.9 NUMBER ACKNOWLEDGE Message - NAM */
|
||||
/* Indication Field */
|
||||
/* Indication Field */
|
||||
ind_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Indication Field: %s",tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
|
||||
ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field);
|
||||
offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset);
|
||||
|
@ -578,9 +756,9 @@ dissect_dpnss_cc_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
|||
break;
|
||||
case DPNSS_CC_MSG_SSRM_I:
|
||||
/* 2.1.11 SUBSEQUENT SERVICE REQUEST Message (INCOMPLETE) - SSRM(I) */
|
||||
/* Selection Field */
|
||||
sel_field_item = proto_tree_add_text(tree, tvb, offset, -1, "Selection Field: %s",tvb_format_text(tvb,offset,tvb_length_remaining(tvb, offset)));
|
||||
sel_field_tree = proto_item_add_subtree(sel_field_item, ett_dpnss_sel_field);
|
||||
/* Selection Field */
|
||||
offset = dissect_dpnss_sup_info_str(tvb, pinfo, sel_field_tree, offset);
|
||||
break;
|
||||
case DPNSS_CC_MSG_SSRM_C:
|
||||
|
@ -757,6 +935,21 @@ proto_register_dpnss(void)
|
|||
FT_UINT8, BASE_DEC, VALS(dpnss_clearing_cause_code_vals), 0x0,
|
||||
"Rejection Cause", HFILL }
|
||||
},
|
||||
{ &hf_dpnss_man_code,
|
||||
{ "Manufacturer Code", "dpnss.man_code",
|
||||
FT_UINT8, BASE_DEC, VALS(dpnss_man_code_vals), 0x3c,
|
||||
"Manufacturer Code", HFILL }
|
||||
},
|
||||
{ &hf_dpnss_subcode,
|
||||
{ "Subcode", "dpnss.subcode",
|
||||
FT_UINT8, BASE_DEC, NULL, 0x03,
|
||||
"Subcode", HFILL }
|
||||
},
|
||||
{ &hf_dpnss_maintenance_action,
|
||||
{ "Maintenance action", "dpnss.maint_act",
|
||||
FT_UINT8, BASE_DEC, VALS(dpnss_maintenance_actions_vals), 0x0,
|
||||
"Maintenance action", HFILL }
|
||||
},
|
||||
};
|
||||
|
||||
/* Setup protocol subtree array */
|
||||
|
|
Loading…
Reference in New Issue