aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-h225.c4
-rw-r--r--epan/dissectors/packet-h235.c8
-rw-r--r--epan/dissectors/packet-h245.c2
-rw-r--r--epan/dissectors/packet-nbap.c48
-rw-r--r--epan/dissectors/packet-per.c11
-rw-r--r--epan/dissectors/packet-per.h2
-rw-r--r--epan/dissectors/packet-ranap.c30
-rw-r--r--epan/dissectors/packet-rnsap.c99
-rwxr-xr-xtools/asn2wrs.py2
9 files changed, 122 insertions, 84 deletions
diff --git a/epan/dissectors/packet-h225.c b/epan/dissectors/packet-h225.c
index a32dfb1e04..1ed800f56a 100644
--- a/epan/dissectors/packet-h225.c
+++ b/epan/dissectors/packet-h225.c
@@ -3816,7 +3816,7 @@ static int dissect_almostOutOfResources(tvbuff_t *tvb, int offset, asn_ctx_t *ac
static int
dissect_h225_BIT_STRING_SIZE_32(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 32, 32, FALSE);
+ 32, 32, FALSE, NULL);
return offset;
}
@@ -6955,7 +6955,7 @@ static int dissect_integrity_item(tvbuff_t *tvb, int offset, asn_ctx_t *actx, pr
static int
dissect_h225_BIT_STRING(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- NO_BOUND, NO_BOUND, FALSE);
+ NO_BOUND, NO_BOUND, FALSE, NULL);
return offset;
}
diff --git a/epan/dissectors/packet-h235.c b/epan/dissectors/packet-h235.c
index 527518d111..41bf27b8c8 100644
--- a/epan/dissectors/packet-h235.c
+++ b/epan/dissectors/packet-h235.c
@@ -314,7 +314,7 @@ static int dissect_generalId(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_t
static int
dissect_h235_KeyMaterial(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 1, 2048, FALSE);
+ 1, 2048, FALSE, NULL);
return offset;
}
@@ -427,7 +427,7 @@ static int dissect_nonStandard(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto
static int
dissect_h235_BIT_STRING_SIZE_0_2048(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 0, 2048, FALSE);
+ 0, 2048, FALSE, NULL);
return offset;
}
@@ -465,7 +465,7 @@ static int dissect_dhkey(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tree
static int
dissect_h235_BIT_STRING_SIZE_0_511(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 0, 511, FALSE);
+ 0, 511, FALSE, NULL);
return offset;
}
@@ -801,7 +801,7 @@ static int dissect_encrptval(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_t
static int
dissect_h235_BIT_STRING(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- NO_BOUND, NO_BOUND, FALSE);
+ NO_BOUND, NO_BOUND, FALSE, NULL);
return offset;
}
diff --git a/epan/dissectors/packet-h245.c b/epan/dissectors/packet-h245.c
index 8cec9ece76..be15d4ca9b 100644
--- a/epan/dissectors/packet-h245.c
+++ b/epan/dissectors/packet-h245.c
@@ -11032,7 +11032,7 @@ static int dissect_certificateResponse(tvbuff_t *tvb, int offset, asn_ctx_t *act
static int
dissect_h245_BIT_STRING_SIZE_1_65535(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 1, 65535, FALSE);
+ 1, 65535, FALSE, NULL);
return offset;
}
diff --git a/epan/dissectors/packet-nbap.c b/epan/dissectors/packet-nbap.c
index f37a11d68f..f0c84ac87a 100644
--- a/epan/dissectors/packet-nbap.c
+++ b/epan/dissectors/packet-nbap.c
@@ -9693,7 +9693,7 @@ static const asn_namedbit PreambleSignatures_bits[] = {
static int
dissect_nbap_PreambleSignatures(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 16, 16, FALSE);
+ 16, 16, FALSE, NULL);
return offset;
}
@@ -9780,7 +9780,7 @@ static const asn_namedbit RACH_SubChannelNumbers_bits[] = {
static int
dissect_nbap_RACH_SubChannelNumbers(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 12, 12, FALSE);
+ 12, 12, FALSE, NULL);
return offset;
}
@@ -11077,7 +11077,7 @@ static int dissect_bindingID(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_t
static int
dissect_nbap_TransportLayerAddress(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 1, 160, TRUE);
+ 1, 160, TRUE, NULL);
return offset;
}
@@ -18096,7 +18096,7 @@ static int dissect_segment_Type(tvbuff_t *tvb, int offset, asn_ctx_t *actx, prot
static int
dissect_nbap_IB_SG_DATA(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- NO_BOUND, NO_BOUND, FALSE);
+ NO_BOUND, NO_BOUND, FALSE, NULL);
return offset;
}
@@ -22998,7 +22998,7 @@ static int dissect_bad_sat_id(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_
static int
dissect_nbap_BIT_STRING_SIZE_8(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 8, 8, FALSE);
+ 8, 8, FALSE, NULL);
return offset;
}
@@ -23187,7 +23187,7 @@ static int dissect_tx_tow_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_
static int
dissect_nbap_BIT_STRING_SIZE_14(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 14, 14, FALSE);
+ 14, 14, FALSE, NULL);
return offset;
}
@@ -23203,7 +23203,7 @@ static int dissect_idot_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tr
static int
dissect_nbap_BIT_STRING_SIZE_2(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 2, 2, FALSE);
+ 2, 2, FALSE, NULL);
return offset;
}
@@ -23219,7 +23219,7 @@ static int dissect_ca_or_p_on_l2_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx,
static int
dissect_nbap_BIT_STRING_SIZE_22(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 22, 22, FALSE);
+ 22, 22, FALSE, NULL);
return offset;
}
@@ -23235,7 +23235,7 @@ static int dissect_a_f_zero_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, prot
static int
dissect_nbap_BIT_STRING_SIZE_10(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 10, 10, FALSE);
+ 10, 10, FALSE, NULL);
return offset;
}
@@ -23251,7 +23251,7 @@ static int dissect_iodc_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tr
static int
dissect_nbap_BIT_STRING_SIZE_4(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 4, 4, FALSE);
+ 4, 4, FALSE, NULL);
return offset;
}
@@ -23264,7 +23264,7 @@ static int dissect_user_range_accuracy_index_nav(tvbuff_t *tvb, int offset, asn_
static int
dissect_nbap_BIT_STRING_SIZE_6(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 6, 6, FALSE);
+ 6, 6, FALSE, NULL);
return offset;
}
@@ -23277,7 +23277,7 @@ static int dissect_sv_health_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, pro
static int
dissect_nbap_BIT_STRING_SIZE_1(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 1, 1, FALSE);
+ 1, 1, FALSE, NULL);
return offset;
}
@@ -23293,7 +23293,7 @@ static int dissect_fit_interval_flag_nav(tvbuff_t *tvb, int offset, asn_ctx_t *a
static int
dissect_nbap_BIT_STRING_SIZE_87(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 87, 87, FALSE);
+ 87, 87, FALSE, NULL);
return offset;
}
@@ -23306,7 +23306,7 @@ static int dissect_sf1_reserved_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx,
static int
dissect_nbap_BIT_STRING_SIZE_16(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 16, 16, FALSE);
+ 16, 16, FALSE, NULL);
return offset;
}
@@ -23355,7 +23355,7 @@ static int dissect_omegadot_alm(tvbuff_t *tvb, int offset, asn_ctx_t *actx, prot
static int
dissect_nbap_BIT_STRING_SIZE_32(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 32, 32, FALSE);
+ 32, 32, FALSE, NULL);
return offset;
}
@@ -23386,7 +23386,7 @@ static int dissect_a_zero_utc(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_
static int
dissect_nbap_BIT_STRING_SIZE_5(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 5, 5, FALSE);
+ 5, 5, FALSE, NULL);
return offset;
}
@@ -23399,7 +23399,7 @@ static int dissect_aodo_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tr
static int
dissect_nbap_BIT_STRING_SIZE_24(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 24, 24, FALSE);
+ 24, 24, FALSE, NULL);
return offset;
}
@@ -23427,7 +23427,7 @@ static int dissect_gps_omega_alm(tvbuff_t *tvb, int offset, asn_ctx_t *actx, pro
static int
dissect_nbap_BIT_STRING_SIZE_20(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 20, 20, FALSE);
+ 20, 20, FALSE, NULL);
return offset;
}
@@ -23573,7 +23573,7 @@ static int dissect_data_id(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tre
static int
dissect_nbap_BIT_STRING_SIZE_11(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 11, 11, FALSE);
+ 11, 11, FALSE, NULL);
return offset;
}
@@ -23636,7 +23636,7 @@ static int dissect_sat_info_almanac(tvbuff_t *tvb, int offset, asn_ctx_t *actx,
static int
dissect_nbap_BIT_STRING_SIZE_364(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 364, 364, FALSE);
+ 364, 364, FALSE, NULL);
return offset;
}
@@ -30440,7 +30440,7 @@ static int dissect_id_HSDSCH_Information_to_Modify_Unsynchronised(tvbuff_t *tvb,
static int
dissect_nbap_DsField(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 8, 8, FALSE);
+ 8, 8, FALSE, NULL);
return offset;
}
@@ -30453,7 +30453,7 @@ static int dissect_dsField(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tre
static int
dissect_nbap_GenericTrafficCategory(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 8, 8, FALSE);
+ 8, 8, FALSE, NULL);
return offset;
}
@@ -31670,7 +31670,7 @@ static int dissect_eDCH_HARQ_PO_FDD(tvbuff_t *tvb, int offset, asn_ctx_t *actx,
static int
dissect_nbap_E_DCH_MACdFlow_Multiplexing_List(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 8, 8, FALSE);
+ 8, 8, FALSE, NULL);
return offset;
}
@@ -31696,7 +31696,7 @@ static int dissect_maxBits_MACe_PDU_non_scheduled(tvbuff_t *tvb, int offset, asn
static int
dissect_nbap_HARQ_Process_Allocation_2ms_EDCH(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 8, 8, FALSE);
+ 8, 8, FALSE, NULL);
return offset;
}
diff --git a/epan/dissectors/packet-per.c b/epan/dissectors/packet-per.c
index e695b6b6c1..34a23e2205 100644
--- a/epan/dissectors/packet-per.c
+++ b/epan/dissectors/packet-per.c
@@ -1371,10 +1371,12 @@ DEBUG_ENTRY("dissect_per_sequence");
*/
guint32
-dissect_per_bit_string(tvbuff_t *tvb, guint32 offset, asn_ctx_t *actx, proto_tree *tree, int hf_index, int min_len, int max_len, gboolean has_extension)
+dissect_per_bit_string(tvbuff_t *tvb, guint32 offset, asn_ctx_t *actx, proto_tree *tree, int hf_index, int min_len, int max_len, gboolean has_extension, tvbuff_t **value_tvb)
{
+ gint val_start, val_length;
guint32 length;
header_field_info *hfi;
+ tvbuff_t *out_tvb = NULL;
hfi = (hf_index==-1) ? NULL : proto_registrar_get_nth(hf_index);
@@ -1423,6 +1425,8 @@ DEBUG_ENTRY("dissect_per_bit_string");
if((min_len==max_len)&&(min_len<65536)){
/* align to byte */
BYTE_ALIGN_OFFSET(offset);
+ val_start = offset>>3;
+ val_length = (min_len+7)/8;
if (hfi) {
proto_tree_add_item(tree, hf_index, tvb, offset>>3, (min_len+7)/8, FALSE);
}
@@ -1446,8 +1450,13 @@ DEBUG_ENTRY("dissect_per_bit_string");
proto_tree_add_item(tree, hf_index, tvb, offset>>3, (length+7)/8, FALSE);
}
}
+ val_start = offset>>3;
+ val_length = (length+7)/8;
offset+=length;
+ if (value_tvb)
+ *value_tvb = (out_tvb) ? out_tvb : tvb_new_subset(tvb, val_start, val_length, val_length);
+
return offset;
}
diff --git a/epan/dissectors/packet-per.h b/epan/dissectors/packet-per.h
index ea1c953685..d4456cfa3d 100644
--- a/epan/dissectors/packet-per.h
+++ b/epan/dissectors/packet-per.h
@@ -128,7 +128,7 @@ extern guint32 dissect_per_sequence(tvbuff_t *tvb, guint32 offset, asn_ctx_t *ac
extern guint32 dissect_per_octet_string(tvbuff_t *tvb, guint32 offset, asn_ctx_t *actx, proto_tree *tree, int hf_index, int min_len, int max_len, tvbuff_t **value_tvb);
-extern guint32 dissect_per_bit_string(tvbuff_t *tvb, guint32 offset, asn_ctx_t *actx, proto_tree *tree, int hf_index, int min_len, int max_len, gboolean has_extension);
+extern guint32 dissect_per_bit_string(tvbuff_t *tvb, guint32 offset, asn_ctx_t *actx, proto_tree *tree, int hf_index, int min_len, int max_len, gboolean has_extension, tvbuff_t **value_tvb);
extern guint32 dissect_per_restricted_character_string(tvbuff_t *tvb, guint32 offset, asn_ctx_t *actx, proto_tree *tree, int hf_index, int min_len, int max_len, const char *alphabet, int alphabet_length, tvbuff_t **value_tvb);
diff --git a/epan/dissectors/packet-ranap.c b/epan/dissectors/packet-ranap.c
index feffb4751f..91e6ee7b02 100644
--- a/epan/dissectors/packet-ranap.c
+++ b/epan/dissectors/packet-ranap.c
@@ -3795,7 +3795,7 @@ static int dissect_id_Ass_RAB_Parameters(tvbuff_t *tvb, int offset, asn_ctx_t *a
static int
dissect_ranap_BIT_STRING_SIZE_1(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 1, 1, FALSE);
+ 1, 1, FALSE, NULL);
return offset;
}
@@ -3808,7 +3808,7 @@ static int dissect_cipheringKeyFlag(tvbuff_t *tvb, int offset, asn_ctx_t *actx,
static int
dissect_ranap_BIT_STRING_SIZE_56(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 56, 56, FALSE);
+ 56, 56, FALSE, NULL);
return offset;
}
@@ -4320,7 +4320,7 @@ static int dissect_RequestedMulticastServiceList_item(tvbuff_t *tvb, int offset,
static int
dissect_ranap_MBMS_PTP_RAB_ID(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 8, 8, FALSE);
+ 8, 8, FALSE, NULL);
return offset;
}
@@ -4712,7 +4712,7 @@ static int dissect_encryptionpermittedAlgorithms(tvbuff_t *tvb, int offset, asn_
static int
dissect_ranap_EncryptionKey(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 128, 128, FALSE);
+ 128, 128, FALSE, NULL);
return offset;
}
@@ -4794,7 +4794,7 @@ static int dissect_gERAN_Classmark(tvbuff_t *tvb, int offset, asn_ctx_t *actx, p
static int
dissect_ranap_RAB_ID(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 8, 8, FALSE);
+ 8, 8, FALSE, NULL);
return offset;
}
@@ -5261,7 +5261,7 @@ static int dissect_iMEISVlist(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_
static int
dissect_ranap_BIT_STRING_SIZE_7(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 7, 7, FALSE);
+ 7, 7, FALSE, NULL);
return offset;
}
@@ -5436,7 +5436,7 @@ static int dissect_permittedAlgorithms(tvbuff_t *tvb, int offset, asn_ctx_t *act
static int
dissect_ranap_IntegrityProtectionKey(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 128, 128, FALSE);
+ 128, 128, FALSE, NULL);
return offset;
}
@@ -5701,7 +5701,7 @@ static int dissect_id_InterSystemInformation_TransparentContainer(tvbuff_t *tvb,
static int
dissect_ranap_IuSignallingConnectionIdentifier(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 24, 24, FALSE);
+ 24, 24, FALSE, NULL);
return offset;
}
@@ -6318,7 +6318,7 @@ static int dissect_id_MBMSSessionRepetitionNumber(tvbuff_t *tvb, int offset, asn
static int
dissect_ranap_NAS_SequenceNumber(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 2, 2, FALSE);
+ 2, 2, FALSE, NULL);
return offset;
}
@@ -6511,7 +6511,7 @@ static int dissect_pDP_TypeInformation(tvbuff_t *tvb, int offset, asn_ctx_t *act
static int
dissect_ranap_PositioningDataDiscriminator(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 4, 4, FALSE);
+ 4, 4, FALSE, NULL);
return offset;
}
@@ -6894,7 +6894,7 @@ static int dissect_id_RAB_ContextList_RANAP_RelocInf(tvbuff_t *tvb, int offset,
static int
dissect_ranap_TransportLayerAddress(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 1, 160, TRUE);
+ 1, 160, TRUE, NULL);
return offset;
}
@@ -7991,7 +7991,7 @@ static int dissect_id_RAB_RelocationReleaseList(tvbuff_t *tvb, int offset, asn_c
static int
dissect_ranap_NAS_SynchronisationIndicator(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 4, 4, FALSE);
+ 4, 4, FALSE, NULL);
return offset;
}
@@ -8042,7 +8042,7 @@ static int dissect_userPlaneMode(tvbuff_t *tvb, int offset, asn_ctx_t *actx, pro
static int
dissect_ranap_UP_ModeVersions(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 16, 16, FALSE);
+ 16, 16, FALSE, NULL);
return offset;
}
@@ -9073,7 +9073,7 @@ static int dissect_id_UE_ID(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tr
static int
dissect_ranap_UESBI_IuA(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 1, 128, FALSE);
+ 1, 128, FALSE, NULL);
return offset;
}
@@ -9086,7 +9086,7 @@ static int dissect_uESBI_IuA(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_t
static int
dissect_ranap_UESBI_IuB(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 1, 128, FALSE);
+ 1, 128, FALSE, NULL);
return offset;
}
diff --git a/epan/dissectors/packet-rnsap.c b/epan/dissectors/packet-rnsap.c
index f678587818..2aff9bb6d5 100644
--- a/epan/dissectors/packet-rnsap.c
+++ b/epan/dissectors/packet-rnsap.c
@@ -47,9 +47,10 @@
#include <stdio.h>
#include <string.h>
-#include "packet-rnsap.h"
#include "packet-ber.h"
#include "packet-per.h"
+#include "packet-rnsap.h"
+#include "packet-umts_rrc.h"
#define PNAME "UTRAN Iur interface Radio Network Subsystem Application Part"
#define PSNAME "RNSAP"
@@ -562,6 +563,7 @@ static int proto_rnsap = -1;
static int hf_rnsap_pdu_length = -1;
static int hf_rnsap_IE_length = -1;
+static int hf_rnsap_L3_DL_DCCH_Message_PDU = -1;
/*--- Included file: packet-rnsap-hf.c ---*/
@@ -2286,7 +2288,7 @@ static int hf_rnsap_privateIEid = -1; /* PrivateIE_ID */
static int hf_rnsap_privateIEvalue = -1; /* PrivateIEvalue */
/*--- End of included file: packet-rnsap-hf.c ---*/
-#line 559 "packet-rnsap-template.c"
+#line 561 "packet-rnsap-template.c"
/* Initialize the subtree pointers */
static int ett_rnsap = -1;
@@ -3148,7 +3150,7 @@ static gint ett_rnsap_PrivateIE_Container = -1;
static gint ett_rnsap_PrivateIE_Field = -1;
/*--- End of included file: packet-rnsap-ett.c ---*/
-#line 568 "packet-rnsap-template.c"
+#line 570 "packet-rnsap-template.c"
/* Global variables */
static proto_tree *top_tree;
@@ -7891,7 +7893,7 @@ static int dissect_id_TDD_DCHs_to_Modify(tvbuff_t *tvb, int offset, asn_ctx_t *a
static int
dissect_rnsap_TransportLayerAddress(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 1, 160, TRUE);
+ 1, 160, TRUE, NULL);
return offset;
}
@@ -10702,8 +10704,30 @@ static int dissect_id_HCS_Prio(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto
static int
dissect_rnsap_L3_Information(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
+#line 84 "rnsap.cnf"
+
+ tvbuff_t *parameter_tvb;
+
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- NO_BOUND, NO_BOUND, FALSE);
+ NO_BOUND, NO_BOUND, FALSE, &parameter_tvb);
+
+
+ if (!parameter_tvb)
+ return offset;
+
+ switch (ProcedureCode){
+
+ case RNSAP_ID_DOWNLINKSIGNALLINGTRANSFER:
+ actx->encoding =FALSE;
+ dissect_umts_rrc_DL_DCCH_Message(parameter_tvb, 0, actx, tree, hf_rnsap_L3_DL_DCCH_Message_PDU);
+ actx->encoding =TRUE;
+ break;
+ case RNSAP_ID_UPLINKSIGNALLINGTRANSFER:
+ default:
+ break;
+ }
+
+
return offset;
}
@@ -11507,7 +11531,7 @@ static int dissect_powerAdjustmentType(tvbuff_t *tvb, int offset, asn_ctx_t *act
static int
dissect_rnsap_RANAP_RelocationInformation(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- NO_BOUND, NO_BOUND, FALSE);
+ NO_BOUND, NO_BOUND, FALSE, NULL);
return offset;
}
@@ -19519,7 +19543,7 @@ static int dissect_sAT_ID(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tree
static int
dissect_rnsap_BIT_STRING_SIZE_8(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 8, 8, FALSE);
+ 8, 8, FALSE, NULL);
return offset;
}
@@ -19711,7 +19735,7 @@ static int dissect_tx_tow_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_
static int
dissect_rnsap_BIT_STRING_SIZE_14(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 14, 14, FALSE);
+ 14, 14, FALSE, NULL);
return offset;
}
@@ -19727,7 +19751,7 @@ static int dissect_idot_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tr
static int
dissect_rnsap_BIT_STRING_SIZE_2(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 2, 2, FALSE);
+ 2, 2, FALSE, NULL);
return offset;
}
@@ -19743,7 +19767,7 @@ static int dissect_ca_or_p_on_l2_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx,
static int
dissect_rnsap_BIT_STRING_SIZE_22(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 22, 22, FALSE);
+ 22, 22, FALSE, NULL);
return offset;
}
@@ -19759,7 +19783,7 @@ static int dissect_a_f_zero_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, prot
static int
dissect_rnsap_BIT_STRING_SIZE_10(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 10, 10, FALSE);
+ 10, 10, FALSE, NULL);
return offset;
}
@@ -19775,7 +19799,7 @@ static int dissect_iodc_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tr
static int
dissect_rnsap_BIT_STRING_SIZE_4(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 4, 4, FALSE);
+ 4, 4, FALSE, NULL);
return offset;
}
@@ -19788,7 +19812,7 @@ static int dissect_user_range_accuracy_index_nav(tvbuff_t *tvb, int offset, asn_
static int
dissect_rnsap_BIT_STRING_SIZE_6(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 6, 6, FALSE);
+ 6, 6, FALSE, NULL);
return offset;
}
@@ -19801,7 +19825,7 @@ static int dissect_sv_health_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, pro
static int
dissect_rnsap_BIT_STRING_SIZE_1(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 1, 1, FALSE);
+ 1, 1, FALSE, NULL);
return offset;
}
@@ -19817,7 +19841,7 @@ static int dissect_fit_interval_flag_nav(tvbuff_t *tvb, int offset, asn_ctx_t *a
static int
dissect_rnsap_BIT_STRING_SIZE_87(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 87, 87, FALSE);
+ 87, 87, FALSE, NULL);
return offset;
}
@@ -19830,7 +19854,7 @@ static int dissect_sf1_reserved_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx,
static int
dissect_rnsap_BIT_STRING_SIZE_16(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 16, 16, FALSE);
+ 16, 16, FALSE, NULL);
return offset;
}
@@ -19879,7 +19903,7 @@ static int dissect_c_rc_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tr
static int
dissect_rnsap_BIT_STRING_SIZE_32(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 32, 32, FALSE);
+ 32, 32, FALSE, NULL);
return offset;
}
@@ -19910,7 +19934,7 @@ static int dissect_a_zero_utc(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_
static int
dissect_rnsap_BIT_STRING_SIZE_5(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 5, 5, FALSE);
+ 5, 5, FALSE, NULL);
return offset;
}
@@ -19923,7 +19947,7 @@ static int dissect_aodo_nav(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tr
static int
dissect_rnsap_BIT_STRING_SIZE_24(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 24, 24, FALSE);
+ 24, 24, FALSE, NULL);
return offset;
}
@@ -19951,7 +19975,7 @@ static int dissect_a_one_utc(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_t
static int
dissect_rnsap_BIT_STRING_SIZE_20(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 20, 20, FALSE);
+ 20, 20, FALSE, NULL);
return offset;
}
@@ -20097,7 +20121,7 @@ static int dissect_dATA_ID(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tre
static int
dissect_rnsap_BIT_STRING_SIZE_11(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 11, 11, FALSE);
+ 11, 11, FALSE, NULL);
return offset;
}
@@ -20160,7 +20184,7 @@ static int dissect_satellite_Almanac_Information(tvbuff_t *tvb, int offset, asn_
static int
dissect_rnsap_BIT_STRING_SIZE_364(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 364, 364, FALSE);
+ 364, 364, FALSE, NULL);
return offset;
}
@@ -22662,7 +22686,7 @@ static int dissect_id_IPDL_TDD_ParametersLCR(tvbuff_t *tvb, int offset, asn_ctx_
static int
dissect_rnsap_CellCapabilityContainer_FDD(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 32, 32, FALSE);
+ 32, 32, FALSE, NULL);
return offset;
}
@@ -22675,7 +22699,7 @@ static int dissect_id_CellCapabilityContainer_FDD(tvbuff_t *tvb, int offset, asn
static int
dissect_rnsap_CellCapabilityContainer_TDD(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 32, 32, FALSE);
+ 32, 32, FALSE, NULL);
return offset;
}
@@ -22688,7 +22712,7 @@ static int dissect_id_CellCapabilityContainer_TDD(tvbuff_t *tvb, int offset, asn
static int
dissect_rnsap_CellCapabilityContainer_TDD_LCR(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 32, 32, FALSE);
+ 32, 32, FALSE, NULL);
return offset;
}
@@ -24603,7 +24627,7 @@ static int dissect_id_Angle_Of_Arrival_Value_LCR(tvbuff_t *tvb, int offset, asn_
static int
dissect_rnsap_GERAN_Cell_Capability(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 16, 16, FALSE);
+ 16, 16, FALSE, NULL);
return offset;
}
@@ -25618,7 +25642,7 @@ static int dissect_id_HSDSCH_Information_to_Modify_Unsynchronised(tvbuff_t *tvb,
static int
dissect_rnsap_DsField(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 8, 8, FALSE);
+ 8, 8, FALSE, NULL);
return offset;
}
@@ -25631,7 +25655,7 @@ static int dissect_dsField(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tre
static int
dissect_rnsap_GenericTrafficCategory(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 8, 8, FALSE);
+ 8, 8, FALSE, NULL);
return offset;
}
@@ -27588,7 +27612,7 @@ static int dissect_eDCH_HARQ_PO_FDD(tvbuff_t *tvb, int offset, asn_ctx_t *actx,
static int
dissect_rnsap_E_DCH_MACdFlow_Multiplexing_List(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 8, 8, FALSE);
+ 8, 8, FALSE, NULL);
return offset;
}
@@ -27614,7 +27638,7 @@ static int dissect_maxBits_MACe_PDU_non_scheduled(tvbuff_t *tvb, int offset, asn
static int
dissect_rnsap_HARQ_Process_Allocation_2ms_EDCH(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 8, 8, FALSE);
+ 8, 8, FALSE, NULL);
return offset;
}
@@ -29916,7 +29940,7 @@ static int dissect_band_Indicator(tvbuff_t *tvb, int offset, asn_ctx_t *actx, pr
static int
dissect_rnsap_BCC(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 3, 3, FALSE);
+ 3, 3, FALSE, NULL);
return offset;
}
@@ -29942,7 +29966,7 @@ static int dissect_bCCH_ARFCN(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_
static int
dissect_rnsap_NCC(tvbuff_t *tvb, int offset, asn_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
- 3, 3, FALSE);
+ 3, 3, FALSE, NULL);
return offset;
}
@@ -30282,7 +30306,7 @@ static void dissect_RNSAP_PDU_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree
/*--- End of included file: packet-rnsap-fn.c ---*/
-#line 591 "packet-rnsap-template.c"
+#line 593 "packet-rnsap-template.c"
static int dissect_rnsap_InitiatingMessageValueValue(tvbuff_t *tvb, int offset, asn_ctx_t *actx, proto_tree *tree){
@@ -32008,6 +32032,11 @@ void proto_register_rnsap(void) {
{ &hf_rnsap_IE_length,
{ "IE Length", "rnsap.ie_length", FT_UINT32, BASE_DEC,
NULL, 0, "Number of octets in the IE", HFILL }},
+ { &hf_rnsap_L3_DL_DCCH_Message_PDU,
+ { "DL-DCCH-Message", "rnsap.DL_DCCH_Message",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DL-DCCH-Message", HFILL }},
+
/*--- Included file: packet-rnsap-hfarr.c ---*/
#line 1 "packet-rnsap-hfarr.c"
@@ -38885,7 +38914,7 @@ void proto_register_rnsap(void) {
"PrivateIE-Field/privateIEvalue", HFILL }},
/*--- End of included file: packet-rnsap-hfarr.c ---*/
-#line 2317 "packet-rnsap-template.c"
+#line 2324 "packet-rnsap-template.c"
};
/* List of subtrees */
@@ -39748,7 +39777,7 @@ void proto_register_rnsap(void) {
&ett_rnsap_PrivateIE_Field,
/*--- End of included file: packet-rnsap-ettarr.c ---*/
-#line 2327 "packet-rnsap-template.c"
+#line 2334 "packet-rnsap-template.c"
};
diff --git a/tools/asn2wrs.py b/tools/asn2wrs.py
index 2cc3e9eb53..f7fe93b818 100755
--- a/tools/asn2wrs.py
+++ b/tools/asn2wrs.py
@@ -3474,7 +3474,7 @@ class BitStringType (Type):
elif (ectx.Per()):
body = ectx.eth_fn_call('dissect_%(ER)s_bit_string', ret='offset',
par=(('%(TVB)s', '%(OFFSET)s', '%(ACTX)s', '%(TREE)s', '%(HF_INDEX)s'),
- ('%(MIN_VAL)s', '%(MAX_VAL)s','%(EXT)s'),))
+ ('%(MIN_VAL)s', '%(MAX_VAL)s','%(EXT)s','%(VAL_PTR)s'),))
else:
body = '#error Can not decode %s' % (tname)
return body