Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-hnbap.c
blob8b4aa1fa64b16e625d41abc2490f06d6b7c517a7
1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
3 /* packet-hnbap.c */
4 /* asn2wrs.py -q -L -p hnbap -c ./hnbap.cnf -s ./packet-hnbap-template -D . -O ../.. HNBAP-CommonDataTypes.asn HNBAP-Constants.asn HNBAP-Containers.asn HNBAP-IEs.asn HNBAP-PDU-Contents.asn HNBAP-PDU-Descriptions.asn */
6 /* packet-hnbap-template.c
7 * Routines for UMTS Node B Application Part(HNBAP) packet dissection
8 * Copyright 2010 Neil Piercy, ip.access Limited <Neil.Piercy@ipaccess.com>
10 * Wireshark - Network traffic analyzer
11 * By Gerald Combs <gerald@wireshark.org>
12 * Copyright 1998 Gerald Combs
14 * SPDX-License-Identifier: GPL-2.0-or-later
16 * Ref: 3GPP TS 25.469 version 8.4.0 Release 8
19 #include "config.h"
21 #include <epan/packet.h>
22 #include <epan/sctpppids.h>
23 #include <epan/asn1.h>
24 #include <epan/prefs.h>
25 #include <epan/proto_data.h>
26 #include <wsutil/array.h>
28 #include "packet-per.h"
29 #include "packet-e212.h"
31 #ifdef _MSC_VER
32 /* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */
33 #pragma warning(disable:4146)
34 #endif
36 #define PNAME "UTRAN Iuh interface HNBAP signalling"
37 #define PSNAME "HNBAP"
38 #define PFNAME "hnbap"
39 /* Dissector will use SCTP PPID 20 or SCTP port. IANA assigned port = 29169*/
40 #define SCTP_PORT_HNBAP 29169
42 void proto_register_hnbap(void);
44 #define maxPrivateIEs 65535
45 #define maxProtocolExtensions 65535
46 #define maxProtocolIEs 65535
47 #define maxNrOfErrors 256
48 #define maxnoofRABs 256
49 #define maxnoofNeighbours 32
50 #define maxnoofIurhAddresses 3
52 typedef enum _ProcedureCode_enum {
53 id_HNBRegister = 1,
54 id_HNBDe_Register = 2,
55 id_UERegister = 3,
56 id_UEDe_Register = 4,
57 id_ErrorIndication = 5,
58 id_privateMessage = 6,
59 id_CSGMembershipUpdate = 7,
60 id_TNLUpdate = 9,
61 id_HNBConfigTransfer = 10,
62 id_RelocationComplete = 11
63 } ProcedureCode_enum;
65 typedef enum _ProtocolIE_ID_enum {
66 id_Cause = 1,
67 id_CriticalityDiagnostics = 2,
68 id_HNB_Identity = 3,
69 id_Context_ID = 4,
70 id_UE_Identity = 5,
71 id_LAC = 6,
72 id_RAC = 7,
73 id_HNB_Location_Information = 8,
74 id_PLMNidentity = 9,
75 id_SAC = 10,
76 id_CellIdentity = 11,
77 id_Registration_Cause = 12,
78 id_UE_Capabilities = 13,
79 id_RNC_ID = 14,
80 id_CSG_ID = 15,
81 id_BackoffTimer = 16,
82 id_HNB_Internet_Information = 17,
83 id_HNB_Cell_Access_Mode = 18,
84 id_MuxPortNumber = 19,
85 id_Service_Area_For_Broadcast = 20,
86 id_CSGMembershipStatus = 21,
87 id_RABList = 22,
88 id_HNBConfigInfo = 23,
89 id_AccessResult = 25,
90 id_Update_cause = 26,
91 id_NeighbourInfoList = 27,
92 id_NeighbourInfoRequestList = 28,
93 id_Iurh_Signalling_TNL_Address = 29,
94 id_PSC = 30,
95 id_HNB_Cell_Identifier = 31
96 } ProtocolIE_ID_enum;
98 /* Initialize the protocol and registered fields */
99 static int proto_hnbap;
101 static int hf_hnbap_BackoffTimer_PDU; /* BackoffTimer */
102 static int hf_hnbap_Cause_PDU; /* Cause */
103 static int hf_hnbap_CellIdentity_PDU; /* CellIdentity */
104 static int hf_hnbap_Context_ID_PDU; /* Context_ID */
105 static int hf_hnbap_CriticalityDiagnostics_PDU; /* CriticalityDiagnostics */
106 static int hf_hnbap_CSG_ID_PDU; /* CSG_ID */
107 static int hf_hnbap_CSGMembershipStatus_PDU; /* CSGMembershipStatus */
108 static int hf_hnbap_HNB_Cell_Access_Mode_PDU; /* HNB_Cell_Access_Mode */
109 static int hf_hnbap_HNB_Location_Information_PDU; /* HNB_Location_Information */
110 static int hf_hnbap_HNB_Identity_PDU; /* HNB_Identity */
111 static int hf_hnbap_IP_Address_PDU; /* IP_Address */
112 static int hf_hnbap_LAC_PDU; /* LAC */
113 static int hf_hnbap_MuxPortNumber_PDU; /* MuxPortNumber */
114 static int hf_hnbap_NeighbourInfoList_PDU; /* NeighbourInfoList */
115 static int hf_hnbap_NeighbourInfoRequestList_PDU; /* NeighbourInfoRequestList */
116 static int hf_hnbap_PLMNidentity_PDU; /* PLMNidentity */
117 static int hf_hnbap_PSC_PDU; /* PSC */
118 static int hf_hnbap_RABList_PDU; /* RABList */
119 static int hf_hnbap_RAC_PDU; /* RAC */
120 static int hf_hnbap_Registration_Cause_PDU; /* Registration_Cause */
121 static int hf_hnbap_RNC_ID_PDU; /* RNC_ID */
122 static int hf_hnbap_SAC_PDU; /* SAC */
123 static int hf_hnbap_UE_Capabilities_PDU; /* UE_Capabilities */
124 static int hf_hnbap_UE_Identity_PDU; /* UE_Identity */
125 static int hf_hnbap_Update_cause_PDU; /* Update_cause */
126 static int hf_hnbap_HNBRegisterRequest_PDU; /* HNBRegisterRequest */
127 static int hf_hnbap_HNBRegisterAccept_PDU; /* HNBRegisterAccept */
128 static int hf_hnbap_HNBRegisterReject_PDU; /* HNBRegisterReject */
129 static int hf_hnbap_HNBDe_Register_PDU; /* HNBDe_Register */
130 static int hf_hnbap_UERegisterRequest_PDU; /* UERegisterRequest */
131 static int hf_hnbap_UERegisterAccept_PDU; /* UERegisterAccept */
132 static int hf_hnbap_UERegisterReject_PDU; /* UERegisterReject */
133 static int hf_hnbap_UEDe_Register_PDU; /* UEDe_Register */
134 static int hf_hnbap_CSGMembershipUpdate_PDU; /* CSGMembershipUpdate */
135 static int hf_hnbap_TNLUpdateRequest_PDU; /* TNLUpdateRequest */
136 static int hf_hnbap_TNLUpdateResponse_PDU; /* TNLUpdateResponse */
137 static int hf_hnbap_TNLUpdateFailure_PDU; /* TNLUpdateFailure */
138 static int hf_hnbap_HNBConfigTransferRequest_PDU; /* HNBConfigTransferRequest */
139 static int hf_hnbap_HNBConfigTransferResponse_PDU; /* HNBConfigTransferResponse */
140 static int hf_hnbap_RelocationComplete_PDU; /* RelocationComplete */
141 static int hf_hnbap_ErrorIndication_PDU; /* ErrorIndication */
142 static int hf_hnbap_PrivateMessage_PDU; /* PrivateMessage */
143 static int hf_hnbap_HNBAP_PDU_PDU; /* HNBAP_PDU */
144 static int hf_hnbap_local; /* INTEGER_0_65535 */
145 static int hf_hnbap_global; /* OBJECT_IDENTIFIER */
146 static int hf_hnbap_ProtocolIE_Container_item; /* ProtocolIE_Field */
147 static int hf_hnbap_protocol_ie_field_id; /* ProtocolIE_ID */
148 static int hf_hnbap_criticality; /* Criticality */
149 static int hf_hnbap_ie_field_value; /* ProtocolIE_Field_value */
150 static int hf_hnbap_ProtocolExtensionContainer_item; /* ProtocolExtensionField */
151 static int hf_hnbap_id; /* ProtocolIE_ID */
152 static int hf_hnbap_extensionValue; /* T_extensionValue */
153 static int hf_hnbap_PrivateIE_Container_item; /* PrivateIE_Field */
154 static int hf_hnbap_private_ie_field_id; /* PrivateIE_ID */
155 static int hf_hnbap_private_value; /* PrivateIE_Field_value */
156 static int hf_hnbap_directionOfAltitude; /* T_directionOfAltitude */
157 static int hf_hnbap_altitude; /* INTEGER_0_32767 */
158 static int hf_hnbap_radioNetwork; /* CauseRadioNetwork */
159 static int hf_hnbap_transport; /* CauseTransport */
160 static int hf_hnbap_protocol; /* CauseProtocol */
161 static int hf_hnbap_misc; /* CauseMisc */
162 static int hf_hnbap_procedureCode; /* ProcedureCode */
163 static int hf_hnbap_triggeringMessage; /* TriggeringMessage */
164 static int hf_hnbap_procedureCriticality; /* Criticality */
165 static int hf_hnbap_iEsCriticalityDiagnostics; /* CriticalityDiagnostics_IE_List */
166 static int hf_hnbap_iE_Extensions; /* ProtocolExtensionContainer */
167 static int hf_hnbap_CriticalityDiagnostics_IE_List_item; /* CriticalityDiagnostics_IE_List_item */
168 static int hf_hnbap_iECriticality; /* Criticality */
169 static int hf_hnbap_iE_ID; /* ProtocolIE_ID */
170 static int hf_hnbap_typeOfError; /* TypeOfError */
171 static int hf_hnbap_pLMNidentity; /* PLMNidentity */
172 static int hf_hnbap_lAC; /* LAC */
173 static int hf_hnbap_cI; /* CI */
174 static int hf_hnbap_geographical_location_geographical_coordinates; /* GeographicalCoordinates */
175 static int hf_hnbap_altitudeAndDirection; /* AltitudeAndDirection */
176 static int hf_hnbap_latitudeSign; /* T_latitudeSign */
177 static int hf_hnbap_latitude; /* INTEGER_0_8388607 */
178 static int hf_hnbap_longitude; /* INTEGER_M8388608_8388607 */
179 static int hf_hnbap_cellIdentity; /* CellIdentity */
180 static int hf_hnbap_hNB_Identity_as_Cell_Identifier; /* HNB_Cell_Identifier */
181 static int hf_hnbap_hnb_RNL_Identity; /* HNB_RNL_Identity */
182 static int hf_hnbap_configurationInformation; /* ConfigurationInformation */
183 static int hf_hnbap_provided; /* HNBConfigurationInformationProvided */
184 static int hf_hnbap_missing; /* HNBConfigurationInformationMissing */
185 static int hf_hnbap_psc; /* PSC */
186 static int hf_hnbap_cSG_ID; /* CSG_ID */
187 static int hf_hnbap_hNB_Cell_Access_Mode; /* HNB_Cell_Access_Mode */
188 static int hf_hnbap_iurh_Signalling_TNL_AddressList; /* Iurh_Signalling_TNL_AddressList */
189 static int hf_hnbap_cause; /* Cause */
190 static int hf_hnbap_macroCoverageInfo; /* MacroCoverageInformation */
191 static int hf_hnbap_hnb_location_information_geographical_coordinates; /* GeographicalLocation */
192 static int hf_hnbap_hNB_Identity_Info; /* HNB_Identity_Info */
193 static int hf_hnbap_iMSIDS41; /* IMSIDS41 */
194 static int hf_hnbap_eSN; /* ESN */
195 static int hf_hnbap_ipaddress; /* T_ipaddress */
196 static int hf_hnbap_ipv4info; /* Ipv4Address */
197 static int hf_hnbap_ipv6info; /* Ipv6Address */
198 static int hf_hnbap_Iurh_Signalling_TNL_AddressList_item; /* IP_Address */
199 static int hf_hnbap_pLMNID; /* PLMNidentity */
200 static int hf_hnbap_macroCellID; /* MacroCellID */
201 static int hf_hnbap_uTRANCellID; /* UTRANCellID */
202 static int hf_hnbap_gERANCellID; /* CGI */
203 static int hf_hnbap_NeighbourInfoList_item; /* HNBConfigInfo */
204 static int hf_hnbap_NeighbourInfoRequestList_item; /* NeighbourInfoRequestItem */
205 static int hf_hnbap_pTMSI; /* PTMSI */
206 static int hf_hnbap_rAI; /* RAI */
207 static int hf_hnbap_RABList_item; /* RABListItem */
208 static int hf_hnbap_rAB_ID; /* RAB_ID */
209 static int hf_hnbap_old_transport_Info; /* TransportInfo */
210 static int hf_hnbap_new_transport_Info; /* TransportInfo */
211 static int hf_hnbap_cn_domain_indicator; /* CN_DomainIndicator */
212 static int hf_hnbap_lAI; /* LAI */
213 static int hf_hnbap_rAC; /* RAC */
214 static int hf_hnbap_tMSI; /* BIT_STRING_SIZE_32 */
215 static int hf_hnbap_transportLayerAddress; /* TransportLayerAddress */
216 static int hf_hnbap_transportAssociation; /* T_transportAssociation */
217 static int hf_hnbap_gtp_TEI; /* GTP_TEI */
218 static int hf_hnbap_bindingID; /* BindingID */
219 static int hf_hnbap_access_stratum_release_indicator; /* Access_stratum_release_indicator */
220 static int hf_hnbap_csg_capability; /* CSG_Capability */
221 static int hf_hnbap_uTRANcellID; /* CellIdentity */
222 static int hf_hnbap_iMSI; /* IMSI */
223 static int hf_hnbap_tMSILAI; /* TMSILAI */
224 static int hf_hnbap_pTMSIRAI; /* PTMSIRAI */
225 static int hf_hnbap_iMEI; /* IMEI */
226 static int hf_hnbap_iMSIESN; /* IMSIESN */
227 static int hf_hnbap_tMSIDS41; /* TMSIDS41 */
228 static int hf_hnbap_protocolIEs; /* ProtocolIE_Container */
229 static int hf_hnbap_protocolExtensions; /* ProtocolExtensionContainer */
230 static int hf_hnbap_privateIEs; /* PrivateIE_Container */
231 static int hf_hnbap_initiatingMessage; /* InitiatingMessage */
232 static int hf_hnbap_successfulOutcome; /* SuccessfulOutcome */
233 static int hf_hnbap_unsuccessfulOutcome; /* UnsuccessfulOutcome */
234 static int hf_hnbap_initiatingMessagevalue; /* InitiatingMessage_value */
235 static int hf_hnbap_successfulOutcome_value; /* SuccessfulOutcome_value */
236 static int hf_hnbap_unsuccessfulOutcome_value; /* UnsuccessfulOutcome_value */
238 /* Initialize the subtree pointers */
239 static int ett_hnbap;
240 static int ett_hnbap_imsi;
241 static int ett_hnbap_PrivateIE_ID;
242 static int ett_hnbap_ProtocolIE_Container;
243 static int ett_hnbap_ProtocolIE_Field;
244 static int ett_hnbap_ProtocolExtensionContainer;
245 static int ett_hnbap_ProtocolExtensionField;
246 static int ett_hnbap_PrivateIE_Container;
247 static int ett_hnbap_PrivateIE_Field;
248 static int ett_hnbap_AltitudeAndDirection;
249 static int ett_hnbap_Cause;
250 static int ett_hnbap_CriticalityDiagnostics;
251 static int ett_hnbap_CriticalityDiagnostics_IE_List;
252 static int ett_hnbap_CriticalityDiagnostics_IE_List_item;
253 static int ett_hnbap_CGI;
254 static int ett_hnbap_GeographicalLocation;
255 static int ett_hnbap_GeographicalCoordinates;
256 static int ett_hnbap_HNB_Cell_Identifier;
257 static int ett_hnbap_HNB_RNL_Identity;
258 static int ett_hnbap_HNBConfigInfo;
259 static int ett_hnbap_ConfigurationInformation;
260 static int ett_hnbap_HNBConfigurationInformationProvided;
261 static int ett_hnbap_HNBConfigurationInformationMissing;
262 static int ett_hnbap_HNB_Location_Information;
263 static int ett_hnbap_HNB_Identity;
264 static int ett_hnbap_IMSIESN;
265 static int ett_hnbap_IP_Address;
266 static int ett_hnbap_T_ipaddress;
267 static int ett_hnbap_Iurh_Signalling_TNL_AddressList;
268 static int ett_hnbap_LAI;
269 static int ett_hnbap_MacroCoverageInformation;
270 static int ett_hnbap_MacroCellID;
271 static int ett_hnbap_NeighbourInfoList;
272 static int ett_hnbap_NeighbourInfoRequestList;
273 static int ett_hnbap_NeighbourInfoRequestItem;
274 static int ett_hnbap_PTMSIRAI;
275 static int ett_hnbap_RABList;
276 static int ett_hnbap_RABListItem;
277 static int ett_hnbap_RAI;
278 static int ett_hnbap_TMSILAI;
279 static int ett_hnbap_TransportInfo;
280 static int ett_hnbap_T_transportAssociation;
281 static int ett_hnbap_UE_Capabilities;
282 static int ett_hnbap_UTRANCellID;
283 static int ett_hnbap_UE_Identity;
284 static int ett_hnbap_HNBRegisterRequest;
285 static int ett_hnbap_HNBRegisterAccept;
286 static int ett_hnbap_HNBRegisterReject;
287 static int ett_hnbap_HNBDe_Register;
288 static int ett_hnbap_UERegisterRequest;
289 static int ett_hnbap_UERegisterAccept;
290 static int ett_hnbap_UERegisterReject;
291 static int ett_hnbap_UEDe_Register;
292 static int ett_hnbap_CSGMembershipUpdate;
293 static int ett_hnbap_TNLUpdateRequest;
294 static int ett_hnbap_TNLUpdateResponse;
295 static int ett_hnbap_TNLUpdateFailure;
296 static int ett_hnbap_HNBConfigTransferRequest;
297 static int ett_hnbap_HNBConfigTransferResponse;
298 static int ett_hnbap_RelocationComplete;
299 static int ett_hnbap_ErrorIndication;
300 static int ett_hnbap_PrivateMessage;
301 static int ett_hnbap_HNBAP_PDU;
302 static int ett_hnbap_InitiatingMessage;
303 static int ett_hnbap_SuccessfulOutcome;
304 static int ett_hnbap_UnsuccessfulOutcome;
306 struct hnbap_private_data {
307 e212_number_type_t number_type;
310 /* Global variables */
311 static uint32_t ProcedureCode;
312 static uint32_t ProtocolIE_ID;
314 /* Dissector tables */
315 static dissector_table_t hnbap_ies_dissector_table;
316 static dissector_table_t hnbap_extension_dissector_table;
317 static dissector_table_t hnbap_proc_imsg_dissector_table;
318 static dissector_table_t hnbap_proc_sout_dissector_table;
319 static dissector_table_t hnbap_proc_uout_dissector_table;
321 static dissector_handle_t hnbap_handle;
323 static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
324 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
325 static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
326 static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
327 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *);
328 void proto_reg_handoff_hnbap(void);
330 static struct hnbap_private_data*
331 hnbap_get_private_data(packet_info *pinfo)
333 struct hnbap_private_data *hnbap_data = (struct hnbap_private_data*)p_get_proto_data(pinfo->pool, pinfo, proto_hnbap, 0);
334 if (!hnbap_data) {
335 hnbap_data = wmem_new0(pinfo->pool, struct hnbap_private_data);
336 p_add_proto_data(pinfo->pool, pinfo, proto_hnbap, 0, hnbap_data);
338 return hnbap_data;
342 static const value_string hnbap_Criticality_vals[] = {
343 { 0, "reject" },
344 { 1, "ignore" },
345 { 2, "notify" },
346 { 0, NULL }
350 static int
351 dissect_hnbap_Criticality(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
352 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
353 3, NULL, false, 0, NULL);
355 return offset;
360 static int
361 dissect_hnbap_INTEGER_0_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
362 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
363 0U, 65535U, NULL, false);
365 return offset;
370 static int
371 dissect_hnbap_OBJECT_IDENTIFIER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
372 offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
374 return offset;
378 static const value_string hnbap_PrivateIE_ID_vals[] = {
379 { 0, "local" },
380 { 1, "global" },
381 { 0, NULL }
384 static const per_choice_t PrivateIE_ID_choice[] = {
385 { 0, &hf_hnbap_local , ASN1_NO_EXTENSIONS , dissect_hnbap_INTEGER_0_65535 },
386 { 1, &hf_hnbap_global , ASN1_NO_EXTENSIONS , dissect_hnbap_OBJECT_IDENTIFIER },
387 { 0, NULL, 0, NULL }
390 static int
391 dissect_hnbap_PrivateIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
392 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
393 ett_hnbap_PrivateIE_ID, PrivateIE_ID_choice,
394 NULL);
396 return offset;
400 static const value_string hnbap_ProcedureCode_vals[] = {
401 { id_HNBRegister, "id-HNBRegister" },
402 { id_HNBDe_Register, "id-HNBDe-Register" },
403 { id_UERegister, "id-UERegister" },
404 { id_UEDe_Register, "id-UEDe-Register" },
405 { id_ErrorIndication, "id-ErrorIndication" },
406 { id_privateMessage, "id-privateMessage" },
407 { id_CSGMembershipUpdate, "id-CSGMembershipUpdate" },
408 { id_TNLUpdate, "id-TNLUpdate" },
409 { id_HNBConfigTransfer, "id-HNBConfigTransfer" },
410 { id_RelocationComplete, "id-RelocationComplete" },
411 { 0, NULL }
415 static int
416 dissect_hnbap_ProcedureCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
417 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
418 0U, 255U, &ProcedureCode, false);
420 if (strcmp(val_to_str_const(ProcedureCode, hnbap_ProcedureCode_vals, "Unknown"), "Unknown") == 0) {
421 col_set_str(actx->pinfo->cinfo, COL_INFO,
422 "Unknown Message");
423 } /* Known Procedures should be included below and broken out as ELEMENTARY names to avoid confusion */
425 return offset;
429 static const value_string hnbap_ProtocolIE_ID_vals[] = {
430 { id_Cause, "id-Cause" },
431 { id_CriticalityDiagnostics, "id-CriticalityDiagnostics" },
432 { id_HNB_Identity, "id-HNB-Identity" },
433 { id_Context_ID, "id-Context-ID" },
434 { id_UE_Identity, "id-UE-Identity" },
435 { id_LAC, "id-LAC" },
436 { id_RAC, "id-RAC" },
437 { id_HNB_Location_Information, "id-HNB-Location-Information" },
438 { id_PLMNidentity, "id-PLMNidentity" },
439 { id_SAC, "id-SAC" },
440 { id_CellIdentity, "id-CellIdentity" },
441 { id_Registration_Cause, "id-Registration-Cause" },
442 { id_UE_Capabilities, "id-UE-Capabilities" },
443 { id_RNC_ID, "id-RNC-ID" },
444 { id_CSG_ID, "id-CSG-ID" },
445 { id_BackoffTimer, "id-BackoffTimer" },
446 { id_HNB_Internet_Information, "id-HNB-Internet-Information" },
447 { id_HNB_Cell_Access_Mode, "id-HNB-Cell-Access-Mode" },
448 { id_MuxPortNumber, "id-MuxPortNumber" },
449 { id_Service_Area_For_Broadcast, "id-Service-Area-For-Broadcast" },
450 { id_CSGMembershipStatus, "id-CSGMembershipStatus" },
451 { id_RABList, "id-RABList" },
452 { id_HNBConfigInfo, "id-HNBConfigInfo" },
453 { id_AccessResult, "id-AccessResult" },
454 { id_Update_cause, "id-Update-cause" },
455 { id_NeighbourInfoList, "id-NeighbourInfoList" },
456 { id_NeighbourInfoRequestList, "id-NeighbourInfoRequestList" },
457 { id_Iurh_Signalling_TNL_Address, "id-Iurh-Signalling-TNL-Address" },
458 { id_PSC, "id-PSC" },
459 { id_HNB_Cell_Identifier, "id-HNB-Cell-Identifier" },
460 { 0, NULL }
464 static int
465 dissect_hnbap_ProtocolIE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
466 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
467 0U, maxProtocolIEs, &ProtocolIE_ID, false);
469 if (tree) {
470 proto_item_append_text(proto_item_get_parent_nth(actx->created_item, 2), ": %s",
471 val_to_str(ProtocolIE_ID, VALS(hnbap_ProtocolIE_ID_vals), "unknown (%d)"));
473 return offset;
477 static const value_string hnbap_TriggeringMessage_vals[] = {
478 { 0, "initiating-message" },
479 { 1, "successful-outcome" },
480 { 2, "unsuccessful-outcome" },
481 { 0, NULL }
485 static int
486 dissect_hnbap_TriggeringMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
487 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
488 3, NULL, false, 0, NULL);
490 return offset;
495 static int
496 dissect_hnbap_ProtocolIE_Field_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
497 offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolIEFieldValue);
499 return offset;
503 static const per_sequence_t ProtocolIE_Field_sequence[] = {
504 { &hf_hnbap_protocol_ie_field_id, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_ID },
505 { &hf_hnbap_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_Criticality },
506 { &hf_hnbap_ie_field_value, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Field_value },
507 { NULL, 0, 0, NULL }
510 static int
511 dissect_hnbap_ProtocolIE_Field(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
512 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
513 ett_hnbap_ProtocolIE_Field, ProtocolIE_Field_sequence);
515 return offset;
519 static const per_sequence_t ProtocolIE_Container_sequence_of[1] = {
520 { &hf_hnbap_ProtocolIE_Container_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Field },
523 static int
524 dissect_hnbap_ProtocolIE_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
525 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
526 ett_hnbap_ProtocolIE_Container, ProtocolIE_Container_sequence_of,
527 0, maxProtocolIEs, false);
529 return offset;
534 static int
535 dissect_hnbap_T_extensionValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
536 offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_ProtocolExtensionFieldExtensionValue);
538 return offset;
542 static const per_sequence_t ProtocolExtensionField_sequence[] = {
543 { &hf_hnbap_id , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_ID },
544 { &hf_hnbap_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_Criticality },
545 { &hf_hnbap_extensionValue, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_T_extensionValue },
546 { NULL, 0, 0, NULL }
549 static int
550 dissect_hnbap_ProtocolExtensionField(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
551 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
552 ett_hnbap_ProtocolExtensionField, ProtocolExtensionField_sequence);
554 return offset;
558 static const per_sequence_t ProtocolExtensionContainer_sequence_of[1] = {
559 { &hf_hnbap_ProtocolExtensionContainer_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolExtensionField },
562 static int
563 dissect_hnbap_ProtocolExtensionContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
564 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
565 ett_hnbap_ProtocolExtensionContainer, ProtocolExtensionContainer_sequence_of,
566 1, maxProtocolExtensions, false);
568 return offset;
573 static int
574 dissect_hnbap_PrivateIE_Field_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
575 offset = dissect_per_open_type(tvb, offset, actx, tree, hf_index, NULL);
577 return offset;
581 static const per_sequence_t PrivateIE_Field_sequence[] = {
582 { &hf_hnbap_private_ie_field_id, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_PrivateIE_ID },
583 { &hf_hnbap_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_Criticality },
584 { &hf_hnbap_private_value , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_PrivateIE_Field_value },
585 { NULL, 0, 0, NULL }
588 static int
589 dissect_hnbap_PrivateIE_Field(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
590 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
591 ett_hnbap_PrivateIE_Field, PrivateIE_Field_sequence);
593 return offset;
597 static const per_sequence_t PrivateIE_Container_sequence_of[1] = {
598 { &hf_hnbap_PrivateIE_Container_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_PrivateIE_Field },
601 static int
602 dissect_hnbap_PrivateIE_Container(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
603 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
604 ett_hnbap_PrivateIE_Container, PrivateIE_Container_sequence_of,
605 1, maxPrivateIEs, false);
607 return offset;
611 static const value_string hnbap_Access_stratum_release_indicator_vals[] = {
612 { 0, "r99" },
613 { 1, "rel-4" },
614 { 2, "rel-5" },
615 { 3, "rel-6" },
616 { 4, "rel-7" },
617 { 5, "rel-8-and-beyond" },
618 { 0, NULL }
622 static int
623 dissect_hnbap_Access_stratum_release_indicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
624 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
625 6, NULL, true, 0, NULL);
627 return offset;
632 static const value_string hnbap_T_directionOfAltitude_vals[] = {
633 { 0, "height" },
634 { 1, "depth" },
635 { 0, NULL }
639 static int
640 dissect_hnbap_T_directionOfAltitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
641 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
642 2, NULL, false, 0, NULL);
644 return offset;
649 static int
650 dissect_hnbap_INTEGER_0_32767(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
651 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
652 0U, 32767U, NULL, false);
654 return offset;
658 static const per_sequence_t AltitudeAndDirection_sequence[] = {
659 { &hf_hnbap_directionOfAltitude, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_T_directionOfAltitude },
660 { &hf_hnbap_altitude , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_INTEGER_0_32767 },
661 { NULL, 0, 0, NULL }
664 static int
665 dissect_hnbap_AltitudeAndDirection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
666 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
667 ett_hnbap_AltitudeAndDirection, AltitudeAndDirection_sequence);
669 return offset;
674 static int
675 dissect_hnbap_BackoffTimer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
676 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
677 0U, 3600U, NULL, false);
679 return offset;
684 static int
685 dissect_hnbap_BindingID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
686 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
687 1, 4, true, NULL);
689 return offset;
693 static const value_string hnbap_CauseRadioNetwork_vals[] = {
694 { 0, "overload" },
695 { 1, "unauthorised-Location" },
696 { 2, "unauthorised-HNB" },
697 { 3, "hNB-parameter-mismatch" },
698 { 4, "invalid-UE-identity" },
699 { 5, "uE-not-allowed-on-this-HNB" },
700 { 6, "uE-unauthorised" },
701 { 7, "connection-with-UE-lost" },
702 { 8, "ue-RRC-telease" },
703 { 9, "hNB-not-registered" },
704 { 10, "unspecified" },
705 { 11, "normal" },
706 { 12, "uE-relocated" },
707 { 13, "ue-registered-in-another-HNB" },
708 { 0, NULL }
712 static int
713 dissect_hnbap_CauseRadioNetwork(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
714 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
715 14, NULL, true, 0, NULL);
717 return offset;
721 static const value_string hnbap_CauseTransport_vals[] = {
722 { 0, "transport-resource-unavailable" },
723 { 1, "unspecified" },
724 { 0, NULL }
728 static int
729 dissect_hnbap_CauseTransport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
730 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
731 2, NULL, true, 0, NULL);
733 return offset;
737 static const value_string hnbap_CauseProtocol_vals[] = {
738 { 0, "transfer-syntax-error" },
739 { 1, "abstract-syntax-error-reject" },
740 { 2, "abstract-syntax-error-ignore-and-notify" },
741 { 3, "message-not-compatible-with-receiver-state" },
742 { 4, "semantic-error" },
743 { 5, "unspecified" },
744 { 6, "abstract-syntax-error-falsely-constructed-message" },
745 { 0, NULL }
749 static int
750 dissect_hnbap_CauseProtocol(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
751 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
752 7, NULL, true, 0, NULL);
754 return offset;
758 static const value_string hnbap_CauseMisc_vals[] = {
759 { 0, "processing-overload" },
760 { 1, "hardware-failure" },
761 { 2, "o-and-m-intervention" },
762 { 3, "unspecified" },
763 { 0, NULL }
767 static int
768 dissect_hnbap_CauseMisc(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
769 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
770 4, NULL, true, 0, NULL);
772 return offset;
776 static const value_string hnbap_Cause_vals[] = {
777 { 0, "radioNetwork" },
778 { 1, "transport" },
779 { 2, "protocol" },
780 { 3, "misc" },
781 { 0, NULL }
784 static const per_choice_t Cause_choice[] = {
785 { 0, &hf_hnbap_radioNetwork , ASN1_EXTENSION_ROOT , dissect_hnbap_CauseRadioNetwork },
786 { 1, &hf_hnbap_transport , ASN1_EXTENSION_ROOT , dissect_hnbap_CauseTransport },
787 { 2, &hf_hnbap_protocol , ASN1_EXTENSION_ROOT , dissect_hnbap_CauseProtocol },
788 { 3, &hf_hnbap_misc , ASN1_EXTENSION_ROOT , dissect_hnbap_CauseMisc },
789 { 0, NULL, 0, NULL }
792 static int
793 dissect_hnbap_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
794 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
795 ett_hnbap_Cause, Cause_choice,
796 NULL);
798 return offset;
803 static int
804 dissect_hnbap_CellIdentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
805 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
806 28, 28, false, NULL, 0, NULL, NULL);
808 return offset;
813 static int
814 dissect_hnbap_Context_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
815 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
816 24, 24, false, NULL, 0, NULL, NULL);
818 return offset;
822 static const value_string hnbap_TypeOfError_vals[] = {
823 { 0, "not-understood" },
824 { 1, "missing" },
825 { 0, NULL }
829 static int
830 dissect_hnbap_TypeOfError(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
831 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
832 2, NULL, true, 0, NULL);
834 return offset;
838 static const per_sequence_t CriticalityDiagnostics_IE_List_item_sequence[] = {
839 { &hf_hnbap_iECriticality , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_Criticality },
840 { &hf_hnbap_iE_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_ID },
841 { &hf_hnbap_typeOfError , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_TypeOfError },
842 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
843 { NULL, 0, 0, NULL }
846 static int
847 dissect_hnbap_CriticalityDiagnostics_IE_List_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
848 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
849 ett_hnbap_CriticalityDiagnostics_IE_List_item, CriticalityDiagnostics_IE_List_item_sequence);
851 return offset;
855 static const per_sequence_t CriticalityDiagnostics_IE_List_sequence_of[1] = {
856 { &hf_hnbap_CriticalityDiagnostics_IE_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_CriticalityDiagnostics_IE_List_item },
859 static int
860 dissect_hnbap_CriticalityDiagnostics_IE_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
861 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
862 ett_hnbap_CriticalityDiagnostics_IE_List, CriticalityDiagnostics_IE_List_sequence_of,
863 1, maxNrOfErrors, false);
865 return offset;
869 static const per_sequence_t CriticalityDiagnostics_sequence[] = {
870 { &hf_hnbap_procedureCode , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProcedureCode },
871 { &hf_hnbap_triggeringMessage, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_TriggeringMessage },
872 { &hf_hnbap_procedureCriticality, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_Criticality },
873 { &hf_hnbap_iEsCriticalityDiagnostics, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_CriticalityDiagnostics_IE_List },
874 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
875 { NULL, 0, 0, NULL }
878 static int
879 dissect_hnbap_CriticalityDiagnostics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
880 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
881 ett_hnbap_CriticalityDiagnostics, CriticalityDiagnostics_sequence);
883 return offset;
888 static int
889 dissect_hnbap_CSG_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
890 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
891 27, 27, false, NULL, 0, NULL, NULL);
893 return offset;
897 static const value_string hnbap_CSG_Capability_vals[] = {
898 { 0, "csg-capable" },
899 { 1, "not-csg-capable" },
900 { 0, NULL }
904 static int
905 dissect_hnbap_CSG_Capability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
906 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
907 2, NULL, true, 0, NULL);
909 return offset;
913 static const value_string hnbap_CSGMembershipStatus_vals[] = {
914 { 0, "member" },
915 { 1, "non-member" },
916 { 0, NULL }
920 static int
921 dissect_hnbap_CSGMembershipStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
922 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
923 2, NULL, true, 0, NULL);
925 return offset;
930 static int
931 dissect_hnbap_PLMNidentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
932 tvbuff_t *parameter_tvb;
933 struct hnbap_private_data *hnbap_data = hnbap_get_private_data(actx->pinfo);
934 e212_number_type_t number_type = hnbap_data->number_type;
935 hnbap_data->number_type = E212_NONE;
936 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
937 3, 3, false, &parameter_tvb);
939 if (parameter_tvb) {
940 dissect_e212_mcc_mnc(parameter_tvb, actx->pinfo, tree, 0, number_type, false);
943 return offset;
948 static int
949 dissect_hnbap_LAC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
950 tvbuff_t *parameter_tvb = NULL;
951 offset = dissect_per_octet_string(tvb, offset, actx, tree, -1,
952 2, 2, false, &parameter_tvb);
954 if (parameter_tvb) {
955 actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 2, ENC_BIG_ENDIAN);
959 return offset;
964 static int
965 dissect_hnbap_CI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
966 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
967 2, 2, false, NULL);
969 return offset;
973 static const per_sequence_t CGI_sequence[] = {
974 { &hf_hnbap_pLMNidentity , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_PLMNidentity },
975 { &hf_hnbap_lAC , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_LAC },
976 { &hf_hnbap_cI , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_CI },
977 { &hf_hnbap_iE_Extensions , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
978 { NULL, 0, 0, NULL }
981 static int
982 dissect_hnbap_CGI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
983 struct hnbap_private_data *hnbap_data = hnbap_get_private_data(actx->pinfo);
984 hnbap_data->number_type = E212_CGI;
985 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
986 ett_hnbap_CGI, CGI_sequence);
990 return offset;
994 static const value_string hnbap_CN_DomainIndicator_vals[] = {
995 { 0, "cs-domain" },
996 { 1, "ps-domain" },
997 { 0, NULL }
1001 static int
1002 dissect_hnbap_CN_DomainIndicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1003 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1004 2, NULL, false, 0, NULL);
1006 return offset;
1011 static int
1012 dissect_hnbap_ESN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1013 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1014 32, 32, false, NULL, 0, NULL, NULL);
1016 return offset;
1020 static const value_string hnbap_T_latitudeSign_vals[] = {
1021 { 0, "north" },
1022 { 1, "south" },
1023 { 0, NULL }
1027 static int
1028 dissect_hnbap_T_latitudeSign(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1029 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1030 2, NULL, false, 0, NULL);
1032 return offset;
1037 static int
1038 dissect_hnbap_INTEGER_0_8388607(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1039 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1040 0U, 8388607U, NULL, false);
1042 return offset;
1047 static int
1048 dissect_hnbap_INTEGER_M8388608_8388607(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1049 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1050 -8388608, 8388607U, NULL, false);
1052 return offset;
1056 static const per_sequence_t GeographicalCoordinates_sequence[] = {
1057 { &hf_hnbap_latitudeSign , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_T_latitudeSign },
1058 { &hf_hnbap_latitude , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_INTEGER_0_8388607 },
1059 { &hf_hnbap_longitude , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_INTEGER_M8388608_8388607 },
1060 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1061 { NULL, 0, 0, NULL }
1064 static int
1065 dissect_hnbap_GeographicalCoordinates(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1066 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1067 ett_hnbap_GeographicalCoordinates, GeographicalCoordinates_sequence);
1069 return offset;
1073 static const per_sequence_t GeographicalLocation_sequence[] = {
1074 { &hf_hnbap_geographical_location_geographical_coordinates, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_GeographicalCoordinates },
1075 { &hf_hnbap_altitudeAndDirection, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_AltitudeAndDirection },
1076 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1077 { NULL, 0, 0, NULL }
1080 static int
1081 dissect_hnbap_GeographicalLocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1082 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1083 ett_hnbap_GeographicalLocation, GeographicalLocation_sequence);
1085 return offset;
1090 static int
1091 dissect_hnbap_GTP_TEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1092 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1093 4, 4, false, NULL);
1095 return offset;
1099 static const value_string hnbap_HNB_Cell_Access_Mode_vals[] = {
1100 { 0, "closed" },
1101 { 1, "hybrid" },
1102 { 2, "open" },
1103 { 0, NULL }
1107 static int
1108 dissect_hnbap_HNB_Cell_Access_Mode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1109 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1110 3, NULL, true, 0, NULL);
1112 return offset;
1116 static const per_sequence_t HNB_Cell_Identifier_sequence[] = {
1117 { &hf_hnbap_pLMNidentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_PLMNidentity },
1118 { &hf_hnbap_cellIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_CellIdentity },
1119 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1120 { NULL, 0, 0, NULL }
1123 static int
1124 dissect_hnbap_HNB_Cell_Identifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1125 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1126 ett_hnbap_HNB_Cell_Identifier, HNB_Cell_Identifier_sequence);
1128 return offset;
1132 static const value_string hnbap_HNB_RNL_Identity_vals[] = {
1133 { 0, "hNB-Identity-as-Cell-Identifier" },
1134 { 0, NULL }
1137 static const per_choice_t HNB_RNL_Identity_choice[] = {
1138 { 0, &hf_hnbap_hNB_Identity_as_Cell_Identifier, ASN1_EXTENSION_ROOT , dissect_hnbap_HNB_Cell_Identifier },
1139 { 0, NULL, 0, NULL }
1142 static int
1143 dissect_hnbap_HNB_RNL_Identity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1144 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1145 ett_hnbap_HNB_RNL_Identity, HNB_RNL_Identity_choice,
1146 NULL);
1148 return offset;
1153 static int
1154 dissect_hnbap_PSC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1155 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1156 9, 9, false, NULL, 0, NULL, NULL);
1158 return offset;
1163 static int
1164 dissect_hnbap_Ipv4Address(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1165 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1166 4, 4, false, NULL);
1168 return offset;
1173 static int
1174 dissect_hnbap_Ipv6Address(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1175 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1176 16, 16, false, NULL);
1178 return offset;
1182 static const value_string hnbap_T_ipaddress_vals[] = {
1183 { 0, "ipv4info" },
1184 { 1, "ipv6info" },
1185 { 0, NULL }
1188 static const per_choice_t T_ipaddress_choice[] = {
1189 { 0, &hf_hnbap_ipv4info , ASN1_EXTENSION_ROOT , dissect_hnbap_Ipv4Address },
1190 { 1, &hf_hnbap_ipv6info , ASN1_EXTENSION_ROOT , dissect_hnbap_Ipv6Address },
1191 { 0, NULL, 0, NULL }
1194 static int
1195 dissect_hnbap_T_ipaddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1196 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1197 ett_hnbap_T_ipaddress, T_ipaddress_choice,
1198 NULL);
1200 return offset;
1204 static const per_sequence_t IP_Address_sequence[] = {
1205 { &hf_hnbap_ipaddress , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_T_ipaddress },
1206 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1207 { NULL, 0, 0, NULL }
1210 static int
1211 dissect_hnbap_IP_Address(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1212 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1213 ett_hnbap_IP_Address, IP_Address_sequence);
1215 return offset;
1219 static const per_sequence_t Iurh_Signalling_TNL_AddressList_sequence_of[1] = {
1220 { &hf_hnbap_Iurh_Signalling_TNL_AddressList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_IP_Address },
1223 static int
1224 dissect_hnbap_Iurh_Signalling_TNL_AddressList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1225 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1226 ett_hnbap_Iurh_Signalling_TNL_AddressList, Iurh_Signalling_TNL_AddressList_sequence_of,
1227 1, maxnoofIurhAddresses, false);
1229 return offset;
1233 static const per_sequence_t HNBConfigurationInformationProvided_sequence[] = {
1234 { &hf_hnbap_psc , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_PSC },
1235 { &hf_hnbap_cSG_ID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_CSG_ID },
1236 { &hf_hnbap_hNB_Cell_Access_Mode, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_HNB_Cell_Access_Mode },
1237 { &hf_hnbap_iurh_Signalling_TNL_AddressList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_Iurh_Signalling_TNL_AddressList },
1238 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1239 { NULL, 0, 0, NULL }
1242 static int
1243 dissect_hnbap_HNBConfigurationInformationProvided(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1244 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1245 ett_hnbap_HNBConfigurationInformationProvided, HNBConfigurationInformationProvided_sequence);
1247 return offset;
1251 static const per_sequence_t HNBConfigurationInformationMissing_sequence[] = {
1252 { &hf_hnbap_cause , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_Cause },
1253 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1254 { NULL, 0, 0, NULL }
1257 static int
1258 dissect_hnbap_HNBConfigurationInformationMissing(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1259 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1260 ett_hnbap_HNBConfigurationInformationMissing, HNBConfigurationInformationMissing_sequence);
1262 return offset;
1266 static const value_string hnbap_ConfigurationInformation_vals[] = {
1267 { 0, "provided" },
1268 { 1, "missing" },
1269 { 0, NULL }
1272 static const per_choice_t ConfigurationInformation_choice[] = {
1273 { 0, &hf_hnbap_provided , ASN1_EXTENSION_ROOT , dissect_hnbap_HNBConfigurationInformationProvided },
1274 { 1, &hf_hnbap_missing , ASN1_EXTENSION_ROOT , dissect_hnbap_HNBConfigurationInformationMissing },
1275 { 0, NULL, 0, NULL }
1278 static int
1279 dissect_hnbap_ConfigurationInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1280 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1281 ett_hnbap_ConfigurationInformation, ConfigurationInformation_choice,
1282 NULL);
1284 return offset;
1288 static const per_sequence_t HNBConfigInfo_sequence[] = {
1289 { &hf_hnbap_hnb_RNL_Identity, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_HNB_RNL_Identity },
1290 { &hf_hnbap_configurationInformation, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ConfigurationInformation },
1291 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1292 { NULL, 0, 0, NULL }
1295 static int
1296 dissect_hnbap_HNBConfigInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1297 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1298 ett_hnbap_HNBConfigInfo, HNBConfigInfo_sequence);
1300 return offset;
1305 static int
1306 dissect_hnbap_RAC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1307 tvbuff_t *parameter_tvb = NULL;
1308 offset = dissect_per_octet_string(tvb, offset, actx, tree, -1,
1309 1, 1, false, &parameter_tvb);
1311 if (parameter_tvb) {
1312 actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 1, ENC_BIG_ENDIAN);
1316 return offset;
1320 static const per_sequence_t UTRANCellID_sequence[] = {
1321 { &hf_hnbap_lAC , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_LAC },
1322 { &hf_hnbap_rAC , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_RAC },
1323 { &hf_hnbap_pLMNidentity , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_PLMNidentity },
1324 { &hf_hnbap_uTRANcellID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_CellIdentity },
1325 { &hf_hnbap_iE_Extensions , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1326 { NULL, 0, 0, NULL }
1329 static int
1330 dissect_hnbap_UTRANCellID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1331 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1332 ett_hnbap_UTRANCellID, UTRANCellID_sequence);
1334 return offset;
1338 static const value_string hnbap_MacroCellID_vals[] = {
1339 { 0, "uTRANCellID" },
1340 { 1, "gERANCellID" },
1341 { 0, NULL }
1344 static const per_choice_t MacroCellID_choice[] = {
1345 { 0, &hf_hnbap_uTRANCellID , ASN1_EXTENSION_ROOT , dissect_hnbap_UTRANCellID },
1346 { 1, &hf_hnbap_gERANCellID , ASN1_EXTENSION_ROOT , dissect_hnbap_CGI },
1347 { 0, NULL, 0, NULL }
1350 static int
1351 dissect_hnbap_MacroCellID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1352 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1353 ett_hnbap_MacroCellID, MacroCellID_choice,
1354 NULL);
1356 return offset;
1360 static const per_sequence_t MacroCoverageInformation_sequence[] = {
1361 { &hf_hnbap_macroCellID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_MacroCellID },
1362 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1363 { NULL, 0, 0, NULL }
1366 static int
1367 dissect_hnbap_MacroCoverageInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1368 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1369 ett_hnbap_MacroCoverageInformation, MacroCoverageInformation_sequence);
1371 return offset;
1375 static const per_sequence_t HNB_Location_Information_sequence[] = {
1376 { &hf_hnbap_macroCoverageInfo, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_MacroCoverageInformation },
1377 { &hf_hnbap_hnb_location_information_geographical_coordinates, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_GeographicalLocation },
1378 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1379 { NULL, 0, 0, NULL }
1382 static int
1383 dissect_hnbap_HNB_Location_Information(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1384 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1385 ett_hnbap_HNB_Location_Information, HNB_Location_Information_sequence);
1387 return offset;
1392 static int
1393 dissect_hnbap_HNB_Identity_Info(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1394 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1395 1, 255, false, NULL);
1397 return offset;
1401 static const per_sequence_t HNB_Identity_sequence[] = {
1402 { &hf_hnbap_hNB_Identity_Info, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_HNB_Identity_Info },
1403 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1404 { NULL, 0, 0, NULL }
1407 static int
1408 dissect_hnbap_HNB_Identity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1409 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1410 ett_hnbap_HNB_Identity, HNB_Identity_sequence);
1412 return offset;
1417 static int
1418 dissect_hnbap_IMEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1419 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1420 60, 60, false, NULL, 0, NULL, NULL);
1422 return offset;
1427 static int
1428 dissect_hnbap_IMSI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1429 tvbuff_t *parameter_tvb;
1430 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1431 3, 8, false, &parameter_tvb);
1433 if (parameter_tvb) {
1434 proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_hnbap_imsi);
1435 dissect_e212_imsi(parameter_tvb, actx->pinfo, subtree, 0, tvb_reported_length(parameter_tvb), false);
1439 return offset;
1444 static int
1445 dissect_hnbap_IMSIDS41(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1446 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1447 5, 7, false, NULL);
1449 return offset;
1453 static const per_sequence_t IMSIESN_sequence[] = {
1454 { &hf_hnbap_iMSIDS41 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_IMSIDS41 },
1455 { &hf_hnbap_eSN , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_ESN },
1456 { NULL, 0, 0, NULL }
1459 static int
1460 dissect_hnbap_IMSIESN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1461 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1462 ett_hnbap_IMSIESN, IMSIESN_sequence);
1464 return offset;
1468 static const per_sequence_t LAI_sequence[] = {
1469 { &hf_hnbap_pLMNID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_PLMNidentity },
1470 { &hf_hnbap_lAC , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_LAC },
1471 { NULL, 0, 0, NULL }
1474 static int
1475 dissect_hnbap_LAI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1476 struct hnbap_private_data *hnbap_data = hnbap_get_private_data(actx->pinfo);
1477 /* The RAI is defined in the ASN.1 as the LAI plus the RAC; don't override
1478 * the MNC/MCC field types in that case.
1480 if (hnbap_data->number_type != E212_RAI) {
1481 hnbap_data->number_type = E212_LAI;
1483 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1484 ett_hnbap_LAI, LAI_sequence);
1488 return offset;
1493 static int
1494 dissect_hnbap_MuxPortNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1495 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1496 1024U, 65535U, NULL, false);
1498 return offset;
1502 static const per_sequence_t NeighbourInfoList_sequence_of[1] = {
1503 { &hf_hnbap_NeighbourInfoList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_HNBConfigInfo },
1506 static int
1507 dissect_hnbap_NeighbourInfoList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1508 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1509 ett_hnbap_NeighbourInfoList, NeighbourInfoList_sequence_of,
1510 1, maxnoofNeighbours, false);
1512 return offset;
1516 static const per_sequence_t NeighbourInfoRequestItem_sequence[] = {
1517 { &hf_hnbap_hnb_RNL_Identity, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_HNB_RNL_Identity },
1518 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1519 { NULL, 0, 0, NULL }
1522 static int
1523 dissect_hnbap_NeighbourInfoRequestItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1524 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1525 ett_hnbap_NeighbourInfoRequestItem, NeighbourInfoRequestItem_sequence);
1527 return offset;
1531 static const per_sequence_t NeighbourInfoRequestList_sequence_of[1] = {
1532 { &hf_hnbap_NeighbourInfoRequestList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_NeighbourInfoRequestItem },
1535 static int
1536 dissect_hnbap_NeighbourInfoRequestList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1537 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1538 ett_hnbap_NeighbourInfoRequestList, NeighbourInfoRequestList_sequence_of,
1539 1, maxnoofNeighbours, false);
1541 return offset;
1546 static int
1547 dissect_hnbap_PTMSI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1548 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1549 32, 32, false, NULL, 0, NULL, NULL);
1551 return offset;
1555 static const per_sequence_t RAI_sequence[] = {
1556 { &hf_hnbap_lAI , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_LAI },
1557 { &hf_hnbap_rAC , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_RAC },
1558 { NULL, 0, 0, NULL }
1561 static int
1562 dissect_hnbap_RAI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1563 struct hnbap_private_data *hnbap_data = hnbap_get_private_data(actx->pinfo);
1564 hnbap_data->number_type = E212_RAI;
1565 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1566 ett_hnbap_RAI, RAI_sequence);
1570 return offset;
1574 static const per_sequence_t PTMSIRAI_sequence[] = {
1575 { &hf_hnbap_pTMSI , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_PTMSI },
1576 { &hf_hnbap_rAI , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_RAI },
1577 { NULL, 0, 0, NULL }
1580 static int
1581 dissect_hnbap_PTMSIRAI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1582 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1583 ett_hnbap_PTMSIRAI, PTMSIRAI_sequence);
1585 return offset;
1590 static int
1591 dissect_hnbap_RAB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1592 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1593 8, 8, false, NULL, 0, NULL, NULL);
1595 return offset;
1600 static int
1601 dissect_hnbap_TransportLayerAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1602 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1603 1, 160, true, NULL, 0, NULL, NULL);
1605 return offset;
1609 static const value_string hnbap_T_transportAssociation_vals[] = {
1610 { 0, "gtp-TEI" },
1611 { 1, "bindingID" },
1612 { 0, NULL }
1615 static const per_choice_t T_transportAssociation_choice[] = {
1616 { 0, &hf_hnbap_gtp_TEI , ASN1_EXTENSION_ROOT , dissect_hnbap_GTP_TEI },
1617 { 1, &hf_hnbap_bindingID , ASN1_EXTENSION_ROOT , dissect_hnbap_BindingID },
1618 { 0, NULL, 0, NULL }
1621 static int
1622 dissect_hnbap_T_transportAssociation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1623 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1624 ett_hnbap_T_transportAssociation, T_transportAssociation_choice,
1625 NULL);
1627 return offset;
1631 static const per_sequence_t TransportInfo_sequence[] = {
1632 { &hf_hnbap_transportLayerAddress, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_TransportLayerAddress },
1633 { &hf_hnbap_transportAssociation, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_T_transportAssociation },
1634 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1635 { NULL, 0, 0, NULL }
1638 static int
1639 dissect_hnbap_TransportInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1640 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1641 ett_hnbap_TransportInfo, TransportInfo_sequence);
1643 return offset;
1647 static const per_sequence_t RABListItem_sequence[] = {
1648 { &hf_hnbap_rAB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_RAB_ID },
1649 { &hf_hnbap_old_transport_Info, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_TransportInfo },
1650 { &hf_hnbap_new_transport_Info, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_TransportInfo },
1651 { &hf_hnbap_cn_domain_indicator, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_CN_DomainIndicator },
1652 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1653 { NULL, 0, 0, NULL }
1656 static int
1657 dissect_hnbap_RABListItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1658 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1659 ett_hnbap_RABListItem, RABListItem_sequence);
1661 return offset;
1665 static const per_sequence_t RABList_sequence_of[1] = {
1666 { &hf_hnbap_RABList_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_RABListItem },
1669 static int
1670 dissect_hnbap_RABList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1671 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1672 ett_hnbap_RABList, RABList_sequence_of,
1673 1, maxnoofRABs, false);
1675 return offset;
1679 static const value_string hnbap_Registration_Cause_vals[] = {
1680 { 0, "emergency-call" },
1681 { 1, "normal" },
1682 { 2, "ue-relocation" },
1683 { 0, NULL }
1687 static int
1688 dissect_hnbap_Registration_Cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1689 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1690 2, NULL, true, 1, NULL);
1692 return offset;
1697 static int
1698 dissect_hnbap_RNC_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1699 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1700 0U, 65535U, NULL, false);
1702 return offset;
1707 static int
1708 dissect_hnbap_SAC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1709 tvbuff_t *parameter_tvb = NULL;
1710 offset = dissect_per_octet_string(tvb, offset, actx, tree, -1,
1711 2, 2, false, &parameter_tvb);
1713 if (parameter_tvb) {
1714 actx->created_item = proto_tree_add_item(tree, hf_index, parameter_tvb, 0, 2, ENC_BIG_ENDIAN);
1718 return offset;
1723 static int
1724 dissect_hnbap_BIT_STRING_SIZE_32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1725 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1726 32, 32, false, NULL, 0, NULL, NULL);
1728 return offset;
1732 static const per_sequence_t TMSILAI_sequence[] = {
1733 { &hf_hnbap_tMSI , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_BIT_STRING_SIZE_32 },
1734 { &hf_hnbap_lAI , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_LAI },
1735 { NULL, 0, 0, NULL }
1738 static int
1739 dissect_hnbap_TMSILAI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1740 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1741 ett_hnbap_TMSILAI, TMSILAI_sequence);
1743 return offset;
1748 static int
1749 dissect_hnbap_TMSIDS41(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1750 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1751 2, 17, false, NULL);
1753 return offset;
1757 static const per_sequence_t UE_Capabilities_sequence[] = {
1758 { &hf_hnbap_access_stratum_release_indicator, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_Access_stratum_release_indicator },
1759 { &hf_hnbap_csg_capability, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_CSG_Capability },
1760 { &hf_hnbap_iE_Extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1761 { NULL, 0, 0, NULL }
1764 static int
1765 dissect_hnbap_UE_Capabilities(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1766 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1767 ett_hnbap_UE_Capabilities, UE_Capabilities_sequence);
1769 return offset;
1773 static const value_string hnbap_UE_Identity_vals[] = {
1774 { 0, "iMSI" },
1775 { 1, "tMSILAI" },
1776 { 2, "pTMSIRAI" },
1777 { 3, "iMEI" },
1778 { 4, "eSN" },
1779 { 5, "iMSIDS41" },
1780 { 6, "iMSIESN" },
1781 { 7, "tMSIDS41" },
1782 { 0, NULL }
1785 static const per_choice_t UE_Identity_choice[] = {
1786 { 0, &hf_hnbap_iMSI , ASN1_EXTENSION_ROOT , dissect_hnbap_IMSI },
1787 { 1, &hf_hnbap_tMSILAI , ASN1_EXTENSION_ROOT , dissect_hnbap_TMSILAI },
1788 { 2, &hf_hnbap_pTMSIRAI , ASN1_EXTENSION_ROOT , dissect_hnbap_PTMSIRAI },
1789 { 3, &hf_hnbap_iMEI , ASN1_EXTENSION_ROOT , dissect_hnbap_IMEI },
1790 { 4, &hf_hnbap_eSN , ASN1_EXTENSION_ROOT , dissect_hnbap_ESN },
1791 { 5, &hf_hnbap_iMSIDS41 , ASN1_EXTENSION_ROOT , dissect_hnbap_IMSIDS41 },
1792 { 6, &hf_hnbap_iMSIESN , ASN1_EXTENSION_ROOT , dissect_hnbap_IMSIESN },
1793 { 7, &hf_hnbap_tMSIDS41 , ASN1_EXTENSION_ROOT , dissect_hnbap_TMSIDS41 },
1794 { 0, NULL, 0, NULL }
1797 static int
1798 dissect_hnbap_UE_Identity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1799 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1800 ett_hnbap_UE_Identity, UE_Identity_choice,
1801 NULL);
1803 return offset;
1807 static const value_string hnbap_Update_cause_vals[] = {
1808 { 0, "relocation-preparation" },
1809 { 0, NULL }
1813 static int
1814 dissect_hnbap_Update_cause(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1815 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1816 1, NULL, true, 0, NULL);
1818 return offset;
1822 static const per_sequence_t HNBRegisterRequest_sequence[] = {
1823 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
1824 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1825 { NULL, 0, 0, NULL }
1828 static int
1829 dissect_hnbap_HNBRegisterRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1830 col_set_str(actx->pinfo->cinfo, COL_INFO,
1831 "HNB_REGISTER_REQUEST ");
1832 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1833 ett_hnbap_HNBRegisterRequest, HNBRegisterRequest_sequence);
1837 return offset;
1841 static const per_sequence_t HNBRegisterAccept_sequence[] = {
1842 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
1843 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1844 { NULL, 0, 0, NULL }
1847 static int
1848 dissect_hnbap_HNBRegisterAccept(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1849 col_set_str(actx->pinfo->cinfo, COL_INFO,
1850 "HNB_REGISTER_ACCEPT ");
1851 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1852 ett_hnbap_HNBRegisterAccept, HNBRegisterAccept_sequence);
1856 return offset;
1860 static const per_sequence_t HNBRegisterReject_sequence[] = {
1861 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
1862 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1863 { NULL, 0, 0, NULL }
1866 static int
1867 dissect_hnbap_HNBRegisterReject(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1868 col_set_str(actx->pinfo->cinfo, COL_INFO,
1869 "HNB_REGISTER_REJECT ");
1870 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1871 ett_hnbap_HNBRegisterReject, HNBRegisterReject_sequence);
1875 return offset;
1879 static const per_sequence_t HNBDe_Register_sequence[] = {
1880 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
1881 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1882 { NULL, 0, 0, NULL }
1885 static int
1886 dissect_hnbap_HNBDe_Register(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1887 col_set_str(actx->pinfo->cinfo, COL_INFO,
1888 "HNB_DE-REGISTER ");
1889 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1890 ett_hnbap_HNBDe_Register, HNBDe_Register_sequence);
1894 return offset;
1898 static const per_sequence_t UERegisterRequest_sequence[] = {
1899 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
1900 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1901 { NULL, 0, 0, NULL }
1904 static int
1905 dissect_hnbap_UERegisterRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1906 col_set_str(actx->pinfo->cinfo, COL_INFO,
1907 "UE_REGISTER_REQUEST ");
1908 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1909 ett_hnbap_UERegisterRequest, UERegisterRequest_sequence);
1913 return offset;
1917 static const per_sequence_t UERegisterAccept_sequence[] = {
1918 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
1919 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1920 { NULL, 0, 0, NULL }
1923 static int
1924 dissect_hnbap_UERegisterAccept(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1925 col_set_str(actx->pinfo->cinfo, COL_INFO,
1926 "UE_REGISTER_ACCEPT ");
1927 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1928 ett_hnbap_UERegisterAccept, UERegisterAccept_sequence);
1932 return offset;
1936 static const per_sequence_t UERegisterReject_sequence[] = {
1937 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
1938 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1939 { NULL, 0, 0, NULL }
1942 static int
1943 dissect_hnbap_UERegisterReject(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1944 col_set_str(actx->pinfo->cinfo, COL_INFO,
1945 "UE_REGISTER_REJECT ");
1946 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1947 ett_hnbap_UERegisterReject, UERegisterReject_sequence);
1951 return offset;
1955 static const per_sequence_t UEDe_Register_sequence[] = {
1956 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
1957 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1958 { NULL, 0, 0, NULL }
1961 static int
1962 dissect_hnbap_UEDe_Register(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1963 col_set_str(actx->pinfo->cinfo, COL_INFO,
1964 "UE_DE-REGISTER ");
1965 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1966 ett_hnbap_UEDe_Register, UEDe_Register_sequence);
1970 return offset;
1974 static const per_sequence_t CSGMembershipUpdate_sequence[] = {
1975 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
1976 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1977 { NULL, 0, 0, NULL }
1980 static int
1981 dissect_hnbap_CSGMembershipUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1982 col_set_str(actx->pinfo->cinfo, COL_INFO,
1983 "CSG_MEMBERSHIP_UPDATE_MESSAGE ");
1984 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1985 ett_hnbap_CSGMembershipUpdate, CSGMembershipUpdate_sequence);
1989 return offset;
1993 static const per_sequence_t TNLUpdateRequest_sequence[] = {
1994 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
1995 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
1996 { NULL, 0, 0, NULL }
1999 static int
2000 dissect_hnbap_TNLUpdateRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2001 col_set_str(actx->pinfo->cinfo, COL_INFO,
2002 "TNL_UPDATE_REQUEST_MESSAGE ");
2003 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2004 ett_hnbap_TNLUpdateRequest, TNLUpdateRequest_sequence);
2007 return offset;
2011 static const per_sequence_t TNLUpdateResponse_sequence[] = {
2012 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
2013 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
2014 { NULL, 0, 0, NULL }
2017 static int
2018 dissect_hnbap_TNLUpdateResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2019 col_set_str(actx->pinfo->cinfo, COL_INFO,
2020 "TNL_UPDATE_RESPONSE_MESSAGE ");
2021 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2022 ett_hnbap_TNLUpdateResponse, TNLUpdateResponse_sequence);
2025 return offset;
2029 static const per_sequence_t TNLUpdateFailure_sequence[] = {
2030 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
2031 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
2032 { NULL, 0, 0, NULL }
2035 static int
2036 dissect_hnbap_TNLUpdateFailure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2037 col_set_str(actx->pinfo->cinfo, COL_INFO,
2038 "TNL_UPDATE_FAILURE_MESSAGE ");
2039 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2040 ett_hnbap_TNLUpdateFailure, TNLUpdateFailure_sequence);
2043 return offset;
2047 static const per_sequence_t HNBConfigTransferRequest_sequence[] = {
2048 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
2049 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
2050 { NULL, 0, 0, NULL }
2053 static int
2054 dissect_hnbap_HNBConfigTransferRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2055 col_set_str(actx->pinfo->cinfo, COL_INFO,
2056 "HNB_CONFIG_TRANSFER_REQUEST_MESSAGE ");
2057 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2058 ett_hnbap_HNBConfigTransferRequest, HNBConfigTransferRequest_sequence);
2061 return offset;
2065 static const per_sequence_t HNBConfigTransferResponse_sequence[] = {
2066 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
2067 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
2068 { NULL, 0, 0, NULL }
2071 static int
2072 dissect_hnbap_HNBConfigTransferResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2073 col_set_str(actx->pinfo->cinfo, COL_INFO,
2074 "HNB_CONFIG_TRANSFER_RESPONSE_MESSAGE ");
2075 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2076 ett_hnbap_HNBConfigTransferResponse, HNBConfigTransferResponse_sequence);
2079 return offset;
2083 static const per_sequence_t RelocationComplete_sequence[] = {
2084 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
2085 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
2086 { NULL, 0, 0, NULL }
2089 static int
2090 dissect_hnbap_RelocationComplete(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2091 col_set_str(actx->pinfo->cinfo, COL_INFO,
2092 "RELOCATION_COMPLETE_MESSAGE ");
2093 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2094 ett_hnbap_RelocationComplete, RelocationComplete_sequence);
2098 return offset;
2102 static const per_sequence_t ErrorIndication_sequence[] = {
2103 { &hf_hnbap_protocolIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_ProtocolIE_Container },
2104 { &hf_hnbap_protocolExtensions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_hnbap_ProtocolExtensionContainer },
2105 { NULL, 0, 0, NULL }
2108 static int
2109 dissect_hnbap_ErrorIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2110 col_set_str(actx->pinfo->cinfo, COL_INFO,
2111 "ERROR_INDICATION ");
2112 col_set_fence(actx->pinfo->cinfo, COL_INFO); /* Protect info from CriticalityDiagnostics decodes */
2113 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2114 ett_hnbap_ErrorIndication, ErrorIndication_sequence);
2118 return offset;
2122 static const per_sequence_t PrivateMessage_sequence[] = {
2123 { &hf_hnbap_privateIEs , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_hnbap_PrivateIE_Container },
2124 { NULL, 0, 0, NULL }
2127 static int
2128 dissect_hnbap_PrivateMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2129 col_set_str(actx->pinfo->cinfo, COL_INFO,
2130 "PRIVATE_MESSAGE ");
2131 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2132 ett_hnbap_PrivateMessage, PrivateMessage_sequence);
2136 return offset;
2141 static int
2142 dissect_hnbap_InitiatingMessage_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2143 offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_InitiatingMessageValue);
2145 return offset;
2149 static const per_sequence_t InitiatingMessage_sequence[] = {
2150 { &hf_hnbap_procedureCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_ProcedureCode },
2151 { &hf_hnbap_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_Criticality },
2152 { &hf_hnbap_initiatingMessagevalue, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_InitiatingMessage_value },
2153 { NULL, 0, 0, NULL }
2156 static int
2157 dissect_hnbap_InitiatingMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2158 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2159 ett_hnbap_InitiatingMessage, InitiatingMessage_sequence);
2161 return offset;
2166 static int
2167 dissect_hnbap_SuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2168 offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_SuccessfulOutcomeValue);
2170 return offset;
2174 static const per_sequence_t SuccessfulOutcome_sequence[] = {
2175 { &hf_hnbap_procedureCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_ProcedureCode },
2176 { &hf_hnbap_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_Criticality },
2177 { &hf_hnbap_successfulOutcome_value, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_SuccessfulOutcome_value },
2178 { NULL, 0, 0, NULL }
2181 static int
2182 dissect_hnbap_SuccessfulOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2183 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2184 ett_hnbap_SuccessfulOutcome, SuccessfulOutcome_sequence);
2186 return offset;
2191 static int
2192 dissect_hnbap_UnsuccessfulOutcome_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2193 offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_UnsuccessfulOutcomeValue);
2195 return offset;
2199 static const per_sequence_t UnsuccessfulOutcome_sequence[] = {
2200 { &hf_hnbap_procedureCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_ProcedureCode },
2201 { &hf_hnbap_criticality , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_Criticality },
2202 { &hf_hnbap_unsuccessfulOutcome_value, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_hnbap_UnsuccessfulOutcome_value },
2203 { NULL, 0, 0, NULL }
2206 static int
2207 dissect_hnbap_UnsuccessfulOutcome(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2208 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2209 ett_hnbap_UnsuccessfulOutcome, UnsuccessfulOutcome_sequence);
2211 return offset;
2215 static const value_string hnbap_HNBAP_PDU_vals[] = {
2216 { 0, "initiatingMessage" },
2217 { 1, "successfulOutcome" },
2218 { 2, "unsuccessfulOutcome" },
2219 { 0, NULL }
2222 static const per_choice_t HNBAP_PDU_choice[] = {
2223 { 0, &hf_hnbap_initiatingMessage, ASN1_EXTENSION_ROOT , dissect_hnbap_InitiatingMessage },
2224 { 1, &hf_hnbap_successfulOutcome, ASN1_EXTENSION_ROOT , dissect_hnbap_SuccessfulOutcome },
2225 { 2, &hf_hnbap_unsuccessfulOutcome, ASN1_EXTENSION_ROOT , dissect_hnbap_UnsuccessfulOutcome },
2226 { 0, NULL, 0, NULL }
2229 static int
2230 dissect_hnbap_HNBAP_PDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2231 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2232 ett_hnbap_HNBAP_PDU, HNBAP_PDU_choice,
2233 NULL);
2235 return offset;
2238 /*--- PDUs ---*/
2240 static int dissect_BackoffTimer_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2241 int offset = 0;
2242 asn1_ctx_t asn1_ctx;
2243 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2244 offset = dissect_hnbap_BackoffTimer(tvb, offset, &asn1_ctx, tree, hf_hnbap_BackoffTimer_PDU);
2245 offset += 7; offset >>= 3;
2246 return offset;
2248 static int dissect_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2249 int offset = 0;
2250 asn1_ctx_t asn1_ctx;
2251 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2252 offset = dissect_hnbap_Cause(tvb, offset, &asn1_ctx, tree, hf_hnbap_Cause_PDU);
2253 offset += 7; offset >>= 3;
2254 return offset;
2256 static int dissect_CellIdentity_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2257 int offset = 0;
2258 asn1_ctx_t asn1_ctx;
2259 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2260 offset = dissect_hnbap_CellIdentity(tvb, offset, &asn1_ctx, tree, hf_hnbap_CellIdentity_PDU);
2261 offset += 7; offset >>= 3;
2262 return offset;
2264 static int dissect_Context_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2265 int offset = 0;
2266 asn1_ctx_t asn1_ctx;
2267 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2268 offset = dissect_hnbap_Context_ID(tvb, offset, &asn1_ctx, tree, hf_hnbap_Context_ID_PDU);
2269 offset += 7; offset >>= 3;
2270 return offset;
2272 static int dissect_CriticalityDiagnostics_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2273 int offset = 0;
2274 asn1_ctx_t asn1_ctx;
2275 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2276 offset = dissect_hnbap_CriticalityDiagnostics(tvb, offset, &asn1_ctx, tree, hf_hnbap_CriticalityDiagnostics_PDU);
2277 offset += 7; offset >>= 3;
2278 return offset;
2280 static int dissect_CSG_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2281 int offset = 0;
2282 asn1_ctx_t asn1_ctx;
2283 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2284 offset = dissect_hnbap_CSG_ID(tvb, offset, &asn1_ctx, tree, hf_hnbap_CSG_ID_PDU);
2285 offset += 7; offset >>= 3;
2286 return offset;
2288 static int dissect_CSGMembershipStatus_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2289 int offset = 0;
2290 asn1_ctx_t asn1_ctx;
2291 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2292 offset = dissect_hnbap_CSGMembershipStatus(tvb, offset, &asn1_ctx, tree, hf_hnbap_CSGMembershipStatus_PDU);
2293 offset += 7; offset >>= 3;
2294 return offset;
2296 static int dissect_HNB_Cell_Access_Mode_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2297 int offset = 0;
2298 asn1_ctx_t asn1_ctx;
2299 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2300 offset = dissect_hnbap_HNB_Cell_Access_Mode(tvb, offset, &asn1_ctx, tree, hf_hnbap_HNB_Cell_Access_Mode_PDU);
2301 offset += 7; offset >>= 3;
2302 return offset;
2304 static int dissect_HNB_Location_Information_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2305 int offset = 0;
2306 asn1_ctx_t asn1_ctx;
2307 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2308 offset = dissect_hnbap_HNB_Location_Information(tvb, offset, &asn1_ctx, tree, hf_hnbap_HNB_Location_Information_PDU);
2309 offset += 7; offset >>= 3;
2310 return offset;
2312 static int dissect_HNB_Identity_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2313 int offset = 0;
2314 asn1_ctx_t asn1_ctx;
2315 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2316 offset = dissect_hnbap_HNB_Identity(tvb, offset, &asn1_ctx, tree, hf_hnbap_HNB_Identity_PDU);
2317 offset += 7; offset >>= 3;
2318 return offset;
2320 static int dissect_IP_Address_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2321 int offset = 0;
2322 asn1_ctx_t asn1_ctx;
2323 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2324 offset = dissect_hnbap_IP_Address(tvb, offset, &asn1_ctx, tree, hf_hnbap_IP_Address_PDU);
2325 offset += 7; offset >>= 3;
2326 return offset;
2328 static int dissect_LAC_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2329 int offset = 0;
2330 asn1_ctx_t asn1_ctx;
2331 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2332 offset = dissect_hnbap_LAC(tvb, offset, &asn1_ctx, tree, hf_hnbap_LAC_PDU);
2333 offset += 7; offset >>= 3;
2334 return offset;
2336 static int dissect_MuxPortNumber_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2337 int offset = 0;
2338 asn1_ctx_t asn1_ctx;
2339 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2340 offset = dissect_hnbap_MuxPortNumber(tvb, offset, &asn1_ctx, tree, hf_hnbap_MuxPortNumber_PDU);
2341 offset += 7; offset >>= 3;
2342 return offset;
2344 static int dissect_NeighbourInfoList_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2345 int offset = 0;
2346 asn1_ctx_t asn1_ctx;
2347 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2348 offset = dissect_hnbap_NeighbourInfoList(tvb, offset, &asn1_ctx, tree, hf_hnbap_NeighbourInfoList_PDU);
2349 offset += 7; offset >>= 3;
2350 return offset;
2352 static int dissect_NeighbourInfoRequestList_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2353 int offset = 0;
2354 asn1_ctx_t asn1_ctx;
2355 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2356 offset = dissect_hnbap_NeighbourInfoRequestList(tvb, offset, &asn1_ctx, tree, hf_hnbap_NeighbourInfoRequestList_PDU);
2357 offset += 7; offset >>= 3;
2358 return offset;
2360 static int dissect_PLMNidentity_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2361 int offset = 0;
2362 asn1_ctx_t asn1_ctx;
2363 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2364 offset = dissect_hnbap_PLMNidentity(tvb, offset, &asn1_ctx, tree, hf_hnbap_PLMNidentity_PDU);
2365 offset += 7; offset >>= 3;
2366 return offset;
2368 static int dissect_PSC_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2369 int offset = 0;
2370 asn1_ctx_t asn1_ctx;
2371 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2372 offset = dissect_hnbap_PSC(tvb, offset, &asn1_ctx, tree, hf_hnbap_PSC_PDU);
2373 offset += 7; offset >>= 3;
2374 return offset;
2376 static int dissect_RABList_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2377 int offset = 0;
2378 asn1_ctx_t asn1_ctx;
2379 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2380 offset = dissect_hnbap_RABList(tvb, offset, &asn1_ctx, tree, hf_hnbap_RABList_PDU);
2381 offset += 7; offset >>= 3;
2382 return offset;
2384 static int dissect_RAC_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2385 int offset = 0;
2386 asn1_ctx_t asn1_ctx;
2387 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2388 offset = dissect_hnbap_RAC(tvb, offset, &asn1_ctx, tree, hf_hnbap_RAC_PDU);
2389 offset += 7; offset >>= 3;
2390 return offset;
2392 static int dissect_Registration_Cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2393 int offset = 0;
2394 asn1_ctx_t asn1_ctx;
2395 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2396 offset = dissect_hnbap_Registration_Cause(tvb, offset, &asn1_ctx, tree, hf_hnbap_Registration_Cause_PDU);
2397 offset += 7; offset >>= 3;
2398 return offset;
2400 static int dissect_RNC_ID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2401 int offset = 0;
2402 asn1_ctx_t asn1_ctx;
2403 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2404 offset = dissect_hnbap_RNC_ID(tvb, offset, &asn1_ctx, tree, hf_hnbap_RNC_ID_PDU);
2405 offset += 7; offset >>= 3;
2406 return offset;
2408 static int dissect_SAC_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2409 int offset = 0;
2410 asn1_ctx_t asn1_ctx;
2411 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2412 offset = dissect_hnbap_SAC(tvb, offset, &asn1_ctx, tree, hf_hnbap_SAC_PDU);
2413 offset += 7; offset >>= 3;
2414 return offset;
2416 static int dissect_UE_Capabilities_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2417 int offset = 0;
2418 asn1_ctx_t asn1_ctx;
2419 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2420 offset = dissect_hnbap_UE_Capabilities(tvb, offset, &asn1_ctx, tree, hf_hnbap_UE_Capabilities_PDU);
2421 offset += 7; offset >>= 3;
2422 return offset;
2424 static int dissect_UE_Identity_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2425 int offset = 0;
2426 asn1_ctx_t asn1_ctx;
2427 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2428 offset = dissect_hnbap_UE_Identity(tvb, offset, &asn1_ctx, tree, hf_hnbap_UE_Identity_PDU);
2429 offset += 7; offset >>= 3;
2430 return offset;
2432 static int dissect_Update_cause_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2433 int offset = 0;
2434 asn1_ctx_t asn1_ctx;
2435 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2436 offset = dissect_hnbap_Update_cause(tvb, offset, &asn1_ctx, tree, hf_hnbap_Update_cause_PDU);
2437 offset += 7; offset >>= 3;
2438 return offset;
2440 static int dissect_HNBRegisterRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2441 int offset = 0;
2442 asn1_ctx_t asn1_ctx;
2443 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2444 offset = dissect_hnbap_HNBRegisterRequest(tvb, offset, &asn1_ctx, tree, hf_hnbap_HNBRegisterRequest_PDU);
2445 offset += 7; offset >>= 3;
2446 return offset;
2448 static int dissect_HNBRegisterAccept_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2449 int offset = 0;
2450 asn1_ctx_t asn1_ctx;
2451 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2452 offset = dissect_hnbap_HNBRegisterAccept(tvb, offset, &asn1_ctx, tree, hf_hnbap_HNBRegisterAccept_PDU);
2453 offset += 7; offset >>= 3;
2454 return offset;
2456 static int dissect_HNBRegisterReject_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2457 int offset = 0;
2458 asn1_ctx_t asn1_ctx;
2459 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2460 offset = dissect_hnbap_HNBRegisterReject(tvb, offset, &asn1_ctx, tree, hf_hnbap_HNBRegisterReject_PDU);
2461 offset += 7; offset >>= 3;
2462 return offset;
2464 static int dissect_HNBDe_Register_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2465 int offset = 0;
2466 asn1_ctx_t asn1_ctx;
2467 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2468 offset = dissect_hnbap_HNBDe_Register(tvb, offset, &asn1_ctx, tree, hf_hnbap_HNBDe_Register_PDU);
2469 offset += 7; offset >>= 3;
2470 return offset;
2472 static int dissect_UERegisterRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2473 int offset = 0;
2474 asn1_ctx_t asn1_ctx;
2475 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2476 offset = dissect_hnbap_UERegisterRequest(tvb, offset, &asn1_ctx, tree, hf_hnbap_UERegisterRequest_PDU);
2477 offset += 7; offset >>= 3;
2478 return offset;
2480 static int dissect_UERegisterAccept_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2481 int offset = 0;
2482 asn1_ctx_t asn1_ctx;
2483 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2484 offset = dissect_hnbap_UERegisterAccept(tvb, offset, &asn1_ctx, tree, hf_hnbap_UERegisterAccept_PDU);
2485 offset += 7; offset >>= 3;
2486 return offset;
2488 static int dissect_UERegisterReject_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2489 int offset = 0;
2490 asn1_ctx_t asn1_ctx;
2491 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2492 offset = dissect_hnbap_UERegisterReject(tvb, offset, &asn1_ctx, tree, hf_hnbap_UERegisterReject_PDU);
2493 offset += 7; offset >>= 3;
2494 return offset;
2496 static int dissect_UEDe_Register_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2497 int offset = 0;
2498 asn1_ctx_t asn1_ctx;
2499 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2500 offset = dissect_hnbap_UEDe_Register(tvb, offset, &asn1_ctx, tree, hf_hnbap_UEDe_Register_PDU);
2501 offset += 7; offset >>= 3;
2502 return offset;
2504 static int dissect_CSGMembershipUpdate_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2505 int offset = 0;
2506 asn1_ctx_t asn1_ctx;
2507 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2508 offset = dissect_hnbap_CSGMembershipUpdate(tvb, offset, &asn1_ctx, tree, hf_hnbap_CSGMembershipUpdate_PDU);
2509 offset += 7; offset >>= 3;
2510 return offset;
2512 static int dissect_TNLUpdateRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2513 int offset = 0;
2514 asn1_ctx_t asn1_ctx;
2515 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2516 offset = dissect_hnbap_TNLUpdateRequest(tvb, offset, &asn1_ctx, tree, hf_hnbap_TNLUpdateRequest_PDU);
2517 offset += 7; offset >>= 3;
2518 return offset;
2520 static int dissect_TNLUpdateResponse_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2521 int offset = 0;
2522 asn1_ctx_t asn1_ctx;
2523 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2524 offset = dissect_hnbap_TNLUpdateResponse(tvb, offset, &asn1_ctx, tree, hf_hnbap_TNLUpdateResponse_PDU);
2525 offset += 7; offset >>= 3;
2526 return offset;
2528 static int dissect_TNLUpdateFailure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2529 int offset = 0;
2530 asn1_ctx_t asn1_ctx;
2531 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2532 offset = dissect_hnbap_TNLUpdateFailure(tvb, offset, &asn1_ctx, tree, hf_hnbap_TNLUpdateFailure_PDU);
2533 offset += 7; offset >>= 3;
2534 return offset;
2536 static int dissect_HNBConfigTransferRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2537 int offset = 0;
2538 asn1_ctx_t asn1_ctx;
2539 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2540 offset = dissect_hnbap_HNBConfigTransferRequest(tvb, offset, &asn1_ctx, tree, hf_hnbap_HNBConfigTransferRequest_PDU);
2541 offset += 7; offset >>= 3;
2542 return offset;
2544 static int dissect_HNBConfigTransferResponse_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2545 int offset = 0;
2546 asn1_ctx_t asn1_ctx;
2547 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2548 offset = dissect_hnbap_HNBConfigTransferResponse(tvb, offset, &asn1_ctx, tree, hf_hnbap_HNBConfigTransferResponse_PDU);
2549 offset += 7; offset >>= 3;
2550 return offset;
2552 static int dissect_RelocationComplete_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2553 int offset = 0;
2554 asn1_ctx_t asn1_ctx;
2555 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2556 offset = dissect_hnbap_RelocationComplete(tvb, offset, &asn1_ctx, tree, hf_hnbap_RelocationComplete_PDU);
2557 offset += 7; offset >>= 3;
2558 return offset;
2560 static int dissect_ErrorIndication_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2561 int offset = 0;
2562 asn1_ctx_t asn1_ctx;
2563 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2564 offset = dissect_hnbap_ErrorIndication(tvb, offset, &asn1_ctx, tree, hf_hnbap_ErrorIndication_PDU);
2565 offset += 7; offset >>= 3;
2566 return offset;
2568 static int dissect_PrivateMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2569 int offset = 0;
2570 asn1_ctx_t asn1_ctx;
2571 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2572 offset = dissect_hnbap_PrivateMessage(tvb, offset, &asn1_ctx, tree, hf_hnbap_PrivateMessage_PDU);
2573 offset += 7; offset >>= 3;
2574 return offset;
2576 static int dissect_HNBAP_PDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2577 int offset = 0;
2578 asn1_ctx_t asn1_ctx;
2579 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2580 offset = dissect_hnbap_HNBAP_PDU(tvb, offset, &asn1_ctx, tree, hf_hnbap_HNBAP_PDU_PDU);
2581 offset += 7; offset >>= 3;
2582 return offset;
2586 static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2588 return (dissector_try_uint_with_data(hnbap_ies_dissector_table, ProtocolIE_ID, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
2591 static int dissect_ProtocolExtensionFieldExtensionValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2593 return (dissector_try_uint_with_data(hnbap_extension_dissector_table, ProtocolIE_ID, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
2595 #if 0
2596 static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2598 if (!ProcedureCode) return 0;
2599 return (dissector_try_string_with_data(hnbap_proc_imsg_dissector_table, ProcedureCode, tvb, pinfo, tree, true, NULL)) ? tvb_captured_length(tvb) : 0;
2602 static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2604 if (!ProcedureCode) return 0;
2605 return (dissector_try_string_with_data(hnbap_proc_sout_dissector_table, ProcedureCode, tvb, pinfo, tree, true, NULL)) ? tvb_captured_length(tvb) : 0;
2608 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2610 if (!ProcedureCode) return 0;
2611 return (dissector_try_string_with_data(hnbap_proc_uout_dissector_table, ProcedureCode, tvb, pinfo, tree, true, NULL)) ? tvb_captured_length(tvb) : 0;
2613 #endif
2615 static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2617 return (dissector_try_uint_with_data(hnbap_proc_imsg_dissector_table, ProcedureCode, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
2620 static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2622 return (dissector_try_uint_with_data(hnbap_proc_sout_dissector_table, ProcedureCode, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
2625 static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2627 return (dissector_try_uint_with_data(hnbap_proc_uout_dissector_table, ProcedureCode, tvb, pinfo, tree, false, NULL)) ? tvb_captured_length(tvb) : 0;
2630 static int
2631 dissect_hnbap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
2633 proto_item *hnbap_item = NULL;
2634 proto_tree *hnbap_tree = NULL;
2636 /* make entry in the Protocol column on summary display */
2637 col_set_str(pinfo->cinfo, COL_PROTOCOL, "HNBAP");
2639 /* create the hnbap protocol tree */
2640 hnbap_item = proto_tree_add_item(tree, proto_hnbap, tvb, 0, -1, ENC_NA);
2641 hnbap_tree = proto_item_add_subtree(hnbap_item, ett_hnbap);
2643 return dissect_HNBAP_PDU_PDU(tvb, pinfo, hnbap_tree, data);
2646 /*--- proto_register_hnbap -------------------------------------------*/
2647 void proto_register_hnbap(void) {
2649 /* List of fields */
2651 static hf_register_info hf[] = {
2653 { &hf_hnbap_BackoffTimer_PDU,
2654 { "BackoffTimer", "hnbap.BackoffTimer",
2655 FT_UINT32, BASE_DEC, NULL, 0,
2656 NULL, HFILL }},
2657 { &hf_hnbap_Cause_PDU,
2658 { "Cause", "hnbap.Cause",
2659 FT_UINT32, BASE_DEC, VALS(hnbap_Cause_vals), 0,
2660 NULL, HFILL }},
2661 { &hf_hnbap_CellIdentity_PDU,
2662 { "CellIdentity", "hnbap.CellIdentity",
2663 FT_BYTES, BASE_NONE, NULL, 0,
2664 NULL, HFILL }},
2665 { &hf_hnbap_Context_ID_PDU,
2666 { "Context-ID", "hnbap.Context_ID",
2667 FT_BYTES, BASE_NONE, NULL, 0,
2668 NULL, HFILL }},
2669 { &hf_hnbap_CriticalityDiagnostics_PDU,
2670 { "CriticalityDiagnostics", "hnbap.CriticalityDiagnostics_element",
2671 FT_NONE, BASE_NONE, NULL, 0,
2672 NULL, HFILL }},
2673 { &hf_hnbap_CSG_ID_PDU,
2674 { "CSG-ID", "hnbap.CSG_ID",
2675 FT_BYTES, BASE_NONE, NULL, 0,
2676 NULL, HFILL }},
2677 { &hf_hnbap_CSGMembershipStatus_PDU,
2678 { "CSGMembershipStatus", "hnbap.CSGMembershipStatus",
2679 FT_UINT32, BASE_DEC, VALS(hnbap_CSGMembershipStatus_vals), 0,
2680 NULL, HFILL }},
2681 { &hf_hnbap_HNB_Cell_Access_Mode_PDU,
2682 { "HNB-Cell-Access-Mode", "hnbap.HNB_Cell_Access_Mode",
2683 FT_UINT32, BASE_DEC, VALS(hnbap_HNB_Cell_Access_Mode_vals), 0,
2684 NULL, HFILL }},
2685 { &hf_hnbap_HNB_Location_Information_PDU,
2686 { "HNB-Location-Information", "hnbap.HNB_Location_Information_element",
2687 FT_NONE, BASE_NONE, NULL, 0,
2688 NULL, HFILL }},
2689 { &hf_hnbap_HNB_Identity_PDU,
2690 { "HNB-Identity", "hnbap.HNB_Identity_element",
2691 FT_NONE, BASE_NONE, NULL, 0,
2692 NULL, HFILL }},
2693 { &hf_hnbap_IP_Address_PDU,
2694 { "IP-Address", "hnbap.IP_Address_element",
2695 FT_NONE, BASE_NONE, NULL, 0,
2696 NULL, HFILL }},
2697 { &hf_hnbap_LAC_PDU,
2698 { "LAC", "hnbap.LAC",
2699 FT_UINT16, BASE_DEC_HEX, NULL, 0,
2700 NULL, HFILL }},
2701 { &hf_hnbap_MuxPortNumber_PDU,
2702 { "MuxPortNumber", "hnbap.MuxPortNumber",
2703 FT_UINT32, BASE_DEC, NULL, 0,
2704 NULL, HFILL }},
2705 { &hf_hnbap_NeighbourInfoList_PDU,
2706 { "NeighbourInfoList", "hnbap.NeighbourInfoList",
2707 FT_UINT32, BASE_DEC, NULL, 0,
2708 NULL, HFILL }},
2709 { &hf_hnbap_NeighbourInfoRequestList_PDU,
2710 { "NeighbourInfoRequestList", "hnbap.NeighbourInfoRequestList",
2711 FT_UINT32, BASE_DEC, NULL, 0,
2712 NULL, HFILL }},
2713 { &hf_hnbap_PLMNidentity_PDU,
2714 { "PLMNidentity", "hnbap.PLMNidentity",
2715 FT_BYTES, BASE_NONE, NULL, 0,
2716 NULL, HFILL }},
2717 { &hf_hnbap_PSC_PDU,
2718 { "PSC", "hnbap.PSC",
2719 FT_BYTES, BASE_NONE, NULL, 0,
2720 NULL, HFILL }},
2721 { &hf_hnbap_RABList_PDU,
2722 { "RABList", "hnbap.RABList",
2723 FT_UINT32, BASE_DEC, NULL, 0,
2724 NULL, HFILL }},
2725 { &hf_hnbap_RAC_PDU,
2726 { "RAC", "hnbap.RAC",
2727 FT_UINT8, BASE_DEC_HEX, NULL, 0,
2728 NULL, HFILL }},
2729 { &hf_hnbap_Registration_Cause_PDU,
2730 { "Registration-Cause", "hnbap.Registration_Cause",
2731 FT_UINT32, BASE_DEC, VALS(hnbap_Registration_Cause_vals), 0,
2732 NULL, HFILL }},
2733 { &hf_hnbap_RNC_ID_PDU,
2734 { "RNC-ID", "hnbap.RNC_ID",
2735 FT_UINT32, BASE_DEC, NULL, 0,
2736 NULL, HFILL }},
2737 { &hf_hnbap_SAC_PDU,
2738 { "SAC", "hnbap.SAC",
2739 FT_UINT16, BASE_DEC_HEX, NULL, 0,
2740 NULL, HFILL }},
2741 { &hf_hnbap_UE_Capabilities_PDU,
2742 { "UE-Capabilities", "hnbap.UE_Capabilities_element",
2743 FT_NONE, BASE_NONE, NULL, 0,
2744 NULL, HFILL }},
2745 { &hf_hnbap_UE_Identity_PDU,
2746 { "UE-Identity", "hnbap.UE_Identity",
2747 FT_UINT32, BASE_DEC, VALS(hnbap_UE_Identity_vals), 0,
2748 NULL, HFILL }},
2749 { &hf_hnbap_Update_cause_PDU,
2750 { "Update-cause", "hnbap.Update_cause",
2751 FT_UINT32, BASE_DEC, VALS(hnbap_Update_cause_vals), 0,
2752 NULL, HFILL }},
2753 { &hf_hnbap_HNBRegisterRequest_PDU,
2754 { "HNBRegisterRequest", "hnbap.HNBRegisterRequest_element",
2755 FT_NONE, BASE_NONE, NULL, 0,
2756 NULL, HFILL }},
2757 { &hf_hnbap_HNBRegisterAccept_PDU,
2758 { "HNBRegisterAccept", "hnbap.HNBRegisterAccept_element",
2759 FT_NONE, BASE_NONE, NULL, 0,
2760 NULL, HFILL }},
2761 { &hf_hnbap_HNBRegisterReject_PDU,
2762 { "HNBRegisterReject", "hnbap.HNBRegisterReject_element",
2763 FT_NONE, BASE_NONE, NULL, 0,
2764 NULL, HFILL }},
2765 { &hf_hnbap_HNBDe_Register_PDU,
2766 { "HNBDe-Register", "hnbap.HNBDe_Register_element",
2767 FT_NONE, BASE_NONE, NULL, 0,
2768 NULL, HFILL }},
2769 { &hf_hnbap_UERegisterRequest_PDU,
2770 { "UERegisterRequest", "hnbap.UERegisterRequest_element",
2771 FT_NONE, BASE_NONE, NULL, 0,
2772 NULL, HFILL }},
2773 { &hf_hnbap_UERegisterAccept_PDU,
2774 { "UERegisterAccept", "hnbap.UERegisterAccept_element",
2775 FT_NONE, BASE_NONE, NULL, 0,
2776 NULL, HFILL }},
2777 { &hf_hnbap_UERegisterReject_PDU,
2778 { "UERegisterReject", "hnbap.UERegisterReject_element",
2779 FT_NONE, BASE_NONE, NULL, 0,
2780 NULL, HFILL }},
2781 { &hf_hnbap_UEDe_Register_PDU,
2782 { "UEDe-Register", "hnbap.UEDe_Register_element",
2783 FT_NONE, BASE_NONE, NULL, 0,
2784 NULL, HFILL }},
2785 { &hf_hnbap_CSGMembershipUpdate_PDU,
2786 { "CSGMembershipUpdate", "hnbap.CSGMembershipUpdate_element",
2787 FT_NONE, BASE_NONE, NULL, 0,
2788 NULL, HFILL }},
2789 { &hf_hnbap_TNLUpdateRequest_PDU,
2790 { "TNLUpdateRequest", "hnbap.TNLUpdateRequest_element",
2791 FT_NONE, BASE_NONE, NULL, 0,
2792 NULL, HFILL }},
2793 { &hf_hnbap_TNLUpdateResponse_PDU,
2794 { "TNLUpdateResponse", "hnbap.TNLUpdateResponse_element",
2795 FT_NONE, BASE_NONE, NULL, 0,
2796 NULL, HFILL }},
2797 { &hf_hnbap_TNLUpdateFailure_PDU,
2798 { "TNLUpdateFailure", "hnbap.TNLUpdateFailure_element",
2799 FT_NONE, BASE_NONE, NULL, 0,
2800 NULL, HFILL }},
2801 { &hf_hnbap_HNBConfigTransferRequest_PDU,
2802 { "HNBConfigTransferRequest", "hnbap.HNBConfigTransferRequest_element",
2803 FT_NONE, BASE_NONE, NULL, 0,
2804 NULL, HFILL }},
2805 { &hf_hnbap_HNBConfigTransferResponse_PDU,
2806 { "HNBConfigTransferResponse", "hnbap.HNBConfigTransferResponse_element",
2807 FT_NONE, BASE_NONE, NULL, 0,
2808 NULL, HFILL }},
2809 { &hf_hnbap_RelocationComplete_PDU,
2810 { "RelocationComplete", "hnbap.RelocationComplete_element",
2811 FT_NONE, BASE_NONE, NULL, 0,
2812 NULL, HFILL }},
2813 { &hf_hnbap_ErrorIndication_PDU,
2814 { "ErrorIndication", "hnbap.ErrorIndication_element",
2815 FT_NONE, BASE_NONE, NULL, 0,
2816 NULL, HFILL }},
2817 { &hf_hnbap_PrivateMessage_PDU,
2818 { "PrivateMessage", "hnbap.PrivateMessage_element",
2819 FT_NONE, BASE_NONE, NULL, 0,
2820 NULL, HFILL }},
2821 { &hf_hnbap_HNBAP_PDU_PDU,
2822 { "HNBAP-PDU", "hnbap.HNBAP_PDU",
2823 FT_UINT32, BASE_DEC, VALS(hnbap_HNBAP_PDU_vals), 0,
2824 NULL, HFILL }},
2825 { &hf_hnbap_local,
2826 { "local", "hnbap.local",
2827 FT_UINT32, BASE_DEC, NULL, 0,
2828 "INTEGER_0_65535", HFILL }},
2829 { &hf_hnbap_global,
2830 { "global", "hnbap.global",
2831 FT_OID, BASE_NONE, NULL, 0,
2832 "OBJECT_IDENTIFIER", HFILL }},
2833 { &hf_hnbap_ProtocolIE_Container_item,
2834 { "ProtocolIE-Field", "hnbap.ProtocolIE_Field_element",
2835 FT_NONE, BASE_NONE, NULL, 0,
2836 NULL, HFILL }},
2837 { &hf_hnbap_protocol_ie_field_id,
2838 { "id", "hnbap.id",
2839 FT_UINT32, BASE_DEC, VALS(hnbap_ProtocolIE_ID_vals), 0,
2840 "ProtocolIE_ID", HFILL }},
2841 { &hf_hnbap_criticality,
2842 { "criticality", "hnbap.criticality",
2843 FT_UINT32, BASE_DEC, VALS(hnbap_Criticality_vals), 0,
2844 NULL, HFILL }},
2845 { &hf_hnbap_ie_field_value,
2846 { "value", "hnbap.value_element",
2847 FT_NONE, BASE_NONE, NULL, 0,
2848 "ProtocolIE_Field_value", HFILL }},
2849 { &hf_hnbap_ProtocolExtensionContainer_item,
2850 { "ProtocolExtensionField", "hnbap.ProtocolExtensionField_element",
2851 FT_NONE, BASE_NONE, NULL, 0,
2852 NULL, HFILL }},
2853 { &hf_hnbap_id,
2854 { "id", "hnbap.id",
2855 FT_UINT32, BASE_DEC, VALS(hnbap_ProtocolIE_ID_vals), 0,
2856 "ProtocolIE_ID", HFILL }},
2857 { &hf_hnbap_extensionValue,
2858 { "extensionValue", "hnbap.extensionValue_element",
2859 FT_NONE, BASE_NONE, NULL, 0,
2860 NULL, HFILL }},
2861 { &hf_hnbap_PrivateIE_Container_item,
2862 { "PrivateIE-Field", "hnbap.PrivateIE_Field_element",
2863 FT_NONE, BASE_NONE, NULL, 0,
2864 NULL, HFILL }},
2865 { &hf_hnbap_private_ie_field_id,
2866 { "id", "hnbap.id",
2867 FT_UINT32, BASE_DEC, VALS(hnbap_PrivateIE_ID_vals), 0,
2868 "PrivateIE_ID", HFILL }},
2869 { &hf_hnbap_private_value,
2870 { "value", "hnbap.value_element",
2871 FT_NONE, BASE_NONE, NULL, 0,
2872 "PrivateIE_Field_value", HFILL }},
2873 { &hf_hnbap_directionOfAltitude,
2874 { "directionOfAltitude", "hnbap.directionOfAltitude",
2875 FT_UINT32, BASE_DEC, VALS(hnbap_T_directionOfAltitude_vals), 0,
2876 NULL, HFILL }},
2877 { &hf_hnbap_altitude,
2878 { "altitude", "hnbap.altitude",
2879 FT_UINT32, BASE_DEC, NULL, 0,
2880 "INTEGER_0_32767", HFILL }},
2881 { &hf_hnbap_radioNetwork,
2882 { "radioNetwork", "hnbap.radioNetwork",
2883 FT_UINT32, BASE_DEC, VALS(hnbap_CauseRadioNetwork_vals), 0,
2884 "CauseRadioNetwork", HFILL }},
2885 { &hf_hnbap_transport,
2886 { "transport", "hnbap.transport",
2887 FT_UINT32, BASE_DEC, VALS(hnbap_CauseTransport_vals), 0,
2888 "CauseTransport", HFILL }},
2889 { &hf_hnbap_protocol,
2890 { "protocol", "hnbap.protocol",
2891 FT_UINT32, BASE_DEC, VALS(hnbap_CauseProtocol_vals), 0,
2892 "CauseProtocol", HFILL }},
2893 { &hf_hnbap_misc,
2894 { "misc", "hnbap.misc",
2895 FT_UINT32, BASE_DEC, VALS(hnbap_CauseMisc_vals), 0,
2896 "CauseMisc", HFILL }},
2897 { &hf_hnbap_procedureCode,
2898 { "procedureCode", "hnbap.procedureCode",
2899 FT_UINT32, BASE_DEC, VALS(hnbap_ProcedureCode_vals), 0,
2900 NULL, HFILL }},
2901 { &hf_hnbap_triggeringMessage,
2902 { "triggeringMessage", "hnbap.triggeringMessage",
2903 FT_UINT32, BASE_DEC, VALS(hnbap_TriggeringMessage_vals), 0,
2904 NULL, HFILL }},
2905 { &hf_hnbap_procedureCriticality,
2906 { "procedureCriticality", "hnbap.procedureCriticality",
2907 FT_UINT32, BASE_DEC, VALS(hnbap_Criticality_vals), 0,
2908 "Criticality", HFILL }},
2909 { &hf_hnbap_iEsCriticalityDiagnostics,
2910 { "iEsCriticalityDiagnostics", "hnbap.iEsCriticalityDiagnostics",
2911 FT_UINT32, BASE_DEC, NULL, 0,
2912 "CriticalityDiagnostics_IE_List", HFILL }},
2913 { &hf_hnbap_iE_Extensions,
2914 { "iE-Extensions", "hnbap.iE_Extensions",
2915 FT_UINT32, BASE_DEC, NULL, 0,
2916 "ProtocolExtensionContainer", HFILL }},
2917 { &hf_hnbap_CriticalityDiagnostics_IE_List_item,
2918 { "CriticalityDiagnostics-IE-List item", "hnbap.CriticalityDiagnostics_IE_List_item_element",
2919 FT_NONE, BASE_NONE, NULL, 0,
2920 NULL, HFILL }},
2921 { &hf_hnbap_iECriticality,
2922 { "iECriticality", "hnbap.iECriticality",
2923 FT_UINT32, BASE_DEC, VALS(hnbap_Criticality_vals), 0,
2924 "Criticality", HFILL }},
2925 { &hf_hnbap_iE_ID,
2926 { "iE-ID", "hnbap.iE_ID",
2927 FT_UINT32, BASE_DEC, VALS(hnbap_ProtocolIE_ID_vals), 0,
2928 "ProtocolIE_ID", HFILL }},
2929 { &hf_hnbap_typeOfError,
2930 { "typeOfError", "hnbap.typeOfError",
2931 FT_UINT32, BASE_DEC, VALS(hnbap_TypeOfError_vals), 0,
2932 NULL, HFILL }},
2933 { &hf_hnbap_pLMNidentity,
2934 { "pLMNidentity", "hnbap.pLMNidentity",
2935 FT_BYTES, BASE_NONE, NULL, 0,
2936 NULL, HFILL }},
2937 { &hf_hnbap_lAC,
2938 { "lAC", "hnbap.lAC",
2939 FT_UINT16, BASE_DEC_HEX, NULL, 0,
2940 NULL, HFILL }},
2941 { &hf_hnbap_cI,
2942 { "cI", "hnbap.cI",
2943 FT_BYTES, BASE_NONE, NULL, 0,
2944 NULL, HFILL }},
2945 { &hf_hnbap_geographical_location_geographical_coordinates,
2946 { "geographicalCoordinates", "hnbap.geographicalCoordinates_element",
2947 FT_NONE, BASE_NONE, NULL, 0,
2948 NULL, HFILL }},
2949 { &hf_hnbap_altitudeAndDirection,
2950 { "altitudeAndDirection", "hnbap.altitudeAndDirection_element",
2951 FT_NONE, BASE_NONE, NULL, 0,
2952 NULL, HFILL }},
2953 { &hf_hnbap_latitudeSign,
2954 { "latitudeSign", "hnbap.latitudeSign",
2955 FT_UINT32, BASE_DEC, VALS(hnbap_T_latitudeSign_vals), 0,
2956 NULL, HFILL }},
2957 { &hf_hnbap_latitude,
2958 { "latitude", "hnbap.latitude",
2959 FT_UINT32, BASE_DEC, NULL, 0,
2960 "INTEGER_0_8388607", HFILL }},
2961 { &hf_hnbap_longitude,
2962 { "longitude", "hnbap.longitude",
2963 FT_INT32, BASE_DEC, NULL, 0,
2964 "INTEGER_M8388608_8388607", HFILL }},
2965 { &hf_hnbap_cellIdentity,
2966 { "cellIdentity", "hnbap.cellIdentity",
2967 FT_BYTES, BASE_NONE, NULL, 0,
2968 NULL, HFILL }},
2969 { &hf_hnbap_hNB_Identity_as_Cell_Identifier,
2970 { "hNB-Identity-as-Cell-Identifier", "hnbap.hNB_Identity_as_Cell_Identifier_element",
2971 FT_NONE, BASE_NONE, NULL, 0,
2972 "HNB_Cell_Identifier", HFILL }},
2973 { &hf_hnbap_hnb_RNL_Identity,
2974 { "hnb-RNL-Identity", "hnbap.hnb_RNL_Identity",
2975 FT_UINT32, BASE_DEC, VALS(hnbap_HNB_RNL_Identity_vals), 0,
2976 NULL, HFILL }},
2977 { &hf_hnbap_configurationInformation,
2978 { "configurationInformation", "hnbap.configurationInformation",
2979 FT_UINT32, BASE_DEC, VALS(hnbap_ConfigurationInformation_vals), 0,
2980 NULL, HFILL }},
2981 { &hf_hnbap_provided,
2982 { "provided", "hnbap.provided_element",
2983 FT_NONE, BASE_NONE, NULL, 0,
2984 "HNBConfigurationInformationProvided", HFILL }},
2985 { &hf_hnbap_missing,
2986 { "missing", "hnbap.missing_element",
2987 FT_NONE, BASE_NONE, NULL, 0,
2988 "HNBConfigurationInformationMissing", HFILL }},
2989 { &hf_hnbap_psc,
2990 { "psc", "hnbap.psc",
2991 FT_BYTES, BASE_NONE, NULL, 0,
2992 NULL, HFILL }},
2993 { &hf_hnbap_cSG_ID,
2994 { "cSG-ID", "hnbap.cSG_ID",
2995 FT_BYTES, BASE_NONE, NULL, 0,
2996 NULL, HFILL }},
2997 { &hf_hnbap_hNB_Cell_Access_Mode,
2998 { "hNB-Cell-Access-Mode", "hnbap.hNB_Cell_Access_Mode",
2999 FT_UINT32, BASE_DEC, VALS(hnbap_HNB_Cell_Access_Mode_vals), 0,
3000 NULL, HFILL }},
3001 { &hf_hnbap_iurh_Signalling_TNL_AddressList,
3002 { "iurh-Signalling-TNL-AddressList", "hnbap.iurh_Signalling_TNL_AddressList",
3003 FT_UINT32, BASE_DEC, NULL, 0,
3004 NULL, HFILL }},
3005 { &hf_hnbap_cause,
3006 { "cause", "hnbap.cause",
3007 FT_UINT32, BASE_DEC, VALS(hnbap_Cause_vals), 0,
3008 NULL, HFILL }},
3009 { &hf_hnbap_macroCoverageInfo,
3010 { "macroCoverageInfo", "hnbap.macroCoverageInfo_element",
3011 FT_NONE, BASE_NONE, NULL, 0,
3012 "MacroCoverageInformation", HFILL }},
3013 { &hf_hnbap_hnb_location_information_geographical_coordinates,
3014 { "geographicalCoordinates", "hnbap.geographicalCoordinates_element",
3015 FT_NONE, BASE_NONE, NULL, 0,
3016 "GeographicalLocation", HFILL }},
3017 { &hf_hnbap_hNB_Identity_Info,
3018 { "hNB-Identity-Info", "hnbap.hNB_Identity_Info",
3019 FT_BYTES, BASE_NONE, NULL, 0,
3020 NULL, HFILL }},
3021 { &hf_hnbap_iMSIDS41,
3022 { "iMSIDS41", "hnbap.iMSIDS41",
3023 FT_BYTES, BASE_NONE, NULL, 0,
3024 NULL, HFILL }},
3025 { &hf_hnbap_eSN,
3026 { "eSN", "hnbap.eSN",
3027 FT_BYTES, BASE_NONE, NULL, 0,
3028 NULL, HFILL }},
3029 { &hf_hnbap_ipaddress,
3030 { "ipaddress", "hnbap.ipaddress",
3031 FT_UINT32, BASE_DEC, VALS(hnbap_T_ipaddress_vals), 0,
3032 NULL, HFILL }},
3033 { &hf_hnbap_ipv4info,
3034 { "ipv4info", "hnbap.ipv4info",
3035 FT_BYTES, BASE_NONE, NULL, 0,
3036 "Ipv4Address", HFILL }},
3037 { &hf_hnbap_ipv6info,
3038 { "ipv6info", "hnbap.ipv6info",
3039 FT_BYTES, BASE_NONE, NULL, 0,
3040 "Ipv6Address", HFILL }},
3041 { &hf_hnbap_Iurh_Signalling_TNL_AddressList_item,
3042 { "IP-Address", "hnbap.IP_Address_element",
3043 FT_NONE, BASE_NONE, NULL, 0,
3044 NULL, HFILL }},
3045 { &hf_hnbap_pLMNID,
3046 { "pLMNID", "hnbap.pLMNID",
3047 FT_BYTES, BASE_NONE, NULL, 0,
3048 "PLMNidentity", HFILL }},
3049 { &hf_hnbap_macroCellID,
3050 { "cellIdentity", "hnbap.cellIdentity",
3051 FT_UINT32, BASE_DEC, VALS(hnbap_MacroCellID_vals), 0,
3052 "MacroCellID", HFILL }},
3053 { &hf_hnbap_uTRANCellID,
3054 { "uTRANCellID", "hnbap.uTRANCellID_element",
3055 FT_NONE, BASE_NONE, NULL, 0,
3056 NULL, HFILL }},
3057 { &hf_hnbap_gERANCellID,
3058 { "gERANCellID", "hnbap.gERANCellID_element",
3059 FT_NONE, BASE_NONE, NULL, 0,
3060 "CGI", HFILL }},
3061 { &hf_hnbap_NeighbourInfoList_item,
3062 { "HNBConfigInfo", "hnbap.HNBConfigInfo_element",
3063 FT_NONE, BASE_NONE, NULL, 0,
3064 NULL, HFILL }},
3065 { &hf_hnbap_NeighbourInfoRequestList_item,
3066 { "NeighbourInfoRequestItem", "hnbap.NeighbourInfoRequestItem_element",
3067 FT_NONE, BASE_NONE, NULL, 0,
3068 NULL, HFILL }},
3069 { &hf_hnbap_pTMSI,
3070 { "pTMSI", "hnbap.pTMSI",
3071 FT_BYTES, BASE_NONE, NULL, 0,
3072 NULL, HFILL }},
3073 { &hf_hnbap_rAI,
3074 { "rAI", "hnbap.rAI_element",
3075 FT_NONE, BASE_NONE, NULL, 0,
3076 NULL, HFILL }},
3077 { &hf_hnbap_RABList_item,
3078 { "RABListItem", "hnbap.RABListItem_element",
3079 FT_NONE, BASE_NONE, NULL, 0,
3080 NULL, HFILL }},
3081 { &hf_hnbap_rAB_ID,
3082 { "rAB-ID", "hnbap.rAB_ID",
3083 FT_BYTES, BASE_NONE, NULL, 0,
3084 NULL, HFILL }},
3085 { &hf_hnbap_old_transport_Info,
3086 { "old-transport-Info", "hnbap.old_transport_Info_element",
3087 FT_NONE, BASE_NONE, NULL, 0,
3088 "TransportInfo", HFILL }},
3089 { &hf_hnbap_new_transport_Info,
3090 { "new-transport-Info", "hnbap.new_transport_Info_element",
3091 FT_NONE, BASE_NONE, NULL, 0,
3092 "TransportInfo", HFILL }},
3093 { &hf_hnbap_cn_domain_indicator,
3094 { "cn-domain-indicator", "hnbap.cn_domain_indicator",
3095 FT_UINT32, BASE_DEC, VALS(hnbap_CN_DomainIndicator_vals), 0,
3096 "CN_DomainIndicator", HFILL }},
3097 { &hf_hnbap_lAI,
3098 { "lAI", "hnbap.lAI_element",
3099 FT_NONE, BASE_NONE, NULL, 0,
3100 NULL, HFILL }},
3101 { &hf_hnbap_rAC,
3102 { "rAC", "hnbap.rAC",
3103 FT_UINT8, BASE_DEC_HEX, NULL, 0,
3104 NULL, HFILL }},
3105 { &hf_hnbap_tMSI,
3106 { "tMSI", "hnbap.tMSI",
3107 FT_BYTES, BASE_NONE, NULL, 0,
3108 "BIT_STRING_SIZE_32", HFILL }},
3109 { &hf_hnbap_transportLayerAddress,
3110 { "transportLayerAddress", "hnbap.transportLayerAddress",
3111 FT_BYTES, BASE_NONE, NULL, 0,
3112 NULL, HFILL }},
3113 { &hf_hnbap_transportAssociation,
3114 { "transportAssociation", "hnbap.transportAssociation",
3115 FT_UINT32, BASE_DEC, VALS(hnbap_T_transportAssociation_vals), 0,
3116 NULL, HFILL }},
3117 { &hf_hnbap_gtp_TEI,
3118 { "gtp-TEI", "hnbap.gtp_TEI",
3119 FT_BYTES, BASE_NONE, NULL, 0,
3120 NULL, HFILL }},
3121 { &hf_hnbap_bindingID,
3122 { "bindingID", "hnbap.bindingID",
3123 FT_BYTES, BASE_NONE, NULL, 0,
3124 NULL, HFILL }},
3125 { &hf_hnbap_access_stratum_release_indicator,
3126 { "access-stratum-release-indicator", "hnbap.access_stratum_release_indicator",
3127 FT_UINT32, BASE_DEC, VALS(hnbap_Access_stratum_release_indicator_vals), 0,
3128 NULL, HFILL }},
3129 { &hf_hnbap_csg_capability,
3130 { "csg-capability", "hnbap.csg_capability",
3131 FT_UINT32, BASE_DEC, VALS(hnbap_CSG_Capability_vals), 0,
3132 NULL, HFILL }},
3133 { &hf_hnbap_uTRANcellID,
3134 { "uTRANcellID", "hnbap.uTRANcellID",
3135 FT_BYTES, BASE_NONE, NULL, 0,
3136 "CellIdentity", HFILL }},
3137 { &hf_hnbap_iMSI,
3138 { "iMSI", "hnbap.iMSI",
3139 FT_BYTES, BASE_NONE, NULL, 0,
3140 NULL, HFILL }},
3141 { &hf_hnbap_tMSILAI,
3142 { "tMSILAI", "hnbap.tMSILAI_element",
3143 FT_NONE, BASE_NONE, NULL, 0,
3144 NULL, HFILL }},
3145 { &hf_hnbap_pTMSIRAI,
3146 { "pTMSIRAI", "hnbap.pTMSIRAI_element",
3147 FT_NONE, BASE_NONE, NULL, 0,
3148 NULL, HFILL }},
3149 { &hf_hnbap_iMEI,
3150 { "iMEI", "hnbap.iMEI",
3151 FT_BYTES, BASE_NONE, NULL, 0,
3152 NULL, HFILL }},
3153 { &hf_hnbap_iMSIESN,
3154 { "iMSIESN", "hnbap.iMSIESN_element",
3155 FT_NONE, BASE_NONE, NULL, 0,
3156 NULL, HFILL }},
3157 { &hf_hnbap_tMSIDS41,
3158 { "tMSIDS41", "hnbap.tMSIDS41",
3159 FT_BYTES, BASE_NONE, NULL, 0,
3160 NULL, HFILL }},
3161 { &hf_hnbap_protocolIEs,
3162 { "protocolIEs", "hnbap.protocolIEs",
3163 FT_UINT32, BASE_DEC, NULL, 0,
3164 "ProtocolIE_Container", HFILL }},
3165 { &hf_hnbap_protocolExtensions,
3166 { "protocolExtensions", "hnbap.protocolExtensions",
3167 FT_UINT32, BASE_DEC, NULL, 0,
3168 "ProtocolExtensionContainer", HFILL }},
3169 { &hf_hnbap_privateIEs,
3170 { "privateIEs", "hnbap.privateIEs",
3171 FT_UINT32, BASE_DEC, NULL, 0,
3172 "PrivateIE_Container", HFILL }},
3173 { &hf_hnbap_initiatingMessage,
3174 { "initiatingMessage", "hnbap.initiatingMessage_element",
3175 FT_NONE, BASE_NONE, NULL, 0,
3176 NULL, HFILL }},
3177 { &hf_hnbap_successfulOutcome,
3178 { "successfulOutcome", "hnbap.successfulOutcome_element",
3179 FT_NONE, BASE_NONE, NULL, 0,
3180 NULL, HFILL }},
3181 { &hf_hnbap_unsuccessfulOutcome,
3182 { "unsuccessfulOutcome", "hnbap.unsuccessfulOutcome_element",
3183 FT_NONE, BASE_NONE, NULL, 0,
3184 NULL, HFILL }},
3185 { &hf_hnbap_initiatingMessagevalue,
3186 { "value", "hnbap.value_element",
3187 FT_NONE, BASE_NONE, NULL, 0,
3188 "InitiatingMessage_value", HFILL }},
3189 { &hf_hnbap_successfulOutcome_value,
3190 { "value", "hnbap.value_element",
3191 FT_NONE, BASE_NONE, NULL, 0,
3192 "SuccessfulOutcome_value", HFILL }},
3193 { &hf_hnbap_unsuccessfulOutcome_value,
3194 { "value", "hnbap.value_element",
3195 FT_NONE, BASE_NONE, NULL, 0,
3196 "UnsuccessfulOutcome_value", HFILL }},
3199 /* List of subtrees */
3200 static int *ett[] = {
3201 &ett_hnbap,
3202 &ett_hnbap_imsi,
3203 &ett_hnbap_PrivateIE_ID,
3204 &ett_hnbap_ProtocolIE_Container,
3205 &ett_hnbap_ProtocolIE_Field,
3206 &ett_hnbap_ProtocolExtensionContainer,
3207 &ett_hnbap_ProtocolExtensionField,
3208 &ett_hnbap_PrivateIE_Container,
3209 &ett_hnbap_PrivateIE_Field,
3210 &ett_hnbap_AltitudeAndDirection,
3211 &ett_hnbap_Cause,
3212 &ett_hnbap_CriticalityDiagnostics,
3213 &ett_hnbap_CriticalityDiagnostics_IE_List,
3214 &ett_hnbap_CriticalityDiagnostics_IE_List_item,
3215 &ett_hnbap_CGI,
3216 &ett_hnbap_GeographicalLocation,
3217 &ett_hnbap_GeographicalCoordinates,
3218 &ett_hnbap_HNB_Cell_Identifier,
3219 &ett_hnbap_HNB_RNL_Identity,
3220 &ett_hnbap_HNBConfigInfo,
3221 &ett_hnbap_ConfigurationInformation,
3222 &ett_hnbap_HNBConfigurationInformationProvided,
3223 &ett_hnbap_HNBConfigurationInformationMissing,
3224 &ett_hnbap_HNB_Location_Information,
3225 &ett_hnbap_HNB_Identity,
3226 &ett_hnbap_IMSIESN,
3227 &ett_hnbap_IP_Address,
3228 &ett_hnbap_T_ipaddress,
3229 &ett_hnbap_Iurh_Signalling_TNL_AddressList,
3230 &ett_hnbap_LAI,
3231 &ett_hnbap_MacroCoverageInformation,
3232 &ett_hnbap_MacroCellID,
3233 &ett_hnbap_NeighbourInfoList,
3234 &ett_hnbap_NeighbourInfoRequestList,
3235 &ett_hnbap_NeighbourInfoRequestItem,
3236 &ett_hnbap_PTMSIRAI,
3237 &ett_hnbap_RABList,
3238 &ett_hnbap_RABListItem,
3239 &ett_hnbap_RAI,
3240 &ett_hnbap_TMSILAI,
3241 &ett_hnbap_TransportInfo,
3242 &ett_hnbap_T_transportAssociation,
3243 &ett_hnbap_UE_Capabilities,
3244 &ett_hnbap_UTRANCellID,
3245 &ett_hnbap_UE_Identity,
3246 &ett_hnbap_HNBRegisterRequest,
3247 &ett_hnbap_HNBRegisterAccept,
3248 &ett_hnbap_HNBRegisterReject,
3249 &ett_hnbap_HNBDe_Register,
3250 &ett_hnbap_UERegisterRequest,
3251 &ett_hnbap_UERegisterAccept,
3252 &ett_hnbap_UERegisterReject,
3253 &ett_hnbap_UEDe_Register,
3254 &ett_hnbap_CSGMembershipUpdate,
3255 &ett_hnbap_TNLUpdateRequest,
3256 &ett_hnbap_TNLUpdateResponse,
3257 &ett_hnbap_TNLUpdateFailure,
3258 &ett_hnbap_HNBConfigTransferRequest,
3259 &ett_hnbap_HNBConfigTransferResponse,
3260 &ett_hnbap_RelocationComplete,
3261 &ett_hnbap_ErrorIndication,
3262 &ett_hnbap_PrivateMessage,
3263 &ett_hnbap_HNBAP_PDU,
3264 &ett_hnbap_InitiatingMessage,
3265 &ett_hnbap_SuccessfulOutcome,
3266 &ett_hnbap_UnsuccessfulOutcome,
3270 /* Register protocol */
3271 proto_hnbap = proto_register_protocol(PNAME, PSNAME, PFNAME);
3272 /* Register fields and subtrees */
3273 proto_register_field_array(proto_hnbap, hf, array_length(hf));
3274 proto_register_subtree_array(ett, array_length(ett));
3276 /* Register dissector */
3277 hnbap_handle = register_dissector("hnbap", dissect_hnbap, proto_hnbap);
3279 /* Register dissector tables */
3280 hnbap_ies_dissector_table = register_dissector_table("hnbap.ies", "HNBAP-PROTOCOL-IES", proto_hnbap, FT_UINT32, BASE_DEC);
3281 hnbap_extension_dissector_table = register_dissector_table("hnbap.extension", "HNBAP-PROTOCOL-EXTENSION", proto_hnbap, FT_UINT32, BASE_DEC);
3282 hnbap_proc_imsg_dissector_table = register_dissector_table("hnbap.proc.imsg", "HNBAP-ELEMENTARY-PROCEDURE InitiatingMessage", proto_hnbap, FT_UINT32, BASE_DEC);
3283 hnbap_proc_sout_dissector_table = register_dissector_table("hnbap.proc.sout", "HNBAP-ELEMENTARY-PROCEDURE SuccessfulOutcome", proto_hnbap, FT_UINT32, BASE_DEC);
3284 hnbap_proc_uout_dissector_table = register_dissector_table("hnbap.proc.uout", "HNBAP-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", proto_hnbap, FT_UINT32, BASE_DEC);
3286 /* hnbap_module = prefs_register_protocol(proto_hnbap, NULL); */
3290 /*--- proto_reg_handoff_hnbap ---------------------------------------*/
3291 void
3292 proto_reg_handoff_hnbap(void)
3294 dissector_add_uint("sctp.ppi", HNBAP_PAYLOAD_PROTOCOL_ID, hnbap_handle);
3295 dissector_add_uint_with_preference("sctp.port", SCTP_PORT_HNBAP, hnbap_handle);
3296 dissector_add_uint("hnbap.ies", id_Cause, create_dissector_handle(dissect_Cause_PDU, proto_hnbap));
3297 dissector_add_uint("hnbap.ies", id_CriticalityDiagnostics, create_dissector_handle(dissect_CriticalityDiagnostics_PDU, proto_hnbap));
3298 dissector_add_uint("hnbap.ies", id_HNB_Identity, create_dissector_handle(dissect_HNB_Identity_PDU, proto_hnbap));
3299 dissector_add_uint("hnbap.ies", id_Context_ID, create_dissector_handle(dissect_Context_ID_PDU, proto_hnbap));
3300 dissector_add_uint("hnbap.ies", id_UE_Identity, create_dissector_handle(dissect_UE_Identity_PDU, proto_hnbap));
3301 dissector_add_uint("hnbap.ies", id_LAC, create_dissector_handle(dissect_LAC_PDU, proto_hnbap));
3302 dissector_add_uint("hnbap.ies", id_RAC, create_dissector_handle(dissect_RAC_PDU, proto_hnbap));
3303 dissector_add_uint("hnbap.ies", id_HNB_Location_Information, create_dissector_handle(dissect_HNB_Location_Information_PDU, proto_hnbap));
3304 dissector_add_uint("hnbap.ies", id_PLMNidentity, create_dissector_handle(dissect_PLMNidentity_PDU, proto_hnbap));
3305 dissector_add_uint("hnbap.ies", id_SAC, create_dissector_handle(dissect_SAC_PDU, proto_hnbap));
3306 dissector_add_uint("hnbap.ies", id_CellIdentity, create_dissector_handle(dissect_CellIdentity_PDU, proto_hnbap));
3307 dissector_add_uint("hnbap.ies", id_Registration_Cause, create_dissector_handle(dissect_Registration_Cause_PDU, proto_hnbap));
3308 dissector_add_uint("hnbap.ies", id_UE_Capabilities, create_dissector_handle(dissect_UE_Capabilities_PDU, proto_hnbap));
3309 dissector_add_uint("hnbap.ies", id_RNC_ID, create_dissector_handle(dissect_RNC_ID_PDU, proto_hnbap));
3310 dissector_add_uint("hnbap.ies", id_CSG_ID, create_dissector_handle(dissect_CSG_ID_PDU, proto_hnbap));
3311 dissector_add_uint("hnbap.ies", id_BackoffTimer, create_dissector_handle(dissect_BackoffTimer_PDU, proto_hnbap));
3312 dissector_add_uint("hnbap.ies", id_CSGMembershipStatus, create_dissector_handle(dissect_CSGMembershipStatus_PDU, proto_hnbap));
3313 dissector_add_uint("hnbap.ies", id_RABList, create_dissector_handle(dissect_RABList_PDU, proto_hnbap));
3314 dissector_add_uint("hnbap.ies", id_Update_cause, create_dissector_handle(dissect_Update_cause_PDU, proto_hnbap));
3315 dissector_add_uint("hnbap.ies", id_NeighbourInfoList, create_dissector_handle(dissect_NeighbourInfoList_PDU, proto_hnbap));
3316 dissector_add_uint("hnbap.ies", id_NeighbourInfoRequestList, create_dissector_handle(dissect_NeighbourInfoRequestList_PDU, proto_hnbap));
3317 dissector_add_uint("hnbap.extension", id_HNB_Internet_Information, create_dissector_handle(dissect_IP_Address_PDU, proto_hnbap));
3318 dissector_add_uint("hnbap.extension", id_HNB_Cell_Access_Mode, create_dissector_handle(dissect_HNB_Cell_Access_Mode_PDU, proto_hnbap));
3319 dissector_add_uint("hnbap.extension", id_MuxPortNumber, create_dissector_handle(dissect_MuxPortNumber_PDU, proto_hnbap));
3320 dissector_add_uint("hnbap.extension", id_CSGMembershipStatus, create_dissector_handle(dissect_CSGMembershipStatus_PDU, proto_hnbap));
3321 dissector_add_uint("hnbap.extension", id_Iurh_Signalling_TNL_Address, create_dissector_handle(dissect_IP_Address_PDU, proto_hnbap));
3322 dissector_add_uint("hnbap.extension", id_PSC, create_dissector_handle(dissect_PSC_PDU, proto_hnbap));
3323 dissector_add_uint("hnbap.proc.imsg", id_HNBRegister, create_dissector_handle(dissect_HNBRegisterRequest_PDU, proto_hnbap));
3324 dissector_add_uint("hnbap.proc.sout", id_HNBRegister, create_dissector_handle(dissect_HNBRegisterAccept_PDU, proto_hnbap));
3325 dissector_add_uint("hnbap.proc.uout", id_HNBRegister, create_dissector_handle(dissect_HNBRegisterReject_PDU, proto_hnbap));
3326 dissector_add_uint("hnbap.proc.imsg", id_UERegister, create_dissector_handle(dissect_UERegisterRequest_PDU, proto_hnbap));
3327 dissector_add_uint("hnbap.proc.sout", id_UERegister, create_dissector_handle(dissect_UERegisterAccept_PDU, proto_hnbap));
3328 dissector_add_uint("hnbap.proc.uout", id_UERegister, create_dissector_handle(dissect_UERegisterReject_PDU, proto_hnbap));
3329 dissector_add_uint("hnbap.proc.imsg", id_TNLUpdate, create_dissector_handle(dissect_TNLUpdateRequest_PDU, proto_hnbap));
3330 dissector_add_uint("hnbap.proc.sout", id_TNLUpdate, create_dissector_handle(dissect_TNLUpdateResponse_PDU, proto_hnbap));
3331 dissector_add_uint("hnbap.proc.uout", id_TNLUpdate, create_dissector_handle(dissect_TNLUpdateFailure_PDU, proto_hnbap));
3332 dissector_add_uint("hnbap.proc.imsg", id_HNBConfigTransfer, create_dissector_handle(dissect_HNBConfigTransferRequest_PDU, proto_hnbap));
3333 dissector_add_uint("hnbap.proc.sout", id_HNBConfigTransfer, create_dissector_handle(dissect_HNBConfigTransferResponse_PDU, proto_hnbap));
3334 dissector_add_uint("hnbap.proc.imsg", id_RelocationComplete, create_dissector_handle(dissect_RelocationComplete_PDU, proto_hnbap));
3335 dissector_add_uint("hnbap.proc.imsg", id_UEDe_Register, create_dissector_handle(dissect_UEDe_Register_PDU, proto_hnbap));
3336 dissector_add_uint("hnbap.proc.imsg", id_HNBDe_Register, create_dissector_handle(dissect_HNBDe_Register_PDU, proto_hnbap));
3337 dissector_add_uint("hnbap.proc.imsg", id_ErrorIndication, create_dissector_handle(dissect_ErrorIndication_PDU, proto_hnbap));
3338 dissector_add_uint("hnbap.proc.imsg", id_CSGMembershipUpdate, create_dissector_handle(dissect_CSGMembershipUpdate_PDU, proto_hnbap));
3339 dissector_add_uint("hnbap.proc.imsg", id_privateMessage, create_dissector_handle(dissect_PrivateMessage_PDU, proto_hnbap));