Dissect PS-HANDOVER-REQUEST.

svn path=/trunk/; revision=35666
This commit is contained in:
Anders Broman 2011-01-26 19:44:23 +00:00
parent 57f8048743
commit 68f4f61017
3 changed files with 190 additions and 35 deletions

View File

@ -219,6 +219,12 @@ static gint ett_bssgp_feature_bitmap = -1;
static gint ett_bssgp_positioning_data = -1;
static gint ett_bssgp_tlli = -1;
static gint ett_bssgp_tmsi_ptmsi = -1;
static gint ett_bssgp_pfcs_to_be_set_up_list = -1;
static gint ett_bssgp_pfcs_to_be_set_up_list_pft = -1;
static gint ett_bssgp_pfcs_to_be_set_up_list_abqp = -1;
static gint ett_bssgp_pfcs_to_be_set_up_list_arp = -1;
static gint ett_bssgp_pfcs_to_be_set_up_list_t10 = -1;
static gint ett_bssgp_list_of_setup_pfcs = -1;
/* PDU type coding, v6.5.0, table 11.3.26, p 80 */
#define BSSGP_PDU_DL_UNITDATA 0x00
@ -7353,6 +7359,83 @@ de_bssgp_mbms_session_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint
/*
* 11.3.82 PFCs to be set-up list
*/
static guint16
de_bssgp_pfcs_to_be_set_up_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
proto_tree *pfc_tree, *pft_tree, *abqp_tree, *arp_tree, *t10_tree;
proto_item *pi, *ti2;
guint32 curr_offset;
guint8 num_pfc, i, pfc_len;
curr_offset = offset;
num_pfc = tvb_get_guint8(tvb, curr_offset);
pi = proto_tree_add_text(tree, tvb, curr_offset, 1,
"Number of PFCs: ");
if (num_pfc < 12) {
proto_item_append_text(pi, "%u", num_pfc);
}else {
proto_item_append_text(pi, "Reserved");
return (len);
}
curr_offset++;
if (num_pfc == 0)
return (curr_offset-offset);
pfc_len = (len - 1) / num_pfc;
for (i = 0; i < num_pfc; i++) {
ti2 = proto_tree_add_text(tree, tvb, curr_offset, pfc_len,
"PFC (%u)", i + 1);
pfc_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list);
pi = proto_tree_add_text(pfc_tree, tvb, curr_offset, 1, "PFI");
bssgp_pi_append_pfi(pi, tvb, curr_offset);
curr_offset++;
/* PFT: Packet Flow Timer. Coded as the GPRS Timer information element,
* see sub-clause 11.3.44.
*/
pi = proto_tree_add_text(pfc_tree, tvb, curr_offset, 3, "Packet Flow Timer(PFT)");
pft_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list_pft);
proto_tree_add_item(pft_tree, hf_bssgp_unit_val, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
proto_tree_add_item(pft_tree, hf_bssgp_gprs_timer, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
curr_offset += 3;
/* ABQP: Aggregate BSS QoS Profile.
* Coded as the Aggregate BSS QoS Profile information element, see sub-clause 11.3.43.
*/
pi = proto_tree_add_text(pfc_tree, tvb, curr_offset, 3, "Aggregate BSS QoS Profile(ABQP)");
abqp_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list_abqp);
/* Unsure about length 16 */
curr_offset = curr_offset + de_sm_qos(tvb, tree, curr_offset, 16, NULL, NULL);
/* Allocation/Retention Priority: Allocation Retention Priority.
* Coded as the Priority information element, see subclause 11.3.27.
* This information element is optionally included.
*/
if(pfc_len>17){
pi = proto_tree_add_text(pfc_tree, tvb, curr_offset, 3, "Allocation/Retention Priority");
arp_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list_arp);
curr_offset = curr_offset + be_prio(tvb, arp_tree, curr_offset, 1, NULL, NULL);
}
/* T10: T10.
* Coded as the GPRS Timer information element, see sub-clause 11.3.44.
* This information element shall be present for a PFC if the Allocation/Retention Priority
* is present and if queuing is allowed for the PFC.
*/
if(pfc_len>18){
pi = proto_tree_add_text(pfc_tree, tvb, curr_offset, 3, "T10");
t10_tree = proto_item_add_subtree(ti2, ett_bssgp_pfcs_to_be_set_up_list_t10);
proto_tree_add_item(t10_tree, hf_bssgp_unit_val, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
proto_tree_add_item(t10_tree, hf_bssgp_gprs_timer, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
curr_offset += 3;
}
}
return(curr_offset-offset);
}
/*
* 11.3.83 List of set-up PFCs
*/
@ -7384,7 +7467,7 @@ de_bssgp_list_of_setup_pfcs(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gui
for (i = 0; i < num_pfc; i++) {
ti2 = proto_tree_add_text(tree, tvb, curr_offset, 1,
"PFC (%u)", i + 1);
pfc_tree = proto_item_add_subtree(ti2, ett_bssgp_pfc_flow_control_parameters_pfc);
pfc_tree = proto_item_add_subtree(ti2, ett_bssgp_list_of_setup_pfcs);
pi = proto_tree_add_text(pfc_tree, tvb, curr_offset, 1, "PFI");
bssgp_pi_append_pfi(pi, tvb, curr_offset);
@ -8024,7 +8107,7 @@ const value_string bssgp_elem_strings[] = {
{ 0x00, "Source BSS to Target BSS Transparent Container" }, /* 11.3.79 Source BSS to Target BSS Transparent Container */
{ 0x00, "Target BSS to Source BSS Transparent Container" }, /* 11.3.80 Target BSS to Source BSS Transparent Container */
/* 11.3.81 NAS container for PS Handover */
/* 11.3.82 PFCs to be set-up list */
{ 0x00, "PFCs to be set-up list" }, /* 11.3.82 PFCs to be set-up list */
{ 0x00, "List of set-up PFCs" }, /* 11.3.83 List of set-up PFCs */
{ 0x00, "Extended Feature Bitmap" }, /* 11.3.84 Extended Feature Bitmap */
{ 0x00, "Source to Target Transparent Container" }, /* 11.3.85 Source to Target Transparent Container */
@ -8120,7 +8203,7 @@ typedef enum
DE_BSSGP_TMGI, /* 11.3.77 TMGI (Temporary Mobile Group Identity) GSM_A_PDU_TYPE_GM, DE_TMGI*/
DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, /* 11.3.79 Source BSS to Target BSS Transparent Container */
DE_BSSGP_TARGET_BSS_TO_SOURCE_BSS_TRANSP_CONT, /* 11.3.80 Target BSS to Source BSS Transparent Container */
DE_BSSGP_PFCS_TO_BE_SET_UP_LIST, /* 11.3.82 PFCs to be set-up list */
DE_BSSGP_LIST_OF_SETUP_PFCS, /* 11.3.83 List of set-up PFCs */
DE_BSSGP_EXT_FEATURE_BITMAP, /* 11.3.84 Extended Feature Bitmap */
DE_BSSGP_SRC_TO_TRG_TRANSP_CONT, /* 11.3.85 Source to Target Transparent Container */
@ -8195,12 +8278,13 @@ guint16 (*bssgp_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gui
de_bssgp_bucket_full_ratio, /* 11.3.46 0x3c Bucket Full Ratio */
de_bssgp_serv_utran_cco, /* 11.3.47 0x3d Service UTRAN CCO */
de_bssgp_nsei, /* 11.3.48 0x3e NSEI (Network Service Entity Identifier) */
de_bssgp_pfc_flow_ctrl, /* 11.3.68 PFC Flow Control parameters */
de_bssgp_pfc_flow_ctrl, /* 11.3.68 PFC Flow Control parameters */
NULL, /* 11.3.69 0x53 Global CN-Id */
de_bssgp_mbms_session_id, /* 11.3.71 MBMS Session Identity */
NULL, /* 11.3.77 TMGI (Temporary Mobile Group Identity) */
de_bssgp_source_BSS_to_target_BSS_transp_cont, /* 11.3.79 Source BSS to Target BSS Transparent Container */
de_bssgp_target_BSS_to_source_BSS_transp_cont, /* 11.3.80 Target BSS to Source BSS Transparent Container */
de_bssgp_pfcs_to_be_set_up_list, /* 11.3.82 PFCs to be set-up list */
de_bssgp_list_of_setup_pfcs, /* 11.3.83 List of set-up PFCs */
de_bssgp_ext_feature_bitmap, /* 11.3.84 Extended Feature Bitmap */
de_bssgp_src_to_trg_transp_cont, /* 11.3.85 Source to Target Transparent Container */
@ -9551,7 +9635,7 @@ bssgp_delete_bss_pfc_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint
* 10.4.27 PS-HANDOVER-REQUIRED
*/
static void
bssgp_ps_ho_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
bssgp_ps_ho_required(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
@ -9577,7 +9661,7 @@ bssgp_ps_ho_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
*/
ELEM_OPT_TELV(0x64,BSSGP_PDU_TYPE, DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, NULL);
/* Target RNC Identifier (note 2) (note 3) RNC Identifier/11.3.87 C TLV 10 */
ELEM_OPT_TELV(0x6c,BSSGP_PDU_TYPE, BE_BSSGP_RNC_ID, NULL);
ELEM_OPT_TELV(0x6c,BSSGP_PDU_TYPE, BE_BSSGP_RNC_ID, " - Target");
/* Source to Target Transparent Container (note 1)
* Source to Target Transparent Container/11.3.85 C TLV 3-?
*/
@ -9601,7 +9685,7 @@ bssgp_ps_ho_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
* 10.4.28 PS-HANDOVER-REQUIRED-ACK
*/
static void
bssgp_ps_ho_req_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
bssgp_ps_ho_required_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
@ -9636,7 +9720,7 @@ bssgp_ps_ho_req_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
* 10.4.29 PS-HANDOVER-REQUIRED-NACK
*/
static void
bssgp_ps_ho_req_nack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
bssgp_ps_ho_required_nack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
@ -9658,6 +9742,50 @@ bssgp_ps_ho_req_nack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
}
/*
* 10.4.30 PS-HANDOVER-REQUEST
*/
static void
bssgp_ps_ho_request(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
{
guint32 curr_offset;
guint32 consumed;
guint curr_len;
curr_offset = offset;
curr_len = len;
/* This PDU initiates the allocation of resources for one or more PFCs in the target BSS for an MS. */
/* Direction: SGSN to BSS */
gpinfo->link_dir = P2P_DIR_DL;
/* TLLI TLLI/11.3.35 M TLV 6 */
ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL);
/* IMSI IMSI/11.3.14 M TLV 5-10 */
ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL);
/* Cause Cause/11.3.8 M TLV 3 */
ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL);
/* Source Cell Identifier (note 1) Cell Identifier/11.3.9 C TLV 10 */
ELEM_OPT_TELV(0x08, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Source");
/* Source RNC Identifier (note 1) RNC Identifier/11.3.87 C TLV 10 */
ELEM_OPT_TELV(0x6c,BSSGP_PDU_TYPE, BE_BSSGP_RNC_ID, " - Source");
/* Target Cell Identifier Cell Identifier/11.3.9 M TLV 10 */
ELEM_OPT_TELV(0x08, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target");
/* Source BSS to Target BSS Transparent Container Source BSS to Target BSS Transparent Container/11.3.79 M TLV 7-? */
ELEM_OPT_TELV(0x64,BSSGP_PDU_TYPE, DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, NULL);
/* PFCs to be set-up list PFCs to be set-up list/11.3.82 M TLV 22-? */
ELEM_OPT_TELV(0x67,BSSGP_PDU_TYPE, DE_BSSGP_PFCS_TO_BE_SET_UP_LIST, NULL);
/* NAS container for PS Handover NAS container for PS Handover/11.3.81 O TLV 3-? */
ELEM_OPT_TELV(0x10,GSM_A_PDU_TYPE_COMMON, DE_NAS_CONT_FOR_PS_HO, NULL);
/* Service UTRAN CCO Service UTRAN CCO/11.3.47 O TLV 3 */
ELEM_OPT_TELV(0x3d, BSSGP_PDU_TYPE, DE_BSSGP_SERV_UTRAN_CCO, NULL);
/* Subscriber Profile ID for RAT/Frequency priority (note 2) Subscriber Profile ID for RAT/Frequency priority/11.3.105 O TLV 3 */
ELEM_OPT_TELV(0x81, BSSGP_PDU_TYPE, DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, NULL);
/* Reliable Inter RAT Handover Info (note 3) Reliable Inter RAT Handover Info/11.3.107 C TLV 3 */
ELEM_OPT_TELV(0x83,BSSGP_PDU_TYPE, DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, NULL);
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gpinfo);
}
/*
* 10.4.31 PS-HANDOVER-REQUEST-ACK
* 10.4.32 PS-HANDOVER-REQUEST-NACK
* 10.4.33 PS-HANDOVER-COMPLETE
@ -9783,7 +9911,7 @@ static const value_string bssgp_msg_strings[] = {
/* 0x59 */ { BSSGP_PDU_PS_HANDOVER_REQUIRED, "PS-HANDOVER-REQUIRED" }, /* 10.4.27 PS-HANDOVER-REQUIRED */
/* 0x5a */ { BSSGP_PDU_PS_HANDOVER_REQUIRED_ACK, "PS-HANDOVER-REQUIRED-ACK" }, /* 10.4.28 PS-HANDOVER-REQUIRED-ACK */
/* 0x5b */ { BSSGP_PDU_PS_HANDOVER_REQUIRED_NACK, "PS-HANDOVER-REQUIRED-NACK" }, /* 10.4.29 PS-HANDOVER-REQUIRED-NACK */
/* 0x5c */ { BSSGP_PDU_PS_HANDOVER_REQUEST, "PS-HANDOVER-REQUEST" },
/* 0x5c */ { BSSGP_PDU_PS_HANDOVER_REQUEST, "PS-HANDOVER-REQUEST" }, /* 10.4.30 PS-HANDOVER-REQUEST */
/* 0x5d */ { BSSGP_PDU_PS_HANDOVER_REQUEST_ACK, "PS-HANDOVER-REQUEST-ACK" },
/* 0x5e */ { BSSGP_PDU_PS_HANDOVER_REQUEST_NACK, "PS-HANDOVER-REQUEST-NACK" },
@ -9890,9 +10018,10 @@ static void (*bssgp_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset,
bssgp_delete_bss_pfc, /* 10.4.22 DELETE-BSS-PFC */
bssgp_delete_bss_pfc_ack, /* 10.4.23 DELETE-BSS-PFC-ACK */
bssgp_delete_bss_pfc_req, /* 10.4.26 DELETE-BSS-PFC-REQ */
bssgp_ps_ho_req, /* 10.4.27 PS-HANDOVER-REQUIRED */
bssgp_ps_ho_req_ack, /* 10.4.28 PS-HANDOVER-REQUIRED-ACK */
bssgp_ps_ho_req_nack, /* 10.4.29 PS-HANDOVER-REQUIRED-NACK */
bssgp_ps_ho_required, /* 10.4.27 PS-HANDOVER-REQUIRED */
bssgp_ps_ho_required_ack, /* 10.4.28 PS-HANDOVER-REQUIRED-ACK */
bssgp_ps_ho_required_nack, /* 10.4.29 PS-HANDOVER-REQUIRED-NACK */
bssgp_ps_ho_request. /* 10.4.30 PS-HANDOVER-REQUEST */
NULL, /* NONE */
};
@ -9962,7 +10091,7 @@ dissect_bssgp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
"Unknown PDU type"));
/* PDU's with msg no lover than this value are converted to common dissection style */
if(oct>0x5b){
if(oct>0x5c){
proto_tree_add_item(bssgp_tree, hf_bssgp_msg_type, tvb, 0, 1, ENC_BIG_ENDIAN);
decode_pdu(&bi);
}else{
@ -10412,7 +10541,7 @@ proto_register_bssgp(void)
};
/* Setup protocol subtree array */
#define NUM_INDIVIDUAL_ELEMS 45
#define NUM_INDIVIDUAL_ELEMS 51
gint *ett[NUM_INDIVIDUAL_ELEMS +
NUM_BSSGP_ELEM +
NUM_BSSGP_MSG];
@ -10461,6 +10590,12 @@ proto_register_bssgp(void)
ett[42] = &ett_bssgp_tlli;
ett[43] = &ett_bssgp_tmsi_ptmsi;
ett[44] = &ett_bssgp_new;
ett[45] = &ett_bssgp_pfcs_to_be_set_up_list;
ett[46] = &ett_bssgp_pfcs_to_be_set_up_list_pft;
ett[47] = &ett_bssgp_pfcs_to_be_set_up_list_abqp;
ett[48] = &ett_bssgp_pfcs_to_be_set_up_list_arp;
ett[49] = &ett_bssgp_pfcs_to_be_set_up_list_t10;
ett[50] = &ett_bssgp_list_of_setup_pfcs;
last_offset = NUM_INDIVIDUAL_ELEMS;

View File

@ -468,6 +468,9 @@ static int hf_gsm_a_bssmap_dlci_spare = -1;
static int hf_gsm_a_bssmap_dlci_sapi = -1;
static int hf_gsm_a_bssmap_cause = -1;
static int hf_gsm_a_bssmap_be_cell_id_disc = -1;
static int hf_gsm_a_bssmap_pci = -1;
static int hf_gsm_a_bssmap_qa = -1;
static int hf_gsm_a_bssmap_pvi = -1;
static int hf_gsm_a_bssmap_lsa_only = -1;
static int hf_gsm_a_bssmap_act = -1;
static int hf_gsm_a_bssmap_pref = -1;
@ -1739,7 +1742,17 @@ be_cell_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar
/*
* [2] 3.2.2.18 Priority
*/
static guint16
static const true_false_string bssmap_pci_value = {
"This allocation request may preempt an existing connection",
"This allocation request shall not preempt an existing connection"
};
static const true_false_string bssmap_pvi_value = {
"This connection might be preempted by another allocation request",
"This connection shall not be preempted by another allocation request"
};
guint16
be_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len)
{
guint8 oct;
@ -1751,13 +1764,8 @@ be_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *a
oct = tvb_get_guint8(tvb, curr_offset);
proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, FALSE);
proto_tree_add_item(tree, hf_gsm_a_bssmap_pci, tvb, curr_offset, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
proto_tree_add_text(tree,
tvb, curr_offset, 1,
"%s = Preemption Capability Indicator (PCI): this allocation request %s preempt an existing connection",
a_bigbuf,
(oct & 0x40) ? "may" : "shall not");
switch ((oct & 0x3c) >> 2)
{
@ -1779,19 +1787,8 @@ be_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *a
if (add_string)
g_snprintf(add_string, string_len, " - (%u)", (oct & 0x3c) >> 2);
other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
proto_tree_add_text(tree,
tvb, curr_offset, 1,
"%s = Queuing Allowed Indicator (QA): queuing %sallowed",
a_bigbuf,
(oct & 0x02) ? "" : "not ");
other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
proto_tree_add_text(tree,
tvb, curr_offset, 1,
"%s = Preemption Vulnerability Indicator (PVI): this connection %s be preempted by another allocation request",
a_bigbuf,
(oct & 0x01) ? "might" : "shall not");
proto_tree_add_item(tree, hf_gsm_a_bssmap_qa, tvb, curr_offset, 1, FALSE);
proto_tree_add_item(tree, hf_gsm_a_bssmap_pvi, tvb, curr_offset, 1, FALSE);
curr_offset++;
@ -6479,6 +6476,26 @@ proto_register_gsm_a_bssmap(void)
{ "Cell identification discriminator","gsm_a.be.cell_id_disc",
FT_UINT8,BASE_DEC|BASE_EXT_STRING, &gsm_a_be_cell_id_disc_vals_ext, 0x0f,
NULL, HFILL }
},
{ &hf_gsm_a_bssmap_pci,
{ "Preemption Capability indicator(PCI)","ggsm_a_bssmap.pci",
FT_BOOLEAN,8, TFS(&bssmap_pci_value), 0x40,
NULL, HFILL }
},
{ &hf_gsm_a_bssmap_qa,
{ "Queuing Allowed Indicator(QA)","ggsm_a_bssmap.qa",
FT_BOOLEAN,8, TFS(&tfs_allowed_not_allowed), 0x02,
NULL, HFILL }
},
{ &hf_gsm_a_bssmap_pvi,
{ "Preemption Vulnerability Indicator(PVI)","ggsm_a_bssmap.pvi",
FT_BOOLEAN,8, TFS(&bssmap_pvi_value), 0x01,
NULL, HFILL }
},
{ &hf_gsm_a_bssmap_lsa_only,
{ "LSA only","ggsm_a_bssmap.lsa_only",
FT_BOOLEAN,8, TFS(&bssmap_lsa_only_value), 0x01,
NULL, HFILL }
},
{ &hf_gsm_a_bssmap_lsa_only,
{ "LSA only","ggsm_a_bssmap.lsa_only",

View File

@ -3115,8 +3115,11 @@ de_nas_cont_for_ps_ho(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len
* The IOV-UI value consists of 32 bits, the format is defined in 3GPP TS 44.064 [78a].
*/
proto_tree_add_item(tree, hf_gsm_a_iov_ui, tvb, curr_offset, 4, FALSE);
curr_offset+=4;
return(len);
EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, gsm_a_dtap_pinfo);
return(curr_offset - offset);
}