1 /*****************************************************************************
2 # Copyright 2019 AT&T Intellectual Property *
4 # Licensed under the Apache License, Version 2.0 (the "License"); *
5 # you may not use this file except in compliance with the License. *
6 # You may obtain a copy of the License at *
8 # http://www.apache.org/licenses/LICENSE-2.0 *
10 # Unless required by applicable law or agreed to in writing, software *
11 # distributed under the License is distributed on an "AS IS" BASIS, *
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 # See the License for the specific language governing permissions and *
14 # limitations under the License. *
16 ******************************************************************************/
20 #include "asn/asn.hpp"
21 static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)");
23 #include "X2AP-CommonDataTypes.hpp"
24 #include "X2AP-PDU-Contents.hpp"
25 #include "X2AP-Constants.hpp"
26 #include "E2AP-PDU-Contents.hpp"
27 #include "E2AP-Constants.hpp"
30 E2AP-ELEMENTARY-PROCEDURE ::= CLASS {
32 &SuccessfulOutcome OPTIONAL,
33 &UnsuccessfulOutcome OPTIONAL,
34 &procedureCode ProcedureCode UNIQUE,
35 &criticality Criticality DEFAULT ignore
38 INITIATING MESSAGE &InitiatingMessage
39 [SUCCESSFUL OUTCOME &SuccessfulOutcome]
40 [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome]
41 PROCEDURE CODE &procedureCode
42 [CRITICALITY &criticality]
46 struct E2AP_ELEMENTARY_PROCEDURE
48 struct procedureCode_t : ProcedureCode
50 static constexpr const char* name() {return "procedureCode_t";}
51 using parent_t = ProcedureCode;
54 struct criticality_t : Criticality
56 static constexpr const char* name() {return "criticality_t";}
57 using parent_t = Criticality;
63 E2AP-ELEMENTARY-PROCEDURES E2AP-ELEMENTARY-PROCEDURE ::= {
64 E2AP-ELEMENTARY-PROCEDURES-CLASS-1 |
65 E2AP-ELEMENTARY-PROCEDURES-CLASS-2,
70 struct E2AP_ELEMENTARY_PROCEDURES
72 struct InitiatingMessage_t : asn::typefield<true>
74 ~InitiatingMessage_t() {clear();}
75 size_t get_index() const {return type;}
76 RICsubscriptionRequest& select_id_ricSubscription() { return set<RICsubscriptionRequest>(1); }
77 RICsubscriptionRequest const* get_id_ricSubscription() const { return get<RICsubscriptionRequest>(1); }
78 RICsubscriptionDeleteRequest& select_id_ricSubscriptionDelete() { return set<RICsubscriptionDeleteRequest>(2); }
79 RICsubscriptionDeleteRequest const* get_id_ricSubscriptionDelete() const { return get<RICsubscriptionDeleteRequest>(2); }
80 RICserviceUpdate& select_id_ricServiceUpdate() { return set<RICserviceUpdate>(3); }
81 RICserviceUpdate const* get_id_ricServiceUpdate() const { return get<RICserviceUpdate>(3); }
82 RICcontrolRequest& select_id_ricControl() { return set<RICcontrolRequest>(4); }
83 RICcontrolRequest const* get_id_ricControl() const { return get<RICcontrolRequest>(4); }
84 X2SetupRequest& select_id_x2Setup() { return set<X2SetupRequest>(5); }
85 X2SetupRequest const* get_id_x2Setup() const { return get<X2SetupRequest>(5); }
86 ENDCX2SetupRequest& select_id_endcX2Setup() { return set<ENDCX2SetupRequest>(6); }
87 ENDCX2SetupRequest const* get_id_endcX2Setup() const { return get<ENDCX2SetupRequest>(6); }
88 ResourceStatusRequest& select_id_resourceStatusReportingInitiation() { return set<ResourceStatusRequest>(7); }
89 ResourceStatusRequest const* get_id_resourceStatusReportingInitiation() const { return get<ResourceStatusRequest>(7); }
90 ENBConfigurationUpdate& select_id_eNBConfigurationUpdate() { return set<ENBConfigurationUpdate>(8); }
91 ENBConfigurationUpdate const* get_id_eNBConfigurationUpdate() const { return get<ENBConfigurationUpdate>(8); }
92 ENDCConfigurationUpdate& select_id_endcConfigurationUpdate() { return set<ENDCConfigurationUpdate>(9); }
93 ENDCConfigurationUpdate const* get_id_endcConfigurationUpdate() const { return get<ENDCConfigurationUpdate>(9); }
94 ResetRequest& select_id_reset() { return set<ResetRequest>(10); }
95 ResetRequest const* get_id_reset() const { return get<ResetRequest>(10); }
96 RICindication& select_id_ricIndication() { return set<RICindication>(11); }
97 RICindication const* get_id_ricIndication() const { return get<RICindication>(11); }
98 RICserviceQuery& select_id_ricServiceQuery() { return set<RICserviceQuery>(12); }
99 RICserviceQuery const* get_id_ricServiceQuery() const { return get<RICserviceQuery>(12); }
100 LoadInformation& select_id_loadIndication() { return set<LoadInformation>(13); }
101 LoadInformation const* get_id_loadIndication() const { return get<LoadInformation>(13); }
102 GNBStatusIndication& select_id_gNBStatusIndication() { return set<GNBStatusIndication>(14); }
103 GNBStatusIndication const* get_id_gNBStatusIndication() const { return get<GNBStatusIndication>(14); }
104 ResourceStatusUpdate& select_id_resourceStatusReporting() { return set<ResourceStatusUpdate>(15); }
105 ResourceStatusUpdate const* get_id_resourceStatusReporting() const { return get<ResourceStatusUpdate>(15); }
106 ErrorIndication& select_id_errorIndication() { return set<ErrorIndication>(16); }
107 ErrorIndication const* get_id_errorIndication() const { return get<ErrorIndication>(16); }
108 bool is_unknown() const { return type == 17; }
113 case 1: var.destroy<RICsubscriptionRequest>(); break;
114 case 2: var.destroy<RICsubscriptionDeleteRequest>(); break;
115 case 3: var.destroy<RICserviceUpdate>(); break;
116 case 4: var.destroy<RICcontrolRequest>(); break;
117 case 5: var.destroy<X2SetupRequest>(); break;
118 case 6: var.destroy<ENDCX2SetupRequest>(); break;
119 case 7: var.destroy<ResourceStatusRequest>(); break;
120 case 8: var.destroy<ENBConfigurationUpdate>(); break;
121 case 9: var.destroy<ENDCConfigurationUpdate>(); break;
122 case 10: var.destroy<ResetRequest>(); break;
123 case 11: var.destroy<RICindication>(); break;
124 case 12: var.destroy<RICserviceQuery>(); break;
125 case 13: var.destroy<LoadInformation>(); break;
126 case 14: var.destroy<GNBStatusIndication>(); break;
127 case 15: var.destroy<ResourceStatusUpdate>(); break;
128 case 16: var.destroy<ErrorIndication>(); break;
130 type = 0; ref_nested().clear();
132 template<typename V> static inline void enumerate(V& v)
134 v.template operator()<RICsubscriptionRequest>(1);
135 v.template operator()<RICsubscriptionDeleteRequest>(2);
136 v.template operator()<RICserviceUpdate>(3);
137 v.template operator()<RICcontrolRequest>(4);
138 v.template operator()<X2SetupRequest>(5);
139 v.template operator()<ENDCX2SetupRequest>(6);
140 v.template operator()<ResourceStatusRequest>(7);
141 v.template operator()<ENBConfigurationUpdate>(8);
142 v.template operator()<ENDCConfigurationUpdate>(9);
143 v.template operator()<ResetRequest>(10);
144 v.template operator()<RICindication>(11);
145 v.template operator()<RICserviceQuery>(12);
146 v.template operator()<LoadInformation>(13);
147 v.template operator()<GNBStatusIndication>(14);
148 v.template operator()<ResourceStatusUpdate>(15);
149 v.template operator()<ErrorIndication>(16);
153 template<typename V> bool decode(size_t index, V& v)
158 case 1: v(select_id_ricSubscription()); return true;
159 case 2: v(select_id_ricSubscriptionDelete()); return true;
160 case 3: v(select_id_ricServiceUpdate()); return true;
161 case 4: v(select_id_ricControl()); return true;
162 case 5: v(select_id_x2Setup()); return true;
163 case 6: v(select_id_endcX2Setup()); return true;
164 case 7: v(select_id_resourceStatusReportingInitiation()); return true;
165 case 8: v(select_id_eNBConfigurationUpdate()); return true;
166 case 9: v(select_id_endcConfigurationUpdate()); return true;
167 case 10: v(select_id_reset()); return true;
168 case 11: v(select_id_ricIndication()); return true;
169 case 12: v(select_id_ricServiceQuery()); return true;
170 case 13: v(select_id_loadIndication()); return true;
171 case 14: v(select_id_gNBStatusIndication()); return true;
172 case 15: v(select_id_resourceStatusReporting()); return true;
173 case 16: v(select_id_errorIndication()); return true;
174 case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true;
179 template<typename V> bool encode(size_t index, V& v) const
181 if(index != type) return false;
184 case 1: v(var.as<RICsubscriptionRequest>()); return true;
185 case 2: v(var.as<RICsubscriptionDeleteRequest>()); return true;
186 case 3: v(var.as<RICserviceUpdate>()); return true;
187 case 4: v(var.as<RICcontrolRequest>()); return true;
188 case 5: v(var.as<X2SetupRequest>()); return true;
189 case 6: v(var.as<ENDCX2SetupRequest>()); return true;
190 case 7: v(var.as<ResourceStatusRequest>()); return true;
191 case 8: v(var.as<ENBConfigurationUpdate>()); return true;
192 case 9: v(var.as<ENDCConfigurationUpdate>()); return true;
193 case 10: v(var.as<ResetRequest>()); return true;
194 case 11: v(var.as<RICindication>()); return true;
195 case 12: v(var.as<RICserviceQuery>()); return true;
196 case 13: v(var.as<LoadInformation>()); return true;
197 case 14: v(var.as<GNBStatusIndication>()); return true;
198 case 15: v(var.as<ResourceStatusUpdate>()); return true;
199 case 16: v(var.as<ErrorIndication>()); return true;
205 template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
206 template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
209 char dummy1[sizeof(ENBConfigurationUpdate)];
210 char dummy2[sizeof(ENDCConfigurationUpdate)];
211 char dummy3[sizeof(ENDCX2SetupRequest)];
212 char dummy4[sizeof(ErrorIndication)];
213 char dummy5[sizeof(GNBStatusIndication)];
214 char dummy6[sizeof(LoadInformation)];
215 char dummy7[sizeof(RICcontrolRequest)];
216 char dummy8[sizeof(RICindication)];
217 char dummy9[sizeof(RICserviceQuery)];
218 char dummy10[sizeof(RICserviceUpdate)];
219 char dummy11[sizeof(RICsubscriptionDeleteRequest)];
220 char dummy12[sizeof(RICsubscriptionRequest)];
221 char dummy13[sizeof(ResetRequest)];
222 char dummy14[sizeof(ResourceStatusRequest)];
223 char dummy15[sizeof(ResourceStatusUpdate)];
224 char dummy16[sizeof(X2SetupRequest)];
227 asn::variant<sizeof(union_type)> var;
231 struct SuccessfulOutcome_t : asn::typefield<true>
233 ~SuccessfulOutcome_t() {clear();}
234 size_t get_index() const {return type;}
235 RICsubscriptionResponse& select_id_ricSubscription() { return set<RICsubscriptionResponse>(1); }
236 RICsubscriptionResponse const* get_id_ricSubscription() const { return get<RICsubscriptionResponse>(1); }
237 RICsubscriptionDeleteResponse& select_id_ricSubscriptionDelete() { return set<RICsubscriptionDeleteResponse>(2); }
238 RICsubscriptionDeleteResponse const* get_id_ricSubscriptionDelete() const { return get<RICsubscriptionDeleteResponse>(2); }
239 RICserviceUpdateAcknowledge& select_id_ricServiceUpdate() { return set<RICserviceUpdateAcknowledge>(3); }
240 RICserviceUpdateAcknowledge const* get_id_ricServiceUpdate() const { return get<RICserviceUpdateAcknowledge>(3); }
241 RICcontrolAcknowledge& select_id_ricControl() { return set<RICcontrolAcknowledge>(4); }
242 RICcontrolAcknowledge const* get_id_ricControl() const { return get<RICcontrolAcknowledge>(4); }
243 X2SetupResponse& select_id_x2Setup() { return set<X2SetupResponse>(5); }
244 X2SetupResponse const* get_id_x2Setup() const { return get<X2SetupResponse>(5); }
245 ENDCX2SetupResponse& select_id_endcX2Setup() { return set<ENDCX2SetupResponse>(6); }
246 ENDCX2SetupResponse const* get_id_endcX2Setup() const { return get<ENDCX2SetupResponse>(6); }
247 ResourceStatusResponse& select_id_resourceStatusReportingInitiation() { return set<ResourceStatusResponse>(7); }
248 ResourceStatusResponse const* get_id_resourceStatusReportingInitiation() const { return get<ResourceStatusResponse>(7); }
249 ENBConfigurationUpdateAcknowledge& select_id_eNBConfigurationUpdate() { return set<ENBConfigurationUpdateAcknowledge>(8); }
250 ENBConfigurationUpdateAcknowledge const* get_id_eNBConfigurationUpdate() const { return get<ENBConfigurationUpdateAcknowledge>(8); }
251 ENDCConfigurationUpdateAcknowledge& select_id_endcConfigurationUpdate() { return set<ENDCConfigurationUpdateAcknowledge>(9); }
252 ENDCConfigurationUpdateAcknowledge const* get_id_endcConfigurationUpdate() const { return get<ENDCConfigurationUpdateAcknowledge>(9); }
253 ResetResponse& select_id_reset() { return set<ResetResponse>(10); }
254 ResetResponse const* get_id_reset() const { return get<ResetResponse>(10); }
255 bool is_unknown() const { return type == 17; }
260 case 1: var.destroy<RICsubscriptionResponse>(); break;
261 case 2: var.destroy<RICsubscriptionDeleteResponse>(); break;
262 case 3: var.destroy<RICserviceUpdateAcknowledge>(); break;
263 case 4: var.destroy<RICcontrolAcknowledge>(); break;
264 case 5: var.destroy<X2SetupResponse>(); break;
265 case 6: var.destroy<ENDCX2SetupResponse>(); break;
266 case 7: var.destroy<ResourceStatusResponse>(); break;
267 case 8: var.destroy<ENBConfigurationUpdateAcknowledge>(); break;
268 case 9: var.destroy<ENDCConfigurationUpdateAcknowledge>(); break;
269 case 10: var.destroy<ResetResponse>(); break;
271 type = 0; ref_nested().clear();
273 template<typename V> static inline void enumerate(V& v)
275 v.template operator()<RICsubscriptionResponse>(1);
276 v.template operator()<RICsubscriptionDeleteResponse>(2);
277 v.template operator()<RICserviceUpdateAcknowledge>(3);
278 v.template operator()<RICcontrolAcknowledge>(4);
279 v.template operator()<X2SetupResponse>(5);
280 v.template operator()<ENDCX2SetupResponse>(6);
281 v.template operator()<ResourceStatusResponse>(7);
282 v.template operator()<ENBConfigurationUpdateAcknowledge>(8);
283 v.template operator()<ENDCConfigurationUpdateAcknowledge>(9);
284 v.template operator()<ResetResponse>(10);
288 template<typename V> bool decode(size_t index, V& v)
293 case 1: v(select_id_ricSubscription()); return true;
294 case 2: v(select_id_ricSubscriptionDelete()); return true;
295 case 3: v(select_id_ricServiceUpdate()); return true;
296 case 4: v(select_id_ricControl()); return true;
297 case 5: v(select_id_x2Setup()); return true;
298 case 6: v(select_id_endcX2Setup()); return true;
299 case 7: v(select_id_resourceStatusReportingInitiation()); return true;
300 case 8: v(select_id_eNBConfigurationUpdate()); return true;
301 case 9: v(select_id_endcConfigurationUpdate()); return true;
302 case 10: v(select_id_reset()); return true;
303 case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true;
308 template<typename V> bool encode(size_t index, V& v) const
310 if(index != type) return false;
313 case 1: v(var.as<RICsubscriptionResponse>()); return true;
314 case 2: v(var.as<RICsubscriptionDeleteResponse>()); return true;
315 case 3: v(var.as<RICserviceUpdateAcknowledge>()); return true;
316 case 4: v(var.as<RICcontrolAcknowledge>()); return true;
317 case 5: v(var.as<X2SetupResponse>()); return true;
318 case 6: v(var.as<ENDCX2SetupResponse>()); return true;
319 case 7: v(var.as<ResourceStatusResponse>()); return true;
320 case 8: v(var.as<ENBConfigurationUpdateAcknowledge>()); return true;
321 case 9: v(var.as<ENDCConfigurationUpdateAcknowledge>()); return true;
322 case 10: v(var.as<ResetResponse>()); return true;
328 template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
329 template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
332 char dummy1[sizeof(ENBConfigurationUpdateAcknowledge)];
333 char dummy2[sizeof(ENDCConfigurationUpdateAcknowledge)];
334 char dummy3[sizeof(ENDCX2SetupResponse)];
335 char dummy4[sizeof(RICcontrolAcknowledge)];
336 char dummy5[sizeof(RICserviceUpdateAcknowledge)];
337 char dummy6[sizeof(RICsubscriptionDeleteResponse)];
338 char dummy7[sizeof(RICsubscriptionResponse)];
339 char dummy8[sizeof(ResetResponse)];
340 char dummy9[sizeof(ResourceStatusResponse)];
341 char dummy10[sizeof(X2SetupResponse)];
344 asn::variant<sizeof(union_type)> var;
348 struct UnsuccessfulOutcome_t : asn::typefield<true>
350 ~UnsuccessfulOutcome_t() {clear();}
351 size_t get_index() const {return type;}
352 RICsubscriptionFailure& select_id_ricSubscription() { return set<RICsubscriptionFailure>(1); }
353 RICsubscriptionFailure const* get_id_ricSubscription() const { return get<RICsubscriptionFailure>(1); }
354 RICsubscriptionDeleteFailure& select_id_ricSubscriptionDelete() { return set<RICsubscriptionDeleteFailure>(2); }
355 RICsubscriptionDeleteFailure const* get_id_ricSubscriptionDelete() const { return get<RICsubscriptionDeleteFailure>(2); }
356 RICserviceUpdateFailure& select_id_ricServiceUpdate() { return set<RICserviceUpdateFailure>(3); }
357 RICserviceUpdateFailure const* get_id_ricServiceUpdate() const { return get<RICserviceUpdateFailure>(3); }
358 RICcontrolFailure& select_id_ricControl() { return set<RICcontrolFailure>(4); }
359 RICcontrolFailure const* get_id_ricControl() const { return get<RICcontrolFailure>(4); }
360 X2SetupFailure& select_id_x2Setup() { return set<X2SetupFailure>(5); }
361 X2SetupFailure const* get_id_x2Setup() const { return get<X2SetupFailure>(5); }
362 ENDCX2SetupFailure& select_id_endcX2Setup() { return set<ENDCX2SetupFailure>(6); }
363 ENDCX2SetupFailure const* get_id_endcX2Setup() const { return get<ENDCX2SetupFailure>(6); }
364 ResourceStatusFailure& select_id_resourceStatusReportingInitiation() { return set<ResourceStatusFailure>(7); }
365 ResourceStatusFailure const* get_id_resourceStatusReportingInitiation() const { return get<ResourceStatusFailure>(7); }
366 ENBConfigurationUpdateFailure& select_id_eNBConfigurationUpdate() { return set<ENBConfigurationUpdateFailure>(8); }
367 ENBConfigurationUpdateFailure const* get_id_eNBConfigurationUpdate() const { return get<ENBConfigurationUpdateFailure>(8); }
368 ENDCConfigurationUpdateFailure& select_id_endcConfigurationUpdate() { return set<ENDCConfigurationUpdateFailure>(9); }
369 ENDCConfigurationUpdateFailure const* get_id_endcConfigurationUpdate() const { return get<ENDCConfigurationUpdateFailure>(9); }
370 bool is_unknown() const { return type == 17; }
375 case 1: var.destroy<RICsubscriptionFailure>(); break;
376 case 2: var.destroy<RICsubscriptionDeleteFailure>(); break;
377 case 3: var.destroy<RICserviceUpdateFailure>(); break;
378 case 4: var.destroy<RICcontrolFailure>(); break;
379 case 5: var.destroy<X2SetupFailure>(); break;
380 case 6: var.destroy<ENDCX2SetupFailure>(); break;
381 case 7: var.destroy<ResourceStatusFailure>(); break;
382 case 8: var.destroy<ENBConfigurationUpdateFailure>(); break;
383 case 9: var.destroy<ENDCConfigurationUpdateFailure>(); break;
385 type = 0; ref_nested().clear();
387 template<typename V> static inline void enumerate(V& v)
389 v.template operator()<RICsubscriptionFailure>(1);
390 v.template operator()<RICsubscriptionDeleteFailure>(2);
391 v.template operator()<RICserviceUpdateFailure>(3);
392 v.template operator()<RICcontrolFailure>(4);
393 v.template operator()<X2SetupFailure>(5);
394 v.template operator()<ENDCX2SetupFailure>(6);
395 v.template operator()<ResourceStatusFailure>(7);
396 v.template operator()<ENBConfigurationUpdateFailure>(8);
397 v.template operator()<ENDCConfigurationUpdateFailure>(9);
401 template<typename V> bool decode(size_t index, V& v)
406 case 1: v(select_id_ricSubscription()); return true;
407 case 2: v(select_id_ricSubscriptionDelete()); return true;
408 case 3: v(select_id_ricServiceUpdate()); return true;
409 case 4: v(select_id_ricControl()); return true;
410 case 5: v(select_id_x2Setup()); return true;
411 case 6: v(select_id_endcX2Setup()); return true;
412 case 7: v(select_id_resourceStatusReportingInitiation()); return true;
413 case 8: v(select_id_eNBConfigurationUpdate()); return true;
414 case 9: v(select_id_endcConfigurationUpdate()); return true;
415 case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true;
420 template<typename V> bool encode(size_t index, V& v) const
422 if(index != type) return false;
425 case 1: v(var.as<RICsubscriptionFailure>()); return true;
426 case 2: v(var.as<RICsubscriptionDeleteFailure>()); return true;
427 case 3: v(var.as<RICserviceUpdateFailure>()); return true;
428 case 4: v(var.as<RICcontrolFailure>()); return true;
429 case 5: v(var.as<X2SetupFailure>()); return true;
430 case 6: v(var.as<ENDCX2SetupFailure>()); return true;
431 case 7: v(var.as<ResourceStatusFailure>()); return true;
432 case 8: v(var.as<ENBConfigurationUpdateFailure>()); return true;
433 case 9: v(var.as<ENDCConfigurationUpdateFailure>()); return true;
439 template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
440 template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
443 char dummy1[sizeof(ENBConfigurationUpdateFailure)];
444 char dummy2[sizeof(ENDCConfigurationUpdateFailure)];
445 char dummy3[sizeof(ENDCX2SetupFailure)];
446 char dummy4[sizeof(RICcontrolFailure)];
447 char dummy5[sizeof(RICserviceUpdateFailure)];
448 char dummy6[sizeof(RICsubscriptionDeleteFailure)];
449 char dummy7[sizeof(RICsubscriptionFailure)];
450 char dummy8[sizeof(ResourceStatusFailure)];
451 char dummy9[sizeof(X2SetupFailure)];
454 asn::variant<sizeof(union_type)> var;
458 struct procedureCode_t : asn::fixedtypefield<E2AP_ELEMENTARY_PROCEDURE::procedureCode_t, true>
460 size_t get_index() const {return type;}
461 bool is_unknown() const { return type == 17; }
462 void clear() {type = 0;}
463 void select_id_ricSubscription() { set(id_ricSubscription); type=1;}
464 void select_id_ricSubscriptionDelete() { set(id_ricSubscriptionDelete); type=2;}
465 void select_id_ricServiceUpdate() { set(id_ricServiceUpdate); type=3;}
466 void select_id_ricControl() { set(id_ricControl); type=4;}
467 void select_id_x2Setup() { set(id_x2Setup); type=5;}
468 void select_id_endcX2Setup() { set(id_endcX2Setup); type=6;}
469 void select_id_resourceStatusReportingInitiation() { set(id_resourceStatusReportingInitiation); type=7;}
470 void select_id_eNBConfigurationUpdate() { set(id_eNBConfigurationUpdate); type=8;}
471 void select_id_endcConfigurationUpdate() { set(id_endcConfigurationUpdate); type=9;}
472 void select_id_reset() { set(id_reset); type=10;}
473 void select_id_ricIndication() { set(id_ricIndication); type=11;}
474 void select_id_ricServiceQuery() { set(id_ricServiceQuery); type=12;}
475 void select_id_loadIndication() { set(id_loadIndication); type=13;}
476 void select_id_gNBStatusIndication() { set(id_gNBStatusIndication); type=14;}
477 void select_id_resourceStatusReporting() { set(id_resourceStatusReporting); type=15;}
478 void select_id_errorIndication() { set(id_errorIndication); type=16;}
479 E2AP_ELEMENTARY_PROCEDURE::procedureCode_t const& ref_value() const {return ref_nested();}
480 template<typename V> bool decode(V& v)
483 if(!v(ref_nested())) return false;
484 if(equal(id_ricSubscription)) { type = 1; return true; }
485 else if(equal(id_ricSubscriptionDelete)) { type = 2; return true; }
486 else if(equal(id_ricServiceUpdate)) { type = 3; return true; }
487 else if(equal(id_ricControl)) { type = 4; return true; }
488 else if(equal(id_x2Setup)) { type = 5; return true; }
489 else if(equal(id_endcX2Setup)) { type = 6; return true; }
490 else if(equal(id_resourceStatusReportingInitiation)) { type = 7; return true; }
491 else if(equal(id_eNBConfigurationUpdate)) { type = 8; return true; }
492 else if(equal(id_endcConfigurationUpdate)) { type = 9; return true; }
493 else if(equal(id_reset)) { type = 10; return true; }
494 else if(equal(id_ricIndication)) { type = 11; return true; }
495 else if(equal(id_ricServiceQuery)) { type = 12; return true; }
496 else if(equal(id_loadIndication)) { type = 13; return true; }
497 else if(equal(id_gNBStatusIndication)) { type = 14; return true; }
498 else if(equal(id_resourceStatusReporting)) { type = 15; return true; }
499 else if(equal(id_errorIndication)) { type = 16; return true; }
500 else { type = 17; return true;}
504 template<typename V> bool encode(V& v) const
506 return v(ref_nested());
510 template<typename V> bool decode(size_t index, V& v)
515 case 1: type = 1; if(v(ref_nested())) { return equal(id_ricSubscription);} return false;
516 case 2: type = 2; if(v(ref_nested())) { return equal(id_ricSubscriptionDelete);} return false;
517 case 3: type = 3; if(v(ref_nested())) { return equal(id_ricServiceUpdate);} return false;
518 case 4: type = 4; if(v(ref_nested())) { return equal(id_ricControl);} return false;
519 case 5: type = 5; if(v(ref_nested())) { return equal(id_x2Setup);} return false;
520 case 6: type = 6; if(v(ref_nested())) { return equal(id_endcX2Setup);} return false;
521 case 7: type = 7; if(v(ref_nested())) { return equal(id_resourceStatusReportingInitiation);} return false;
522 case 8: type = 8; if(v(ref_nested())) { return equal(id_eNBConfigurationUpdate);} return false;
523 case 9: type = 9; if(v(ref_nested())) { return equal(id_endcConfigurationUpdate);} return false;
524 case 10: type = 10; if(v(ref_nested())) { return equal(id_reset);} return false;
525 case 11: type = 11; if(v(ref_nested())) { return equal(id_ricIndication);} return false;
526 case 12: type = 12; if(v(ref_nested())) { return equal(id_ricServiceQuery);} return false;
527 case 13: type = 13; if(v(ref_nested())) { return equal(id_loadIndication);} return false;
528 case 14: type = 14; if(v(ref_nested())) { return equal(id_gNBStatusIndication);} return false;
529 case 15: type = 15; if(v(ref_nested())) { return equal(id_resourceStatusReporting);} return false;
530 case 16: type = 16; if(v(ref_nested())) { return equal(id_errorIndication);} return false;
531 case 17: type = 17; return v(ref_nested());
532 ref_nested().clear();
537 template<typename V> bool encode(size_t index, V& v) const
539 if(index != type) {return false;} return v(ref_nested());
546 struct criticality_t : asn::fixedtypefield<E2AP_ELEMENTARY_PROCEDURE::criticality_t, true>
548 size_t get_index() const {return type;}
549 bool is_unknown() const { return type == 17; }
550 void clear() {type = 0;}
551 void select_id_ricSubscription() { set(reject); type=1;}
552 void select_id_ricSubscriptionDelete() { set(reject); type=2;}
553 void select_id_ricServiceUpdate() { set(reject); type=3;}
554 void select_id_ricControl() { set(reject); type=4;}
555 void select_id_x2Setup() { set(reject); type=5;}
556 void select_id_endcX2Setup() { set(reject); type=6;}
557 void select_id_resourceStatusReportingInitiation() { set(reject); type=7;}
558 void select_id_eNBConfigurationUpdate() { set(reject); type=8;}
559 void select_id_endcConfigurationUpdate() { set(reject); type=9;}
560 void select_id_reset() { set(reject); type=10;}
561 void select_id_ricIndication() { set(ignore); type=11;}
562 void select_id_ricServiceQuery() { set(ignore); type=12;}
563 void select_id_loadIndication() { set(ignore); type=13;}
564 void select_id_gNBStatusIndication() { set(ignore); type=14;}
565 void select_id_resourceStatusReporting() { set(ignore); type=15;}
566 void select_id_errorIndication() { set(ignore); type=16;}
567 E2AP_ELEMENTARY_PROCEDURE::criticality_t const& ref_value() const {return ref_nested();}
568 template<typename V> bool decode(V& v)
571 if(!v(ref_nested())) return false;
572 if(equal(reject)) { type = 1; return true; }
573 else if(equal(reject)) { type = 2; return true; }
574 else if(equal(reject)) { type = 3; return true; }
575 else if(equal(reject)) { type = 4; return true; }
576 else if(equal(reject)) { type = 5; return true; }
577 else if(equal(reject)) { type = 6; return true; }
578 else if(equal(reject)) { type = 7; return true; }
579 else if(equal(reject)) { type = 8; return true; }
580 else if(equal(reject)) { type = 9; return true; }
581 else if(equal(reject)) { type = 10; return true; }
582 else if(equal(ignore)) { type = 11; return true; }
583 else if(equal(ignore)) { type = 12; return true; }
584 else if(equal(ignore)) { type = 13; return true; }
585 else if(equal(ignore)) { type = 14; return true; }
586 else if(equal(ignore)) { type = 15; return true; }
587 else if(equal(ignore)) { type = 16; return true; }
588 else { type = 17; return true;}
592 template<typename V> bool encode(V& v) const
594 return v(ref_nested());
598 template<typename V> bool decode(size_t index, V& v)
603 case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false;
604 case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false;
605 case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false;
606 case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false;
607 case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false;
608 case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false;
609 case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false;
610 case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false;
611 case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false;
612 case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false;
613 case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false;
614 case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false;
615 case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false;
616 case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false;
617 case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false;
618 case 16: type = 16; if(v(ref_nested())) { return equal(ignore);} return false;
619 case 17: type = 17; return v(ref_nested());
620 ref_nested().clear();
625 template<typename V> bool encode(size_t index, V& v) const
627 if(index != type) {return false;} return v(ref_nested());
637 InitiatingMessage ::= SEQUENCE {
638 procedureCode E2AP-ELEMENTARY-PROCEDURE.&procedureCode({E2AP-ELEMENTARY-PROCEDURES}),
639 criticality E2AP-ELEMENTARY-PROCEDURE.&criticality({E2AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
640 value E2AP-ELEMENTARY-PROCEDURE.&InitiatingMessage({E2AP-ELEMENTARY-PROCEDURES}{@procedureCode})
644 struct InitiatingMessage : asn::sequence<3, 0, false, 0>
646 static constexpr const char* name() {return "InitiatingMessage";}
647 using parent_t = asn::sequence<3, 0, false, 0>;
648 struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t
650 static constexpr const char* name() {return "procedureCode_t";}
651 using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t;
652 template<typename V> bool decode(V& v, InitiatingMessage const& c)
654 return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v);
656 template<typename V> bool encode(V& v, InitiatingMessage const& c) const
658 return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v);
661 procedureCode_t& ref_procedureCode() {return procedureCode;}
662 procedureCode_t const& ref_procedureCode() const {return procedureCode;}
663 struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t
665 static constexpr const char* name() {return "criticality_t";}
666 using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t;
667 template<typename V> bool decode(V& v, InitiatingMessage const& c)
669 return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v);
671 template<typename V> bool encode(V& v, InitiatingMessage const& c) const
673 return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v);
676 criticality_t& ref_criticality() {return criticality;}
677 criticality_t const& ref_criticality() const {return criticality;}
678 struct value_t : E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t
680 static constexpr const char* name() {return "value_t";}
681 using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t;
682 template<typename V> bool decode(V& v, InitiatingMessage const& c)
684 return E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::decode(c.procedureCode.get_index(), v);
686 template<typename V> bool encode(V& v, InitiatingMessage const& c) const
688 return E2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::encode(c.procedureCode.get_index(), v);
691 value_t& ref_value() {return value;}
692 value_t const& ref_value() const {return value;}
693 template<typename V> void decode(V& v)
700 template<typename V> void encode(V& v) const
709 procedureCode.clear();
715 procedureCode_t procedureCode;
716 criticality_t criticality;
721 SuccessfulOutcome ::= SEQUENCE {
722 procedureCode E2AP-ELEMENTARY-PROCEDURE.&procedureCode({E2AP-ELEMENTARY-PROCEDURES}),
723 criticality E2AP-ELEMENTARY-PROCEDURE.&criticality({E2AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
724 value E2AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome({E2AP-ELEMENTARY-PROCEDURES}{@procedureCode})
728 struct SuccessfulOutcome : asn::sequence<3, 0, false, 0>
730 static constexpr const char* name() {return "SuccessfulOutcome";}
731 using parent_t = asn::sequence<3, 0, false, 0>;
732 struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t
734 static constexpr const char* name() {return "procedureCode_t";}
735 using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t;
736 template<typename V> bool decode(V& v, SuccessfulOutcome const& c)
738 return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v);
740 template<typename V> bool encode(V& v, SuccessfulOutcome const& c) const
742 return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v);
745 procedureCode_t& ref_procedureCode() {return procedureCode;}
746 procedureCode_t const& ref_procedureCode() const {return procedureCode;}
747 struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t
749 static constexpr const char* name() {return "criticality_t";}
750 using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t;
751 template<typename V> bool decode(V& v, SuccessfulOutcome const& c)
753 return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v);
755 template<typename V> bool encode(V& v, SuccessfulOutcome const& c) const
757 return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v);
760 criticality_t& ref_criticality() {return criticality;}
761 criticality_t const& ref_criticality() const {return criticality;}
762 struct value_t : E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t
764 static constexpr const char* name() {return "value_t";}
765 using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t;
766 template<typename V> bool decode(V& v, SuccessfulOutcome const& c)
768 return E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::decode(c.procedureCode.get_index(), v);
770 template<typename V> bool encode(V& v, SuccessfulOutcome const& c) const
772 return E2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::encode(c.procedureCode.get_index(), v);
775 value_t& ref_value() {return value;}
776 value_t const& ref_value() const {return value;}
777 template<typename V> void decode(V& v)
784 template<typename V> void encode(V& v) const
793 procedureCode.clear();
799 procedureCode_t procedureCode;
800 criticality_t criticality;
805 UnsuccessfulOutcome ::= SEQUENCE {
806 procedureCode E2AP-ELEMENTARY-PROCEDURE.&procedureCode({E2AP-ELEMENTARY-PROCEDURES}),
807 criticality E2AP-ELEMENTARY-PROCEDURE.&criticality({E2AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
808 value E2AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome({E2AP-ELEMENTARY-PROCEDURES}{@procedureCode})
812 struct UnsuccessfulOutcome : asn::sequence<3, 0, false, 0>
814 static constexpr const char* name() {return "UnsuccessfulOutcome";}
815 using parent_t = asn::sequence<3, 0, false, 0>;
816 struct procedureCode_t : E2AP_ELEMENTARY_PROCEDURES::procedureCode_t
818 static constexpr const char* name() {return "procedureCode_t";}
819 using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::procedureCode_t;
820 template<typename V> bool decode(V& v, UnsuccessfulOutcome const& c)
822 return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v);
824 template<typename V> bool encode(V& v, UnsuccessfulOutcome const& c) const
826 return E2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v);
829 procedureCode_t& ref_procedureCode() {return procedureCode;}
830 procedureCode_t const& ref_procedureCode() const {return procedureCode;}
831 struct criticality_t : E2AP_ELEMENTARY_PROCEDURES::criticality_t
833 static constexpr const char* name() {return "criticality_t";}
834 using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::criticality_t;
835 template<typename V> bool decode(V& v, UnsuccessfulOutcome const& c)
837 return E2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v);
839 template<typename V> bool encode(V& v, UnsuccessfulOutcome const& c) const
841 return E2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v);
844 criticality_t& ref_criticality() {return criticality;}
845 criticality_t const& ref_criticality() const {return criticality;}
846 struct value_t : E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t
848 static constexpr const char* name() {return "value_t";}
849 using parent_t = typename E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t;
850 template<typename V> bool decode(V& v, UnsuccessfulOutcome const& c)
852 return E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::decode(c.procedureCode.get_index(), v);
854 template<typename V> bool encode(V& v, UnsuccessfulOutcome const& c) const
856 return E2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::encode(c.procedureCode.get_index(), v);
859 value_t& ref_value() {return value;}
860 value_t const& ref_value() const {return value;}
861 template<typename V> void decode(V& v)
868 template<typename V> void encode(V& v) const
877 procedureCode.clear();
883 procedureCode_t procedureCode;
884 criticality_t criticality;
889 E2AP-PDU ::= CHOICE {
890 initiatingMessage InitiatingMessage,
891 successfulOutcome SuccessfulOutcome,
892 unsuccessfulOutcome UnsuccessfulOutcome,
897 struct E2AP_PDU : asn::choice<3, 0, true>
899 static constexpr const char* name() {return "E2AP-PDU";}
900 using parent_t = asn::choice<3, 0, true>;
901 index_type get_index() const {return index;}
902 bool is_unknown() const {return index == 4;}
903 void set_unknown() { set_index(4); }
904 ~E2AP_PDU() {clear();}
905 struct initiatingMessage_t : InitiatingMessage
907 static constexpr const char* name() {return "initiatingMessage_t";}
908 using parent_t = InitiatingMessage;
911 struct successfulOutcome_t : SuccessfulOutcome
913 static constexpr const char* name() {return "successfulOutcome_t";}
914 using parent_t = SuccessfulOutcome;
917 struct unsuccessfulOutcome_t : UnsuccessfulOutcome
919 static constexpr const char* name() {return "unsuccessfulOutcome_t";}
920 using parent_t = UnsuccessfulOutcome;
927 case 1: var.destroy<initiatingMessage_t>(); break;
928 case 2: var.destroy<successfulOutcome_t>(); break;
929 case 3: var.destroy<unsuccessfulOutcome_t>(); break;
934 template<typename V> bool decode(size_t idx, V& v)
939 case 1: set_index(1); return v(var.build<initiatingMessage_t>());
940 case 2: set_index(2); return v(var.build<successfulOutcome_t>());
941 case 3: set_index(3); return v(var.build<unsuccessfulOutcome_t>());
946 template<typename V> bool encode(V& v) const
950 case 1: return v(var.as<initiatingMessage_t>());
951 case 2: return v(var.as<successfulOutcome_t>());
952 case 3: return v(var.as<unsuccessfulOutcome_t>());
956 template<typename V> static inline void enumerate(V& v)
958 v.template operator()<initiatingMessage_t>(1);
959 v.template operator()<successfulOutcome_t>(2);
960 v.template operator()<unsuccessfulOutcome_t>(3);
963 initiatingMessage_t& select_initiatingMessage() { if(get_index() != 1) { clear(); set_index(1); return var.build<initiatingMessage_t>();} return var.as<initiatingMessage_t>();}
964 initiatingMessage_t const* get_initiatingMessage() const { if(get_index() == 1) { return &var.as<initiatingMessage_t>();} return nullptr; }
965 successfulOutcome_t& select_successfulOutcome() { if(get_index() != 2) { clear(); set_index(2); return var.build<successfulOutcome_t>();} return var.as<successfulOutcome_t>();}
966 successfulOutcome_t const* get_successfulOutcome() const { if(get_index() == 2) { return &var.as<successfulOutcome_t>();} return nullptr; }
967 unsuccessfulOutcome_t& select_unsuccessfulOutcome() { if(get_index() != 3) { clear(); set_index(3); return var.build<unsuccessfulOutcome_t>();} return var.as<unsuccessfulOutcome_t>();}
968 unsuccessfulOutcome_t const* get_unsuccessfulOutcome() const { if(get_index() == 3) { return &var.as<unsuccessfulOutcome_t>();} return nullptr; }
970 void set_index(index_type i) {index = i; base::set();}
973 char dummy1[sizeof(initiatingMessage_t)];
974 char dummy2[sizeof(successfulOutcome_t)];
975 char dummy3[sizeof(unsuccessfulOutcome_t)];
978 asn::variant<sizeof(union_type)> var;
979 index_type index {0};