add variable ie info

This commit is contained in:
thomasDOTwtf 2019-01-21 00:08:00 +01:00
parent 3c9119baae
commit c052d13562
1 changed files with 159 additions and 5 deletions

View File

@ -24,6 +24,12 @@ static gint hf_nwk_msg_type_cc = -1;
static gint hf_nwk_msg_type_mm = -1;
static gint ett_dect_nwk = -1;
static gint ett_dect_nwk_ie = -1;
static gint hf_nwk_ie_var_type = -1;
//static gint hf_nwk_ie_fix_single_type = -1;
//static gint hf_nwk_ie_fix_double_type = -1;
static gint hf_nwk_ie_len = -1;
static dissector_handle_t dect_nwk_handle;
@ -128,6 +134,27 @@ enum dect_nwk_lce_msg_type {
DECT_NWK_LCE_PAGE_REJ = 0x72,
};
/* Section 7.6.1 */
enum dect_nwk_info_fix_single_type {
DECT_NWK_INFO_FIX_SHIFT = 0x90,
DECT_NWK_INFO_FIX_SEND_COMPLETE = 0xa1,
DECT_NWK_INFO_FIX_DELIMITER_REQ = 0xa2,
DECT_NWK_INFO_FIX_USE_TPUI = 0xa3,
DECT_NWK_INFO_FIX_REPEAT_IND = 0xd0,
DECT_NWK_DOUBLE_OCTET_ELEMENT = 0xe0,
};
enum dect_nwk_info_fix_double_type {
DECT_NWK_INFO_FIX_BASIC_SVC = 0xe0,
DECT_NWK_INFO_FIX_REL_REASON = 0xe2,
DECT_NWK_INFO_FIX_SIGNAL = 0xe4,
DECT_NWK_INFO_FIX_TIMER_RESTART = 0xe5,
DECT_NWK_INFO_FIX_TEST_HOOK_C = 0xe6,
DECT_NWK_INFO_FIX_SINGLE_DISP = 0xe8,
DECT_NWK_INFO_FIX_SINGLE_KEYPAD = 0xe9,
DECT_NWK_INFO_FIX_RESERVED = 0xef,
};
/* Section 7.7.1 */
enum dect_nwk_info_var_type {
DECT_NWK_INFO_VAR_INFO_TYPE = 0x01,
@ -311,6 +338,67 @@ static const value_string nwk_lce_msgt_vals[] = {
{ 0, NULL }
};
/* Section 7.7.1 */
static const value_string nwk_info_var_vals[] = {
{ DECT_NWK_INFO_VAR_INFO_TYPE , "Info Type"},
{ DECT_NWK_INFO_VAR_IDENTITY_TYPE , "Identity Type"},
{ DECT_NWK_INFO_VAR_PORTABLE_ID , "Portable Identity"},
{ DECT_NWK_INFO_VAR_FIXED_ID , "Fixed Identity"},
{ DECT_NWK_INFO_VAR_LOC_AREA , "Location area"},
{ DECT_NWK_INFO_VAR_NWK_ID , "NWK assigned Identity"},
{ DECT_NWK_INFO_VAR_AUTH_TYPE , "AUTH-Type"},
{ DECT_NWK_INFO_VAR_ALLOC_TYPE , "Allocation Type"},
{ DECT_NWK_INFO_VAR_RAND , "RAND"},
{ DECT_NWK_INFO_VAR_RES , "RES"},
{ DECT_NWK_INFO_VAR_RS , "RS"},
{ DECT_NWK_INFO_VAR_IWU_ATTR , "IWU attributes"},
{ DECT_NWK_INFO_VAR_CALL_ATTR , "Call attributes"},
{ DECT_NWK_INFO_VAR_SVC_CHANGE , "Service change info"},
{ DECT_NWK_INFO_VAR_CON_ATTR , "Connection attributes"},
{ DECT_NWK_INFO_VAR_CIPH_INFO , "Cipher Info"},
{ DECT_NWK_INFO_VAR_CALL_ID , "Call identity"},
{ DECT_NWK_INFO_VAR_CON_ID , "Connection identity"},
{ DECT_NWK_INFO_VAR_FACILITY , "Facility"},
{ DECT_NWK_INFO_VAR_PROGRESS_IND , "Progress Indicator"},
{ DECT_NWK_INFO_VAR_MMS_GEN_HEAD , "MMS Generic Header"},
{ DECT_NWK_INFO_VAR_MMS_OBJ_HEAD , "Object Header"},
{ DECT_NWK_INFO_VAR_MMS_EXT_HEAD , "Extended Header"},
{ DECT_NWK_INFO_VAR_TIME_DATE , "Time-Date"},
{ DECT_NWK_INFO_VAR_MULTI_DISP , "Multi Display"},
{ DECT_NWK_INFO_VAR_MULTI_KEYPAD , "Multi-Keypad"},
{ DECT_NWK_INFO_VAR_FEATURE_ACT , "Feature Activate"},
{ DECT_NWK_INFO_VAR_FEATURE_IND , "Feature Indicate"},
{ DECT_NWK_INFO_VAR_NET_PARAM , "Network parameter"},
{ DECT_NWK_INFO_VAR_EXT_HO_IND , "Ext h/o indicator"},
{ DECT_NWK_INFO_VAR_ZAP_FIELD , "ZAP field"},
{ DECT_NWK_INFO_VAR_SVC_CLASS , "Serice Class"},
{ DECT_NWK_INFO_VAR_KEY , "Key"},
{ DECT_NWK_INFO_VAR_REJECT_REASON , "Reject Reason"},
{ DECT_NWK_INFO_VAR_SETUP_CAP , "Setup capability"},
{ DECT_NWK_INFO_VAR_TERM_CAP , "Terminal capability"},
{ DECT_NWK_INFO_VAR_E2E_COMP , "End-to-End compatibility"},
{ DECT_NWK_INFO_VAR_RATE_PARAM , "Rate parameters"},
{ DECT_NWK_INFO_VAR_TRANS_DELAY , "Transit Delay"},
{ DECT_NWK_INFO_VAR_WINDOW_SIZE , "Window size"},
{ DECT_NWK_INFO_VAR_CALLING_NR , "Calling Party Number"},
{ DECT_NWK_INFO_VAR_CALLING_NAME , "Calling Party Name"},
{ DECT_NWK_INFO_VAR_CALLED_NR , "Called Paty Number"},
{ DECT_NWK_INFO_VAR_CALLED_SUBA , "Called Party Subaddr"},
{ DECT_NWK_INFO_VAR_DURATION , "Duration"},
{ DECT_NWK_INFO_VAR_CALLED_NAME , "Called Party Name"},
{ DECT_NWK_INFO_VAR_SEGMENT_INFO , "Segmented Info"},
{ DECT_NWK_INFO_VAR_ALPHANUM , "Alphanumeric"},
{ DECT_NWK_INFO_VAR_IWU2IWU , "IWU-to-IWU"},
{ DECT_NWK_INFO_VAR_MODEL_ID , "Model identifier"},
{ DECT_NWK_INFO_VAR_IWU_PACKET , "IWU-PACKET"},
{ DECT_NWK_INFO_VAR_ESC_PROP , "Escape to proprietary"},
{ DECT_NWK_INFO_VAR_CODEC_LIST , "Codec List"},
{ DECT_NWK_INFO_VAR_EVENTS_NOTI , "Events notification"},
{ DECT_NWK_INFO_VAR_CALL_INFO , "Call information"},
{ DECT_NWK_INFO_VAR_ESC_EXTENSION , "Escape for extension"},
{ 0, NULL }
};
/* TOOD: value_string for other protocols */
@ -318,38 +406,94 @@ static const value_string nwk_lce_msgt_vals[] = {
* DECT dissector code
*********************************************************************************/
static int dissect_dect_nwk_ie(tvbuff_t *tvb, guint offset, packet_info _U_ *pinfo, proto_tree *tree, void _U_ *data)
{
guint8 ie_type;
guint8 ie_len;
guint8 type_offset;
guint len;
proto_item *ie_ti;
proto_tree *ie_tree;
len = tvb_reported_length(tvb);
type_offset = offset;
ie_type = tvb_get_guint8(tvb, offset);
offset++;
if ((ie_type & 0xf0) == 0xe0)
{
/* double octet ie */
offset++;
}
else if (ie_type & 0x80)
{
/* single octet ie */
}
else
{
/* variable length ie */
ie_len = tvb_get_guint8(tvb, offset);
ie_ti = proto_tree_add_item(tree, hf_nwk_ie_var_type, tvb, type_offset, 1, ENC_NA);
ie_tree = proto_item_add_subtree(ie_ti, ett_dect_nwk_ie);
proto_tree_add_item(ie_tree, hf_nwk_ie_len, tvb, offset, 1, ENC_NA);
offset++;
offset += ie_len;
}
return offset;
}
static int dissect_dect_nwk_lce(tvbuff_t *tvb, guint8 msg_type, guint offset, packet_info *pinfo, proto_tree *tree, void _U_ *data)
{
guint len;
proto_tree_add_item(tree, hf_nwk_msg_type_lce, tvb, offset, 1, ENC_NA);
col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
val_to_str(msg_type, nwk_lce_msgt_vals, "Unknown 0x%02x"));
offset++;
len = tvb_reported_length(tvb);
/* TOOD: dissection of TLVs/IEs */
while (offset < len)
{
offset = dissect_dect_nwk_ie(tvb, offset, pinfo, tree, data);
}
return offset;
}
static int dissect_dect_nwk_cc(tvbuff_t *tvb, guint8 msg_type, guint offset, packet_info *pinfo, proto_tree *tree, void _U_ *data)
{
guint len;
proto_tree_add_item(tree, hf_nwk_msg_type_cc, tvb, offset, 1, ENC_NA);
col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
val_to_str(msg_type, nwk_cc_msgt_vals, "Unknown 0x%02x"));
offset++;
len = tvb_reported_length(tvb);
/* TOOD: dissection of TLVs/IEs */
while (offset < len)
{
offset = dissect_dect_nwk_ie(tvb, offset, pinfo, tree, data);
}
return offset;
}
static int dissect_dect_nwk_mm(tvbuff_t *tvb, guint8 msg_type, guint offset, packet_info *pinfo, proto_tree *tree, void _U_ *data)
{
guint len;
proto_tree_add_item(tree, hf_nwk_msg_type_mm, tvb, offset, 1, ENC_NA);
col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
val_to_str(msg_type, nwk_mm_msgt_vals, "Unknown 0x%02x"));
offset++;
len = tvb_reported_length(tvb);
/* TOOD: dissection of TLVs/IEs */
while (offset < len)
{
offset = dissect_dect_nwk_ie(tvb, offset, pinfo, tree, data);
}
return offset;
}
@ -362,7 +506,7 @@ static int dissect_dect_nwk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
guint8 pdisc, msg_type;
guint len;
guint offset = 0;
int available_length;
guint available_length;
len = tvb_reported_length(tvb);
@ -432,12 +576,22 @@ void proto_register_dect_nwk(void)
VALS(nwk_lce_msgt_vals), 0x0, NULL, HFILL
}
},
{ &hf_nwk_ie_var_type,
{ "Information Element", "dect_nwk.ie_type", FT_UINT8, BASE_HEX,
VALS(nwk_info_var_vals), 0x0, NULL, HFILL
}
},
{ &hf_nwk_ie_len,
{ "IE Length", "dect_nwk.ie_len", FT_UINT8, BASE_DEC,
NULL, 0x0, NULL, HFILL
}
}
};
static gint *ett[] = {
&ett_dect_nwk,
&ett_dect_nwk_ie,
};
/* Register protocol */