/***************************************************************************** # Copyright 2019 AT&T Intellectual Property * # * # Licensed under the Apache License, Version 2.0 (the "License"); * # you may not use this file except in compliance with the License. * # You may obtain a copy of the License at * # * # http://www.apache.org/licenses/LICENSE-2.0 * # * # Unless required by applicable law or agreed to in writing, software * # distributed under the License is distributed on an "AS IS" BASIS, * # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * # See the License for the specific language governing permissions and * # limitations under the License. * # * ******************************************************************************/ #pragma once #include "asn/asn.hpp" static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); #include "X2AP-IEs.hpp" #include "X2AP-Containers.hpp" #include "X2AP-Constants.hpp" /* ActivatedCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct ActivatedCellList_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ActivatedCellList-Item::= SEQUENCE { ecgi ECGI, iE-Extensions ProtocolExtensionContainer { {ActivatedCellList-Item-ExtIEs} } OPTIONAL, ... } */ struct ActivatedCellList_Item : asn::sequence<2, 0, true, 1> { static constexpr const char* name() {return "ActivatedCellList-Item";} using parent_t = asn::sequence<2, 0, true, 1>; struct ecgi_t : ECGI { static constexpr const char* name() {return "ecgi_t";} using parent_t = ECGI; }; ecgi_t& ref_ecgi() {return ecgi;} ecgi_t const& ref_ecgi() const {return ecgi;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(ecgi); v(iE_Extensions); }; template void encode(V& v) const { v(ecgi); v(iE_Extensions); }; void clear() { ecgi.clear(); iE_Extensions.clear(); }; private: ecgi_t ecgi; iE_Extensions_t iE_Extensions; }; /* ActivatedCellList ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ActivatedCellList-Item */ struct ActivatedCellList_elm : ActivatedCellList_Item { static constexpr const char* name() {return "ActivatedCellList_elm";} using parent_t = ActivatedCellList_Item; }; struct ActivatedCellList : asn::sequenceof { static constexpr const char* name() {return "ActivatedCellList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ActivatedNRCellList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct ActivatedNRCellList_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ActivatedNRCellList-Item::= SEQUENCE { nrCellID NRCGI, iE-Extensions ProtocolExtensionContainer { {ActivatedNRCellList-Item-ExtIEs} } OPTIONAL, ... } */ struct ActivatedNRCellList_Item : asn::sequence<2, 0, true, 1> { static constexpr const char* name() {return "ActivatedNRCellList-Item";} using parent_t = asn::sequence<2, 0, true, 1>; struct nrCellID_t : NRCGI { static constexpr const char* name() {return "nrCellID_t";} using parent_t = NRCGI; }; nrCellID_t& ref_nrCellID() {return nrCellID;} nrCellID_t const& ref_nrCellID() const {return nrCellID;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(nrCellID); v(iE_Extensions); }; template void encode(V& v) const { v(nrCellID); v(iE_Extensions); }; void clear() { nrCellID.clear(); iE_Extensions.clear(); }; private: nrCellID_t nrCellID; iE_Extensions_t iE_Extensions; }; /* ActivatedNRCellList ::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF ActivatedNRCellList-Item */ struct ActivatedNRCellList_elm : ActivatedNRCellList_Item { static constexpr const char* name() {return "ActivatedNRCellList_elm";} using parent_t = ActivatedNRCellList_Item; }; struct ActivatedNRCellList : asn::sequenceof { static constexpr const char* name() {return "ActivatedNRCellList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* CellActivationFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } */ struct CellActivationFailure_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Cause() { set(id_Cause); type=1;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Cause)) { type = 1; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Cause() { set(ignore); type=1;} void select_id_CriticalityDiagnostics() { set(ignore); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} Cause& select_id_Cause() { return set(1); } Cause const* get_id_Cause() const { return get(1); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Cause()); return true; case 2: v(select_id_CriticalityDiagnostics()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Cause() { set(mandatory); type=1;} void select_id_CriticalityDiagnostics() { set(optional); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* CellActivationFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container {{CellActivationFailure-IEs}}, ... } */ struct CellActivationFailure : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "CellActivationFailure";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ServedCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct ServedCellsToActivate_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ServedCellsToActivate-Item::= SEQUENCE { ecgi ECGI, iE-Extensions ProtocolExtensionContainer { {ServedCellsToActivate-Item-ExtIEs} } OPTIONAL, ... } */ struct ServedCellsToActivate_Item : asn::sequence<2, 0, true, 1> { static constexpr const char* name() {return "ServedCellsToActivate-Item";} using parent_t = asn::sequence<2, 0, true, 1>; struct ecgi_t : ECGI { static constexpr const char* name() {return "ecgi_t";} using parent_t = ECGI; }; ecgi_t& ref_ecgi() {return ecgi;} ecgi_t const& ref_ecgi() const {return ecgi;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(ecgi); v(iE_Extensions); }; template void encode(V& v) const { v(ecgi); v(iE_Extensions); }; void clear() { ecgi.clear(); iE_Extensions.clear(); }; private: ecgi_t ecgi; iE_Extensions_t iE_Extensions; }; /* ServedCellsToActivate::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToActivate-Item */ struct ServedCellsToActivate_elm : ServedCellsToActivate_Item { static constexpr const char* name() {return "ServedCellsToActivate_elm";} using parent_t = ServedCellsToActivate_Item; }; struct ServedCellsToActivate : asn::sequenceof { static constexpr const char* name() {return "ServedCellsToActivate";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* CellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-ServedCellsToActivate CRITICALITY reject TYPE ServedCellsToActivate PRESENCE mandatory}, ... } */ struct CellActivationRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_ServedCellsToActivate() { set(id_ServedCellsToActivate); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ServedCellsToActivate)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedCellsToActivate);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_ServedCellsToActivate() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} ServedCellsToActivate& select_id_ServedCellsToActivate() { return set(1); } ServedCellsToActivate const* get_id_ServedCellsToActivate() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ServedCellsToActivate()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ServedCellsToActivate)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_ServedCellsToActivate() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* CellActivationRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{CellActivationRequest-IEs}}, ... } */ struct CellActivationRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "CellActivationRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* CellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { { ID id-ActivatedCellList CRITICALITY ignore TYPE ActivatedCellList PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, ... } */ struct CellActivationResponse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_ActivatedCellList() { set(id_ActivatedCellList); type=1;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ActivatedCellList)) { type = 1; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivatedCellList);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_ActivatedCellList() { set(ignore); type=1;} void select_id_CriticalityDiagnostics() { set(ignore); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} ActivatedCellList& select_id_ActivatedCellList() { return set(1); } ActivatedCellList const* get_id_ActivatedCellList() const { return get(1); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ActivatedCellList()); return true; case 2: v(select_id_CriticalityDiagnostics()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ActivatedCellList)]; char dummy2[sizeof(CriticalityDiagnostics)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_ActivatedCellList() { set(mandatory); type=1;} void select_id_CriticalityDiagnostics() { set(optional); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* CellActivationResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{CellActivationResponse-IEs}}, ... } */ struct CellActivationResponse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "CellActivationResponse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* Limited-list-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct Limited_list_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* Limited-list ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF SEQUENCE { nrCellID NRCGI, iE-Extensions ProtocolExtensionContainer { {Limited-list-ExtIEs} } OPTIONAL, ... } */ struct Limited_list_elm : asn::sequence<2, 0, true, 1> { static constexpr const char* name() {return "Limited_list_elm";} using parent_t = asn::sequence<2, 0, true, 1>; struct nrCellID_t : NRCGI { static constexpr const char* name() {return "nrCellID_t";} using parent_t = NRCGI; }; nrCellID_t& ref_nrCellID() {return nrCellID;} nrCellID_t const& ref_nrCellID() const {return nrCellID;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(nrCellID); v(iE_Extensions); }; template void encode(V& v) const { v(nrCellID); v(iE_Extensions); }; void clear() { nrCellID.clear(); iE_Extensions.clear(); }; private: nrCellID_t nrCellID; iE_Extensions_t iE_Extensions; }; struct Limited_list : asn::sequenceof { static constexpr const char* name() {return "Limited-list";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* CellAssistanceInformation ::= CHOICE { limited-list Limited-list, full-list ENUMERATED {allServedNRcells, ...}, ... } */ struct CellAssistanceInformation : asn::choice<2, 0, true> { static constexpr const char* name() {return "CellAssistanceInformation";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~CellAssistanceInformation() {clear();} struct limited_list_t : Limited_list { static constexpr const char* name() {return "limited_list_t";} using parent_t = Limited_list; }; struct full_list_t : asn::enumerated<1, 0, true> { static constexpr const char* name() {return "full_list_t";} using parent_t = asn::enumerated<1, 0, true>; typedef enum { allServedNRcells } index_t; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } limited_list_t& select_limited_list() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} limited_list_t const* get_limited_list() const { if(get_index() == 1) { return &var.as();} return nullptr; } full_list_t& select_full_list() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} full_list_t const* get_full_list() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(limited_list_t)]; char dummy2[sizeof(full_list_t)]; }; asn::variant var; index_type index {0}; }; /* CellInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-ABSInformation CRITICALITY ignore EXTENSION ABSInformation PRESENCE optional }| { ID id-InvokeIndication CRITICALITY ignore EXTENSION InvokeIndication PRESENCE optional }| { ID id-IntendedULDLConfiguration CRITICALITY ignore EXTENSION SubframeAssignment PRESENCE optional }| { ID id-ExtendedULInterferenceOverloadInfo CRITICALITY ignore EXTENSION ExtendedULInterferenceOverloadInfo PRESENCE optional }| { ID id-CoMPInformation CRITICALITY ignore EXTENSION CoMPInformation PRESENCE optional }| { ID id-DynamicDLTransmissionInformation CRITICALITY ignore EXTENSION DynamicDLTransmissionInformation PRESENCE optional }, ... } */ struct CellInformation_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_ABSInformation() { set(id_ABSInformation); type=1;} void select_id_InvokeIndication() { set(id_InvokeIndication); type=2;} void select_id_IntendedULDLConfiguration() { set(id_IntendedULDLConfiguration); type=3;} void select_id_ExtendedULInterferenceOverloadInfo() { set(id_ExtendedULInterferenceOverloadInfo); type=4;} void select_id_CoMPInformation() { set(id_CoMPInformation); type=5;} void select_id_DynamicDLTransmissionInformation() { set(id_DynamicDLTransmissionInformation); type=6;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ABSInformation)) { type = 1; return true; } else if(equal(id_InvokeIndication)) { type = 2; return true; } else if(equal(id_IntendedULDLConfiguration)) { type = 3; return true; } else if(equal(id_ExtendedULInterferenceOverloadInfo)) { type = 4; return true; } else if(equal(id_CoMPInformation)) { type = 5; return true; } else if(equal(id_DynamicDLTransmissionInformation)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ABSInformation);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_InvokeIndication);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_IntendedULDLConfiguration);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_ExtendedULInterferenceOverloadInfo);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_CoMPInformation);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_DynamicDLTransmissionInformation);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_ABSInformation() { set(ignore); type=1;} void select_id_InvokeIndication() { set(ignore); type=2;} void select_id_IntendedULDLConfiguration() { set(ignore); type=3;} void select_id_ExtendedULInterferenceOverloadInfo() { set(ignore); type=4;} void select_id_CoMPInformation() { set(ignore); type=5;} void select_id_DynamicDLTransmissionInformation() { set(ignore); type=6;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} ABSInformation& select_id_ABSInformation() { return set(1); } ABSInformation const* get_id_ABSInformation() const { return get(1); } InvokeIndication& select_id_InvokeIndication() { return set(2); } InvokeIndication const* get_id_InvokeIndication() const { return get(2); } SubframeAssignment& select_id_IntendedULDLConfiguration() { return set(3); } SubframeAssignment const* get_id_IntendedULDLConfiguration() const { return get(3); } ExtendedULInterferenceOverloadInfo& select_id_ExtendedULInterferenceOverloadInfo() { return set(4); } ExtendedULInterferenceOverloadInfo const* get_id_ExtendedULInterferenceOverloadInfo() const { return get(4); } CoMPInformation& select_id_CoMPInformation() { return set(5); } CoMPInformation const* get_id_CoMPInformation() const { return get(5); } DynamicDLTransmissionInformation& select_id_DynamicDLTransmissionInformation() { return set(6); } DynamicDLTransmissionInformation const* get_id_DynamicDLTransmissionInformation() const { return get(6); } bool is_unknown() const { return type == 7; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ABSInformation()); return true; case 2: v(select_id_InvokeIndication()); return true; case 3: v(select_id_IntendedULDLConfiguration()); return true; case 4: v(select_id_ExtendedULInterferenceOverloadInfo()); return true; case 5: v(select_id_CoMPInformation()); return true; case 6: v(select_id_DynamicDLTransmissionInformation()); return true; case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ABSInformation)]; char dummy2[sizeof(CoMPInformation)]; char dummy3[sizeof(DynamicDLTransmissionInformation)]; char dummy4[sizeof(ExtendedULInterferenceOverloadInfo)]; char dummy5[sizeof(InvokeIndication)]; char dummy6[sizeof(SubframeAssignment)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_ABSInformation() { set(optional); type=1;} void select_id_InvokeIndication() { set(optional); type=2;} void select_id_IntendedULDLConfiguration() { set(optional); type=3;} void select_id_ExtendedULInterferenceOverloadInfo() { set(optional); type=4;} void select_id_CoMPInformation() { set(optional); type=5;} void select_id_DynamicDLTransmissionInformation() { set(optional); type=6;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* CellInformation-Item ::= SEQUENCE { cell-ID ECGI, ul-InterferenceOverloadIndication UL-InterferenceOverloadIndication OPTIONAL, ul-HighInterferenceIndicationInfo UL-HighInterferenceIndicationInfo OPTIONAL, relativeNarrowbandTxPower RelativeNarrowbandTxPower OPTIONAL, iE-Extensions ProtocolExtensionContainer { {CellInformation-Item-ExtIEs} } OPTIONAL, ... } */ struct CellInformation_Item : asn::sequence<5, 0, true, 4> { static constexpr const char* name() {return "CellInformation-Item";} using parent_t = asn::sequence<5, 0, true, 4>; struct cell_ID_t : ECGI { static constexpr const char* name() {return "cell_ID_t";} using parent_t = ECGI; }; cell_ID_t& ref_cell_ID() {return cell_ID;} cell_ID_t const& ref_cell_ID() const {return cell_ID;} struct ul_InterferenceOverloadIndication_t : UL_InterferenceOverloadIndication { static constexpr const char* name() {return "ul_InterferenceOverloadIndication_t";} using parent_t = UL_InterferenceOverloadIndication; static constexpr bool optional = true; }; ul_InterferenceOverloadIndication_t& set_ul_InterferenceOverloadIndication() { ul_InterferenceOverloadIndication.setpresent(true); return ul_InterferenceOverloadIndication;} ul_InterferenceOverloadIndication_t const* get_ul_InterferenceOverloadIndication() const {return ul_InterferenceOverloadIndication.is_valid() ? &ul_InterferenceOverloadIndication : nullptr;} struct ul_HighInterferenceIndicationInfo_t : UL_HighInterferenceIndicationInfo { static constexpr const char* name() {return "ul_HighInterferenceIndicationInfo_t";} using parent_t = UL_HighInterferenceIndicationInfo; static constexpr bool optional = true; }; ul_HighInterferenceIndicationInfo_t& set_ul_HighInterferenceIndicationInfo() { ul_HighInterferenceIndicationInfo.setpresent(true); return ul_HighInterferenceIndicationInfo;} ul_HighInterferenceIndicationInfo_t const* get_ul_HighInterferenceIndicationInfo() const {return ul_HighInterferenceIndicationInfo.is_valid() ? &ul_HighInterferenceIndicationInfo : nullptr;} struct relativeNarrowbandTxPower_t : RelativeNarrowbandTxPower { static constexpr const char* name() {return "relativeNarrowbandTxPower_t";} using parent_t = RelativeNarrowbandTxPower; static constexpr bool optional = true; }; relativeNarrowbandTxPower_t& set_relativeNarrowbandTxPower() { relativeNarrowbandTxPower.setpresent(true); return relativeNarrowbandTxPower;} relativeNarrowbandTxPower_t const* get_relativeNarrowbandTxPower() const {return relativeNarrowbandTxPower.is_valid() ? &relativeNarrowbandTxPower : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(cell_ID); v(ul_InterferenceOverloadIndication); v(ul_HighInterferenceIndicationInfo); v(relativeNarrowbandTxPower); v(iE_Extensions); }; template void encode(V& v) const { v(cell_ID); v(ul_InterferenceOverloadIndication); v(ul_HighInterferenceIndicationInfo); v(relativeNarrowbandTxPower); v(iE_Extensions); }; void clear() { cell_ID.clear(); ul_InterferenceOverloadIndication.clear(); ul_HighInterferenceIndicationInfo.clear(); relativeNarrowbandTxPower.clear(); iE_Extensions.clear(); }; private: cell_ID_t cell_ID; ul_InterferenceOverloadIndication_t ul_InterferenceOverloadIndication; ul_HighInterferenceIndicationInfo_t ul_HighInterferenceIndicationInfo; relativeNarrowbandTxPower_t relativeNarrowbandTxPower; iE_Extensions_t iE_Extensions; }; /* CellInformation-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-CellInformation-Item CRITICALITY ignore TYPE CellInformation-Item PRESENCE mandatory } } */ struct CellInformation_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_CellInformation_Item() { set(id_CellInformation_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_CellInformation_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_CellInformation_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_CellInformation_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} CellInformation_Item& select_id_CellInformation_Item() { return set(1); } CellInformation_Item const* get_id_CellInformation_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_CellInformation_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CellInformation_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_CellInformation_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* CellInformation-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellInformation-ItemIEs} } */ struct CellInformation_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "CellInformation_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct CellInformation_List : asn::sequenceof { static constexpr const char* name() {return "CellInformation-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* CellMeasurementResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-CompositeAvailableCapacityGroup CRITICALITY ignore EXTENSION CompositeAvailableCapacityGroup PRESENCE optional}| { ID id-ABS-Status CRITICALITY ignore EXTENSION ABS-Status PRESENCE optional}| { ID id-RSRPMRList CRITICALITY ignore EXTENSION RSRPMRList PRESENCE optional}| { ID id-CSIReportList CRITICALITY ignore EXTENSION CSIReportList PRESENCE optional}| { ID id-CellReportingIndicator CRITICALITY ignore EXTENSION CellReportingIndicator PRESENCE optional}, ... } */ struct CellMeasurementResult_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_CompositeAvailableCapacityGroup() { set(id_CompositeAvailableCapacityGroup); type=1;} void select_id_ABS_Status() { set(id_ABS_Status); type=2;} void select_id_RSRPMRList() { set(id_RSRPMRList); type=3;} void select_id_CSIReportList() { set(id_CSIReportList); type=4;} void select_id_CellReportingIndicator() { set(id_CellReportingIndicator); type=5;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_CompositeAvailableCapacityGroup)) { type = 1; return true; } else if(equal(id_ABS_Status)) { type = 2; return true; } else if(equal(id_RSRPMRList)) { type = 3; return true; } else if(equal(id_CSIReportList)) { type = 4; return true; } else if(equal(id_CellReportingIndicator)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_CompositeAvailableCapacityGroup);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ABS_Status);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_RSRPMRList);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CSIReportList);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_CellReportingIndicator);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_CompositeAvailableCapacityGroup() { set(ignore); type=1;} void select_id_ABS_Status() { set(ignore); type=2;} void select_id_RSRPMRList() { set(ignore); type=3;} void select_id_CSIReportList() { set(ignore); type=4;} void select_id_CellReportingIndicator() { set(ignore); type=5;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} CompositeAvailableCapacityGroup& select_id_CompositeAvailableCapacityGroup() { return set(1); } CompositeAvailableCapacityGroup const* get_id_CompositeAvailableCapacityGroup() const { return get(1); } ABS_Status& select_id_ABS_Status() { return set(2); } ABS_Status const* get_id_ABS_Status() const { return get(2); } RSRPMRList& select_id_RSRPMRList() { return set(3); } RSRPMRList const* get_id_RSRPMRList() const { return get(3); } CSIReportList& select_id_CSIReportList() { return set(4); } CSIReportList const* get_id_CSIReportList() const { return get(4); } CellReportingIndicator& select_id_CellReportingIndicator() { return set(5); } CellReportingIndicator const* get_id_CellReportingIndicator() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_CompositeAvailableCapacityGroup()); return true; case 2: v(select_id_ABS_Status()); return true; case 3: v(select_id_RSRPMRList()); return true; case 4: v(select_id_CSIReportList()); return true; case 5: v(select_id_CellReportingIndicator()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ABS_Status)]; char dummy2[sizeof(CSIReportList)]; char dummy3[sizeof(CellReportingIndicator)]; char dummy4[sizeof(CompositeAvailableCapacityGroup)]; char dummy5[sizeof(RSRPMRList)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_CompositeAvailableCapacityGroup() { set(optional); type=1;} void select_id_ABS_Status() { set(optional); type=2;} void select_id_RSRPMRList() { set(optional); type=3;} void select_id_CSIReportList() { set(optional); type=4;} void select_id_CellReportingIndicator() { set(optional); type=5;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* CellMeasurementResult-Item ::= SEQUENCE { cell-ID ECGI, hWLoadIndicator HWLoadIndicator OPTIONAL, s1TNLLoadIndicator S1TNLLoadIndicator OPTIONAL, radioResourceStatus RadioResourceStatus OPTIONAL, iE-Extensions ProtocolExtensionContainer { {CellMeasurementResult-Item-ExtIEs} } OPTIONAL, ... } */ struct CellMeasurementResult_Item : asn::sequence<5, 0, true, 4> { static constexpr const char* name() {return "CellMeasurementResult-Item";} using parent_t = asn::sequence<5, 0, true, 4>; struct cell_ID_t : ECGI { static constexpr const char* name() {return "cell_ID_t";} using parent_t = ECGI; }; cell_ID_t& ref_cell_ID() {return cell_ID;} cell_ID_t const& ref_cell_ID() const {return cell_ID;} struct hWLoadIndicator_t : HWLoadIndicator { static constexpr const char* name() {return "hWLoadIndicator_t";} using parent_t = HWLoadIndicator; static constexpr bool optional = true; }; hWLoadIndicator_t& set_hWLoadIndicator() { hWLoadIndicator.setpresent(true); return hWLoadIndicator;} hWLoadIndicator_t const* get_hWLoadIndicator() const {return hWLoadIndicator.is_valid() ? &hWLoadIndicator : nullptr;} struct s1TNLLoadIndicator_t : S1TNLLoadIndicator { static constexpr const char* name() {return "s1TNLLoadIndicator_t";} using parent_t = S1TNLLoadIndicator; static constexpr bool optional = true; }; s1TNLLoadIndicator_t& set_s1TNLLoadIndicator() { s1TNLLoadIndicator.setpresent(true); return s1TNLLoadIndicator;} s1TNLLoadIndicator_t const* get_s1TNLLoadIndicator() const {return s1TNLLoadIndicator.is_valid() ? &s1TNLLoadIndicator : nullptr;} struct radioResourceStatus_t : RadioResourceStatus { static constexpr const char* name() {return "radioResourceStatus_t";} using parent_t = RadioResourceStatus; static constexpr bool optional = true; }; radioResourceStatus_t& set_radioResourceStatus() { radioResourceStatus.setpresent(true); return radioResourceStatus;} radioResourceStatus_t const* get_radioResourceStatus() const {return radioResourceStatus.is_valid() ? &radioResourceStatus : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(cell_ID); v(hWLoadIndicator); v(s1TNLLoadIndicator); v(radioResourceStatus); v(iE_Extensions); }; template void encode(V& v) const { v(cell_ID); v(hWLoadIndicator); v(s1TNLLoadIndicator); v(radioResourceStatus); v(iE_Extensions); }; void clear() { cell_ID.clear(); hWLoadIndicator.clear(); s1TNLLoadIndicator.clear(); radioResourceStatus.clear(); iE_Extensions.clear(); }; private: cell_ID_t cell_ID; hWLoadIndicator_t hWLoadIndicator; s1TNLLoadIndicator_t s1TNLLoadIndicator; radioResourceStatus_t radioResourceStatus; iE_Extensions_t iE_Extensions; }; /* CellMeasurementResult-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-CellMeasurementResult-Item CRITICALITY ignore TYPE CellMeasurementResult-Item PRESENCE mandatory} } */ struct CellMeasurementResult_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_CellMeasurementResult_Item() { set(id_CellMeasurementResult_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_CellMeasurementResult_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_CellMeasurementResult_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_CellMeasurementResult_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} CellMeasurementResult_Item& select_id_CellMeasurementResult_Item() { return set(1); } CellMeasurementResult_Item const* get_id_CellMeasurementResult_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_CellMeasurementResult_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CellMeasurementResult_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_CellMeasurementResult_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* CellMeasurementResult-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellMeasurementResult-ItemIEs} } */ struct CellMeasurementResult_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "CellMeasurementResult_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct CellMeasurementResult_List : asn::sequenceof { static constexpr const char* name() {return "CellMeasurementResult-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* CellToReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct CellToReport_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* CellToReport-Item ::= SEQUENCE { cell-ID ECGI, iE-Extensions ProtocolExtensionContainer { {CellToReport-Item-ExtIEs} } OPTIONAL, ... } */ struct CellToReport_Item : asn::sequence<2, 0, true, 1> { static constexpr const char* name() {return "CellToReport-Item";} using parent_t = asn::sequence<2, 0, true, 1>; struct cell_ID_t : ECGI { static constexpr const char* name() {return "cell_ID_t";} using parent_t = ECGI; }; cell_ID_t& ref_cell_ID() {return cell_ID;} cell_ID_t const& ref_cell_ID() const {return cell_ID;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(cell_ID); v(iE_Extensions); }; template void encode(V& v) const { v(cell_ID); v(iE_Extensions); }; void clear() { cell_ID.clear(); iE_Extensions.clear(); }; private: cell_ID_t cell_ID; iE_Extensions_t iE_Extensions; }; /* CellToReport-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-CellToReport-Item CRITICALITY ignore TYPE CellToReport-Item PRESENCE mandatory} } */ struct CellToReport_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_CellToReport_Item() { set(id_CellToReport_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_CellToReport_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_CellToReport_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_CellToReport_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} CellToReport_Item& select_id_CellToReport_Item() { return set(1); } CellToReport_Item const* get_id_CellToReport_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_CellToReport_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CellToReport_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_CellToReport_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* CellToReport-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CellToReport-ItemIEs} } */ struct CellToReport_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "CellToReport_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct CellToReport_List : asn::sequenceof { static constexpr const char* name() {return "CellToReport-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* MeasurementFailureCause-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct MeasurementFailureCause_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* MeasurementFailureCause-Item ::= SEQUENCE { measurementFailedReportCharacteristics ReportCharacteristics, cause Cause, iE-Extensions ProtocolExtensionContainer { {MeasurementFailureCause-Item-ExtIEs} } OPTIONAL, ... } */ struct MeasurementFailureCause_Item : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "MeasurementFailureCause-Item";} using parent_t = asn::sequence<3, 0, true, 1>; struct measurementFailedReportCharacteristics_t : ReportCharacteristics { static constexpr const char* name() {return "measurementFailedReportCharacteristics_t";} using parent_t = ReportCharacteristics; }; measurementFailedReportCharacteristics_t& ref_measurementFailedReportCharacteristics() {return measurementFailedReportCharacteristics;} measurementFailedReportCharacteristics_t const& ref_measurementFailedReportCharacteristics() const {return measurementFailedReportCharacteristics;} struct cause_t : Cause { static constexpr const char* name() {return "cause_t";} using parent_t = Cause; }; cause_t& ref_cause() {return cause;} cause_t const& ref_cause() const {return cause;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(measurementFailedReportCharacteristics); v(cause); v(iE_Extensions); }; template void encode(V& v) const { v(measurementFailedReportCharacteristics); v(cause); v(iE_Extensions); }; void clear() { measurementFailedReportCharacteristics.clear(); cause.clear(); iE_Extensions.clear(); }; private: measurementFailedReportCharacteristics_t measurementFailedReportCharacteristics; cause_t cause; iE_Extensions_t iE_Extensions; }; /* MeasurementFailureCause-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-MeasurementFailureCause-Item CRITICALITY ignore TYPE MeasurementFailureCause-Item PRESENCE mandatory} } */ struct MeasurementFailureCause_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_MeasurementFailureCause_Item() { set(id_MeasurementFailureCause_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeasurementFailureCause_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeasurementFailureCause_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_MeasurementFailureCause_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} MeasurementFailureCause_Item& select_id_MeasurementFailureCause_Item() { return set(1); } MeasurementFailureCause_Item const* get_id_MeasurementFailureCause_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeasurementFailureCause_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(MeasurementFailureCause_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_MeasurementFailureCause_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* MeasurementFailureCause-List ::= SEQUENCE (SIZE (1..maxFailedMeasObjects)) OF ProtocolIE-Single-Container { {MeasurementFailureCause-ItemIEs} } */ struct MeasurementFailureCause_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "MeasurementFailureCause_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct MeasurementFailureCause_List : asn::sequenceof { static constexpr const char* name() {return "MeasurementFailureCause-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* CompleteFailureCauseInformation-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct CompleteFailureCauseInformation_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* CompleteFailureCauseInformation-Item ::= SEQUENCE { cell-ID ECGI, measurementFailureCause-List MeasurementFailureCause-List, iE-Extensions ProtocolExtensionContainer { {CompleteFailureCauseInformation-Item-ExtIEs} } OPTIONAL, ... } */ struct CompleteFailureCauseInformation_Item : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "CompleteFailureCauseInformation-Item";} using parent_t = asn::sequence<3, 0, true, 1>; struct cell_ID_t : ECGI { static constexpr const char* name() {return "cell_ID_t";} using parent_t = ECGI; }; cell_ID_t& ref_cell_ID() {return cell_ID;} cell_ID_t const& ref_cell_ID() const {return cell_ID;} struct measurementFailureCause_List_t : MeasurementFailureCause_List { static constexpr const char* name() {return "measurementFailureCause_List_t";} using parent_t = MeasurementFailureCause_List; }; measurementFailureCause_List_t& ref_measurementFailureCause_List() {return measurementFailureCause_List;} measurementFailureCause_List_t const& ref_measurementFailureCause_List() const {return measurementFailureCause_List;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(cell_ID); v(measurementFailureCause_List); v(iE_Extensions); }; template void encode(V& v) const { v(cell_ID); v(measurementFailureCause_List); v(iE_Extensions); }; void clear() { cell_ID.clear(); measurementFailureCause_List.clear(); iE_Extensions.clear(); }; private: cell_ID_t cell_ID; measurementFailureCause_List_t measurementFailureCause_List; iE_Extensions_t iE_Extensions; }; /* CompleteFailureCauseInformation-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-CompleteFailureCauseInformation-Item CRITICALITY ignore TYPE CompleteFailureCauseInformation-Item PRESENCE mandatory} } */ struct CompleteFailureCauseInformation_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_CompleteFailureCauseInformation_Item() { set(id_CompleteFailureCauseInformation_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_CompleteFailureCauseInformation_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_CompleteFailureCauseInformation_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_CompleteFailureCauseInformation_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} CompleteFailureCauseInformation_Item& select_id_CompleteFailureCauseInformation_Item() { return set(1); } CompleteFailureCauseInformation_Item const* get_id_CompleteFailureCauseInformation_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_CompleteFailureCauseInformation_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CompleteFailureCauseInformation_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_CompleteFailureCauseInformation_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* CompleteFailureCauseInformation-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {CompleteFailureCauseInformation-ItemIEs} } */ struct CompleteFailureCauseInformation_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "CompleteFailureCauseInformation_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct CompleteFailureCauseInformation_List : asn::sequenceof { static constexpr const char* name() {return "CompleteFailureCauseInformation-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-DataForwardingAddress-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_DataForwardingAddress_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-DataForwardingAddress-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, dl-GTPtunnelEndpoint GTPtunnelEndpoint, iE-Extensions ProtocolExtensionContainer { {E-RABs-DataForwardingAddress-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_DataForwardingAddress_Item : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "E-RABs-DataForwardingAddress-Item";} using parent_t = asn::sequence<3, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct dl_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dl_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; dl_GTPtunnelEndpoint_t& ref_dl_GTPtunnelEndpoint() {return dl_GTPtunnelEndpoint;} dl_GTPtunnelEndpoint_t const& ref_dl_GTPtunnelEndpoint() const {return dl_GTPtunnelEndpoint;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(dl_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(dl_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); dl_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; dl_GTPtunnelEndpoint_t dl_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-DataForwardingAddress-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-DataForwardingAddress-Item CRITICALITY ignore TYPE E-RABs-DataForwardingAddress-Item PRESENCE mandatory}, ... } */ struct E_RABs_DataForwardingAddress_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_DataForwardingAddress_Item() { set(id_E_RABs_DataForwardingAddress_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_DataForwardingAddress_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_DataForwardingAddress_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_DataForwardingAddress_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_DataForwardingAddress_Item& select_id_E_RABs_DataForwardingAddress_Item() { return set(1); } E_RABs_DataForwardingAddress_Item const* get_id_E_RABs_DataForwardingAddress_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_DataForwardingAddress_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_DataForwardingAddress_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_DataForwardingAddress_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-DataForwardingAddress-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-DataForwardingAddress-ItemIEs} } */ struct E_RABs_DataForwardingAddress_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_DataForwardingAddress_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_DataForwardingAddress_List : asn::sequenceof { static constexpr const char* name() {return "E-RABs-DataForwardingAddress-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* DataForwardingAddressIndication-IEs X2AP-PROTOCOL-IES ::= { { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional }| { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional }| { ID id-E-RABs-DataForwardingAddress-List CRITICALITY ignore TYPE E-RABs-DataForwardingAddress-List PRESENCE mandatory}, ... } */ struct DataForwardingAddressIndication_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=1;} void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=2;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=3;} void select_id_E_RABs_DataForwardingAddress_List() { set(id_E_RABs_DataForwardingAddress_List); type=4;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 1; return true; } else if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 3; return true; } else if(equal(id_E_RABs_DataForwardingAddress_List)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_DataForwardingAddress_List);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=1;} void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=3;} void select_id_E_RABs_DataForwardingAddress_List() { set(ignore); type=4;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(1); } UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(1); } UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(2); } UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(3); } UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(3); } E_RABs_DataForwardingAddress_List& select_id_E_RABs_DataForwardingAddress_List() { return set(4); } E_RABs_DataForwardingAddress_List const* get_id_E_RABs_DataForwardingAddress_List() const { return get(4); } bool is_unknown() const { return type == 5; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; case 2: v(select_id_Old_eNB_UE_X2AP_ID()); return true; case 3: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; case 4: v(select_id_E_RABs_DataForwardingAddress_List()); return true; case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_DataForwardingAddress_List)]; char dummy2[sizeof(UE_X2AP_ID)]; char dummy3[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=1;} void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=3;} void select_id_E_RABs_DataForwardingAddress_List() { set(mandatory); type=4;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(mandatory)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* DataForwardingAddressIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container {{DataForwardingAddressIndication-IEs}}, ... } */ struct DataForwardingAddressIndication : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "DataForwardingAddressIndication";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* E-RABs-Admitted-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, uL-GTP-TunnelEndpoint GTPtunnelEndpoint OPTIONAL, dL-GTP-TunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-Item-ExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_Item : asn::sequence<4, 0, true, 3> { static constexpr const char* name() {return "E-RABs-Admitted-Item";} using parent_t = asn::sequence<4, 0, true, 3>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct uL_GTP_TunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_GTP_TunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; uL_GTP_TunnelEndpoint_t& set_uL_GTP_TunnelEndpoint() { uL_GTP_TunnelEndpoint.setpresent(true); return uL_GTP_TunnelEndpoint;} uL_GTP_TunnelEndpoint_t const* get_uL_GTP_TunnelEndpoint() const {return uL_GTP_TunnelEndpoint.is_valid() ? &uL_GTP_TunnelEndpoint : nullptr;} struct dL_GTP_TunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_GTP_TunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_GTP_TunnelEndpoint_t& set_dL_GTP_TunnelEndpoint() { dL_GTP_TunnelEndpoint.setpresent(true); return dL_GTP_TunnelEndpoint;} dL_GTP_TunnelEndpoint_t const* get_dL_GTP_TunnelEndpoint() const {return dL_GTP_TunnelEndpoint.is_valid() ? &dL_GTP_TunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(uL_GTP_TunnelEndpoint); v(dL_GTP_TunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(uL_GTP_TunnelEndpoint); v(dL_GTP_TunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); uL_GTP_TunnelEndpoint.clear(); dL_GTP_TunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; uL_GTP_TunnelEndpoint_t uL_GTP_TunnelEndpoint; dL_GTP_TunnelEndpoint_t dL_GTP_TunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-Admitted-Item CRITICALITY ignore TYPE E-RABs-Admitted-Item PRESENCE mandatory } } */ struct E_RABs_Admitted_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_Item() { set(id_E_RABs_Admitted_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_Admitted_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_Admitted_Item& select_id_E_RABs_Admitted_Item() { return set(1); } E_RABs_Admitted_Item const* get_id_E_RABs_Admitted_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_Admitted_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_Admitted_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ItemIEs} } */ struct E_RABs_Admitted_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_Admitted_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_Admitted_List : asn::sequenceof { static constexpr const char* name() {return "E-RABs-Admitted-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_ToBeAdded_Item_SCG_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-Item-SCG-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer : asn::sequence<5, 0, true, 3> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer";} using parent_t = asn::sequence<5, 0, true, 3>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(s1_DL_GTPtunnelEndpoint); v(dL_Forwarding_GTPtunnelEndpoint); v(uL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(s1_DL_GTPtunnelEndpoint); v(dL_Forwarding_GTPtunnelEndpoint); v(uL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); s1_DL_GTPtunnelEndpoint.clear(); dL_Forwarding_GTPtunnelEndpoint.clear(); uL_Forwarding_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_ToBeAdded_Item_Split_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-Item-Split-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, seNB-GTPtunnelEndpoint GTPtunnelEndpoint, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-Item-Split-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeAdded_Item_Split_Bearer : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item-Split-Bearer";} using parent_t = asn::sequence<3, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; seNB_GTPtunnelEndpoint_t& ref_seNB_GTPtunnelEndpoint() {return seNB_GTPtunnelEndpoint;} seNB_GTPtunnelEndpoint_t const& ref_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(seNB_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(seNB_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); seNB_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeAdded-Item ::= CHOICE { sCG-Bearer E-RABs-Admitted-ToBeAdded-Item-SCG-Bearer, split-Bearer E-RABs-Admitted-ToBeAdded-Item-Split-Bearer, ... } */ struct E_RABs_Admitted_ToBeAdded_Item : asn::choice<2, 0, true> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-Item";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~E_RABs_Admitted_ToBeAdded_Item() {clear();} struct sCG_Bearer_t : E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer { static constexpr const char* name() {return "sCG_Bearer_t";} using parent_t = E_RABs_Admitted_ToBeAdded_Item_SCG_Bearer; }; struct split_Bearer_t : E_RABs_Admitted_ToBeAdded_Item_Split_Bearer { static constexpr const char* name() {return "split_Bearer_t";} using parent_t = E_RABs_Admitted_ToBeAdded_Item_Split_Bearer; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sCG_Bearer_t)]; char dummy2[sizeof(split_Bearer_t)]; }; asn::variant var; index_type index {0}; }; /* E-RABs-Admitted-ToBeAdded-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-Admitted-ToBeAdded-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-Item PRESENCE mandatory} } */ struct E_RABs_Admitted_ToBeAdded_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(id_E_RABs_Admitted_ToBeAdded_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_Admitted_ToBeAdded_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_Admitted_ToBeAdded_Item& select_id_E_RABs_Admitted_ToBeAdded_Item() { return set(1); } E_RABs_Admitted_ToBeAdded_Item const* get_id_E_RABs_Admitted_ToBeAdded_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_Admitted_ToBeAdded_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeAdded_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-ItemIEs} } */ struct E_RABs_Admitted_ToBeAdded_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_Admitted_ToBeAdded_List : asn::sequenceof { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer : asn::sequence<5, 0, true, 3> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer";} using parent_t = asn::sequence<5, 0, true, 3>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(s1_DL_GTPtunnelEndpoint); v(dL_Forwarding_GTPtunnelEndpoint); v(uL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(s1_DL_GTPtunnelEndpoint); v(dL_Forwarding_GTPtunnelEndpoint); v(uL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); s1_DL_GTPtunnelEndpoint.clear(); dL_Forwarding_GTPtunnelEndpoint.clear(); uL_Forwarding_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, seNB-GTPtunnelEndpoint GTPtunnelEndpoint, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-ModAckItem-Split-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer";} using parent_t = asn::sequence<3, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; seNB_GTPtunnelEndpoint_t& ref_seNB_GTPtunnelEndpoint() {return seNB_GTPtunnelEndpoint;} seNB_GTPtunnelEndpoint_t const& ref_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(seNB_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(seNB_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); seNB_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeAdded-ModAckItem ::= CHOICE { sCG-Bearer E-RABs-Admitted-ToBeAdded-ModAckItem-SCG-Bearer, split-Bearer E-RABs-Admitted-ToBeAdded-ModAckItem-Split-Bearer, ... } */ struct E_RABs_Admitted_ToBeAdded_ModAckItem : asn::choice<2, 0, true> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckItem";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~E_RABs_Admitted_ToBeAdded_ModAckItem() {clear();} struct sCG_Bearer_t : E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer { static constexpr const char* name() {return "sCG_Bearer_t";} using parent_t = E_RABs_Admitted_ToBeAdded_ModAckItem_SCG_Bearer; }; struct split_Bearer_t : E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer { static constexpr const char* name() {return "split_Bearer_t";} using parent_t = E_RABs_Admitted_ToBeAdded_ModAckItem_Split_Bearer; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sCG_Bearer_t)]; char dummy2[sizeof(split_Bearer_t)]; }; asn::variant var; index_type index {0}; }; /* E-RABs-Admitted-ToBeAdded-ModAckItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-Admitted-ToBeAdded-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-ModAckItem PRESENCE mandatory} } */ struct E_RABs_Admitted_ToBeAdded_ModAckItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(id_E_RABs_Admitted_ToBeAdded_ModAckItem); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_Admitted_ToBeAdded_ModAckItem)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_ModAckItem);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_Admitted_ToBeAdded_ModAckItem& select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { return set(1); } E_RABs_Admitted_ToBeAdded_ModAckItem const* get_id_E_RABs_Admitted_ToBeAdded_ModAckItem() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_Admitted_ToBeAdded_ModAckItem()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_ModAckItem)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeAdded_ModAckItem() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-ModAckItemIEs} } */ struct E_RABs_Admitted_ToBeAdded_ModAckList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_ModAckList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_Admitted_ToBeAdded_ModAckList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-ModAckList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, ... } */ struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_uLpDCPSnLength)) { type = 1; return true; } else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(ignore); type=1;} void select_id_dLPDCPSnLength() { set(ignore); type=2;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_uLpDCPSnLength()); return true; case 2: v(select_id_dLPDCPSnLength()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(PDCPSnLength)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(optional); type=1;} void select_id_dLPDCPSnLength() { set(optional); type=2;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent ::= SEQUENCE { s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, -- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- rlc-Mode RLCMode OPTIONAL, -- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, -- This IE shall be present if MCG resource and SCG resource IEs in the the EN-DC Resource Configuration IE are set to “present” and the GBR QoS Information IE is present in the Requested MCG E-RAB Level QoS Parameters IE -- uL-Configuration ULConfiguration OPTIONAL, -- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent : asn::sequence<8, 0, true, 7> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<8, 0, true, 7>; struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint { static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} struct rlc_Mode_t : RLCMode { static constexpr const char* name() {return "rlc_Mode_t";} using parent_t = RLCMode; static constexpr bool optional = true; }; rlc_Mode_t& set_rlc_Mode() { rlc_Mode.setpresent(true); return rlc_Mode;} rlc_Mode_t const* get_rlc_Mode() const {return rlc_Mode.is_valid() ? &rlc_Mode : nullptr;} struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; static constexpr bool optional = true; }; mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} struct uL_Configuration_t : ULConfiguration { static constexpr const char* name() {return "uL_Configuration_t";} using parent_t = ULConfiguration; static constexpr bool optional = true; }; uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(s1_DL_GTPtunnelEndpoint); v(sgNB_UL_GTP_TEIDatPDCP); v(rlc_Mode); v(dL_Forwarding_GTPtunnelEndpoint); v(uL_Forwarding_GTPtunnelEndpoint); v(mCG_E_RAB_Level_QoS_Parameters); v(uL_Configuration); v(iE_Extensions); }; template void encode(V& v) const { v(s1_DL_GTPtunnelEndpoint); v(sgNB_UL_GTP_TEIDatPDCP); v(rlc_Mode); v(dL_Forwarding_GTPtunnelEndpoint); v(uL_Forwarding_GTPtunnelEndpoint); v(mCG_E_RAB_Level_QoS_Parameters); v(uL_Configuration); v(iE_Extensions); }; void clear() { s1_DL_GTPtunnelEndpoint.clear(); sgNB_UL_GTP_TEIDatPDCP.clear(); rlc_Mode.clear(); dL_Forwarding_GTPtunnelEndpoint.clear(); uL_Forwarding_GTPtunnelEndpoint.clear(); mCG_E_RAB_Level_QoS_Parameters.clear(); uL_Configuration.clear(); iE_Extensions.clear(); }; private: s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; rlc_Mode_t rlc_Mode; dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; uL_Configuration_t uL_Configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, ... } */ struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_lCID() { set(id_lCID); type=1;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_lCID)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_lCID);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_lCID() { set(ignore); type=1;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} LCID& select_id_lCID() { return set(1); } LCID const* get_id_lCID() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_lCID()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(LCID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_lCID() { set(optional); type=1;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint, secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 2> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<3, 0, true, 2>; struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint { static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} using parent_t = GTPtunnelEndpoint; }; sgNB_DL_GTP_TEIDatSCG_t& ref_sgNB_DL_GTP_TEIDatSCG() {return sgNB_DL_GTP_TEIDatSCG;} sgNB_DL_GTP_TEIDatSCG_t const& ref_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG;} struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint { static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(sgNB_DL_GTP_TEIDatSCG); v(secondary_sgNB_DL_GTP_TEIDatSCG); v(iE_Extensions); }; template void encode(V& v) const { v(sgNB_DL_GTP_TEIDatSCG); v(secondary_sgNB_DL_GTP_TEIDatSCG); v(iE_Extensions); }; void clear() { sgNB_DL_GTP_TEIDatSCG.clear(); secondary_sgNB_DL_GTP_TEIDatSCG.clear(); iE_Extensions.clear(); }; private: sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeAdded_SgNBAddReqAck_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReqAck-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-Item PRESENCE mandatory} } */ struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item& select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { return set(1); } E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item const* get_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-SgNBAddReqAck-ItemIEs} } */ struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, ... } */ struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_uLpDCPSnLength)) { type = 1; return true; } else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(ignore); type=1;} void select_id_dLPDCPSnLength() { set(ignore); type=2;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_uLpDCPSnLength()); return true; case 2: v(select_id_dLPDCPSnLength()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(PDCPSnLength)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(optional); type=1;} void select_id_dLPDCPSnLength() { set(optional); type=2;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint, sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, -- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE are set to “present” -- rlc-Mode RLCMode OPTIONAL, -- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE are set to “present” -- dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, -- This IE shall be present if MCG resource and SCG resource IEs in the the EN-DC Resource Configuration IE are set to “present” and the GBR QoS Information IE is present in the Requested MCG E-RAB Level QoS Parameters IE -- uL-Configuration ULConfiguration OPTIONAL, -- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<8, 0, true, 7> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<8, 0, true, 7>; struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; s1_DL_GTPtunnelEndpoint_t& ref_s1_DL_GTPtunnelEndpoint() {return s1_DL_GTPtunnelEndpoint;} s1_DL_GTPtunnelEndpoint_t const& ref_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint;} struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint { static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} struct rlc_Mode_t : RLCMode { static constexpr const char* name() {return "rlc_Mode_t";} using parent_t = RLCMode; static constexpr bool optional = true; }; rlc_Mode_t& set_rlc_Mode() { rlc_Mode.setpresent(true); return rlc_Mode;} rlc_Mode_t const* get_rlc_Mode() const {return rlc_Mode.is_valid() ? &rlc_Mode : nullptr;} struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; static constexpr bool optional = true; }; mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} struct uL_Configuration_t : ULConfiguration { static constexpr const char* name() {return "uL_Configuration_t";} using parent_t = ULConfiguration; static constexpr bool optional = true; }; uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(s1_DL_GTPtunnelEndpoint); v(sgNB_UL_GTP_TEIDatPDCP); v(rlc_Mode); v(dL_Forwarding_GTPtunnelEndpoint); v(uL_Forwarding_GTPtunnelEndpoint); v(mCG_E_RAB_Level_QoS_Parameters); v(uL_Configuration); v(iE_Extensions); }; template void encode(V& v) const { v(s1_DL_GTPtunnelEndpoint); v(sgNB_UL_GTP_TEIDatPDCP); v(rlc_Mode); v(dL_Forwarding_GTPtunnelEndpoint); v(uL_Forwarding_GTPtunnelEndpoint); v(mCG_E_RAB_Level_QoS_Parameters); v(uL_Configuration); v(iE_Extensions); }; void clear() { s1_DL_GTPtunnelEndpoint.clear(); sgNB_UL_GTP_TEIDatPDCP.clear(); rlc_Mode.clear(); dL_Forwarding_GTPtunnelEndpoint.clear(); uL_Forwarding_GTPtunnelEndpoint.clear(); mCG_E_RAB_Level_QoS_Parameters.clear(); uL_Configuration.clear(); iE_Extensions.clear(); }; private: s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; rlc_Mode_t rlc_Mode; dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; uL_Configuration_t uL_Configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { {ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, ... } */ struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_lCID() { set(id_lCID); type=1;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_lCID)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_lCID);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_lCID() { set(ignore); type=1;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} LCID& select_id_lCID() { return set(1); } LCID const* get_id_lCID() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_lCID()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(LCID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_lCID() { set(optional); type=1;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint, secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 2> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<3, 0, true, 2>; struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint { static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} using parent_t = GTPtunnelEndpoint; }; sgNB_DL_GTP_TEIDatSCG_t& ref_sgNB_DL_GTP_TEIDatSCG() {return sgNB_DL_GTP_TEIDatSCG;} sgNB_DL_GTP_TEIDatSCG_t const& ref_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG;} struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint { static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(sgNB_DL_GTP_TEIDatSCG); v(secondary_sgNB_DL_GTP_TEIDatSCG); v(iE_Extensions); }; template void encode(V& v) const { v(sgNB_DL_GTP_TEIDatSCG); v(secondary_sgNB_DL_GTP_TEIDatSCG); v(iE_Extensions); }; void clear() { sgNB_DL_GTP_TEIDatSCG.clear(); secondary_sgNB_DL_GTP_TEIDatSCG.clear(); iE_Extensions.clear(); }; private: sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-SgNBModAck-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-Admitted-ToBeAdded-SgNBModAck-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeAdded_SgNBModAck_Item : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAck-Item";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_Admitted_ToBeAdded_SgNBModAck_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-Admitted-ToBeAdded-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBModAck-Item PRESENCE mandatory} } */ struct E_RABs_Admitted_ToBeAdded_SgNBModAck_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_Admitted_ToBeAdded_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { return set(1); } E_RABs_Admitted_ToBeAdded_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_Admitted_ToBeAdded_SgNBModAck_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAck_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeAdded-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeAdded-SgNBModAck-ItemIEs} } */ struct E_RABs_Admitted_ToBeAdded_SgNBModAckList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_Admitted_ToBeAdded_SgNBModAckList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_Admitted_ToBeAdded_SgNBModAckList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-Admitted-ToBeAdded-SgNBModAckList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer : asn::sequence<3, 0, true, 2> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer";} using parent_t = asn::sequence<3, 0, true, 2>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; s1_DL_GTPtunnelEndpoint_t& set_s1_DL_GTPtunnelEndpoint() { s1_DL_GTPtunnelEndpoint.setpresent(true); return s1_DL_GTPtunnelEndpoint;} s1_DL_GTPtunnelEndpoint_t const* get_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint.is_valid() ? &s1_DL_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(s1_DL_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(s1_DL_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); s1_DL_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, seNB-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-ModAckItem-Split-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer : asn::sequence<3, 0, true, 2> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer";} using parent_t = asn::sequence<3, 0, true, 2>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct seNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "seNB_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; seNB_GTPtunnelEndpoint_t& set_seNB_GTPtunnelEndpoint() { seNB_GTPtunnelEndpoint.setpresent(true); return seNB_GTPtunnelEndpoint;} seNB_GTPtunnelEndpoint_t const* get_seNB_GTPtunnelEndpoint() const {return seNB_GTPtunnelEndpoint.is_valid() ? &seNB_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(seNB_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(seNB_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); seNB_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; seNB_GTPtunnelEndpoint_t seNB_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeModified-ModAckItem ::= CHOICE { sCG-Bearer E-RABs-Admitted-ToBeModified-ModAckItem-SCG-Bearer, split-Bearer E-RABs-Admitted-ToBeModified-ModAckItem-Split-Bearer, ... } */ struct E_RABs_Admitted_ToBeModified_ModAckItem : asn::choice<2, 0, true> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckItem";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~E_RABs_Admitted_ToBeModified_ModAckItem() {clear();} struct sCG_Bearer_t : E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer { static constexpr const char* name() {return "sCG_Bearer_t";} using parent_t = E_RABs_Admitted_ToBeModified_ModAckItem_SCG_Bearer; }; struct split_Bearer_t : E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer { static constexpr const char* name() {return "split_Bearer_t";} using parent_t = E_RABs_Admitted_ToBeModified_ModAckItem_Split_Bearer; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sCG_Bearer_t)]; char dummy2[sizeof(split_Bearer_t)]; }; asn::variant var; index_type index {0}; }; /* E-RABs-Admitted-ToBeModified-ModAckItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-Admitted-ToBeModified-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-ModAckItem PRESENCE mandatory} } */ struct E_RABs_Admitted_ToBeModified_ModAckItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(id_E_RABs_Admitted_ToBeModified_ModAckItem); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_Admitted_ToBeModified_ModAckItem)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_ModAckItem);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_Admitted_ToBeModified_ModAckItem& select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { return set(1); } E_RABs_Admitted_ToBeModified_ModAckItem const* get_id_E_RABs_Admitted_ToBeModified_ModAckItem() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_Admitted_ToBeModified_ModAckItem()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_Admitted_ToBeModified_ModAckItem)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeModified_ModAckItem() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeModified-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeModified-ModAckItemIEs} } */ struct E_RABs_Admitted_ToBeModified_ModAckList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_Admitted_ToBeModified_ModAckList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_Admitted_ToBeModified_ModAckList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-ModAckList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, ... } */ struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_uLpDCPSnLength)) { type = 1; return true; } else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(ignore); type=1;} void select_id_dLPDCPSnLength() { set(ignore); type=2;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_uLpDCPSnLength()); return true; case 2: v(select_id_dLPDCPSnLength()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(PDCPSnLength)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(optional); type=1;} void select_id_dLPDCPSnLength() { set(optional); type=2;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { s1-DL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, mCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, uL-Configuration ULConfiguration OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<5, 0, true, 5>; struct s1_DL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_DL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; s1_DL_GTPtunnelEndpoint_t& set_s1_DL_GTPtunnelEndpoint() { s1_DL_GTPtunnelEndpoint.setpresent(true); return s1_DL_GTPtunnelEndpoint;} s1_DL_GTPtunnelEndpoint_t const* get_s1_DL_GTPtunnelEndpoint() const {return s1_DL_GTPtunnelEndpoint.is_valid() ? &s1_DL_GTPtunnelEndpoint : nullptr;} struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint { static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} struct mCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "mCG_E_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; static constexpr bool optional = true; }; mCG_E_RAB_Level_QoS_Parameters_t& set_mCG_E_RAB_Level_QoS_Parameters() { mCG_E_RAB_Level_QoS_Parameters.setpresent(true); return mCG_E_RAB_Level_QoS_Parameters;} mCG_E_RAB_Level_QoS_Parameters_t const* get_mCG_E_RAB_Level_QoS_Parameters() const {return mCG_E_RAB_Level_QoS_Parameters.is_valid() ? &mCG_E_RAB_Level_QoS_Parameters : nullptr;} struct uL_Configuration_t : ULConfiguration { static constexpr const char* name() {return "uL_Configuration_t";} using parent_t = ULConfiguration; static constexpr bool optional = true; }; uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(s1_DL_GTPtunnelEndpoint); v(sgNB_UL_GTP_TEIDatPDCP); v(mCG_E_RAB_Level_QoS_Parameters); v(uL_Configuration); v(iE_Extensions); }; template void encode(V& v) const { v(s1_DL_GTPtunnelEndpoint); v(sgNB_UL_GTP_TEIDatPDCP); v(mCG_E_RAB_Level_QoS_Parameters); v(uL_Configuration); v(iE_Extensions); }; void clear() { s1_DL_GTPtunnelEndpoint.clear(); sgNB_UL_GTP_TEIDatPDCP.clear(); mCG_E_RAB_Level_QoS_Parameters.clear(); uL_Configuration.clear(); iE_Extensions.clear(); }; private: s1_DL_GTPtunnelEndpoint_t s1_DL_GTPtunnelEndpoint; sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; mCG_E_RAB_Level_QoS_Parameters_t mCG_E_RAB_Level_QoS_Parameters; uL_Configuration_t uL_Configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-secondarysgNBDLGTPTEIDatPDCP CRITICALITY ignore EXTENSION GTPtunnelEndpoint PRESENCE optional}| { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional }, ... } */ struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(id_secondarysgNBDLGTPTEIDatPDCP); type=1;} void select_id_RLC_Status() { set(id_RLC_Status); type=2;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_secondarysgNBDLGTPTEIDatPDCP)) { type = 1; return true; } else if(equal(id_RLC_Status)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_secondarysgNBDLGTPTEIDatPDCP);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(ignore); type=1;} void select_id_RLC_Status() { set(ignore); type=2;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} GTPtunnelEndpoint& select_id_secondarysgNBDLGTPTEIDatPDCP() { return set(1); } GTPtunnelEndpoint const* get_id_secondarysgNBDLGTPTEIDatPDCP() const { return get(1); } RLC_Status& select_id_RLC_Status() { return set(2); } RLC_Status const* get_id_RLC_Status() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_secondarysgNBDLGTPTEIDatPDCP()); return true; case 2: v(select_id_RLC_Status()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GTPtunnelEndpoint)]; char dummy2[sizeof(RLC_Status)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_secondarysgNBDLGTPTEIDatPDCP() { set(optional); type=1;} void select_id_RLC_Status() { set(optional); type=2;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<2, 0, true, 2> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<2, 0, true, 2>; struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint { static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; sgNB_DL_GTP_TEIDatSCG_t& set_sgNB_DL_GTP_TEIDatSCG() { sgNB_DL_GTP_TEIDatSCG.setpresent(true); return sgNB_DL_GTP_TEIDatSCG;} sgNB_DL_GTP_TEIDatSCG_t const* get_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG.is_valid() ? &sgNB_DL_GTP_TEIDatSCG : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(sgNB_DL_GTP_TEIDatSCG); v(iE_Extensions); }; template void encode(V& v) const { v(sgNB_DL_GTP_TEIDatSCG); v(iE_Extensions); }; void clear() { sgNB_DL_GTP_TEIDatSCG.clear(); iE_Extensions.clear(); }; private: sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeAdded_SgNBModAck_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeModified-SgNBModAck-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-Admitted-ToBeModified-SgNBModAck-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModAck-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeModified_SgNBModAck_Item : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAck-Item";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_Admitted_ToBeModified_SgNBModAck_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-Admitted-ToBeModified-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-SgNBModAck-Item PRESENCE mandatory} } */ struct E_RABs_Admitted_ToBeModified_SgNBModAck_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_Admitted_ToBeModified_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { return set(1); } E_RABs_Admitted_ToBeModified_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_Admitted_ToBeModified_SgNBModAck_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeModified_SgNBModAck_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeModified-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeModified-SgNBModAck-ItemIEs} } */ struct E_RABs_Admitted_ToBeModified_SgNBModAckList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_Admitted_ToBeModified_SgNBModAckList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_Admitted_ToBeModified_SgNBModAckList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-Admitted-ToBeModified-SgNBModAckList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer : asn::sequence<2, 0, true, 1> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer";} using parent_t = asn::sequence<2, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-ModAckItem-Split-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer : asn::sequence<2, 0, true, 1> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer";} using parent_t = asn::sequence<2, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToReleased-ModAckItem ::= CHOICE { sCG-Bearer E-RABs-Admitted-ToBeReleased-ModAckItem-SCG-Bearer, split-Bearer E-RABs-Admitted-ToBeReleased-ModAckItem-Split-Bearer, ... } */ struct E_RABs_Admitted_ToReleased_ModAckItem : asn::choice<2, 0, true> { static constexpr const char* name() {return "E-RABs-Admitted-ToReleased-ModAckItem";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~E_RABs_Admitted_ToReleased_ModAckItem() {clear();} struct sCG_Bearer_t : E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer { static constexpr const char* name() {return "sCG_Bearer_t";} using parent_t = E_RABs_Admitted_ToBeReleased_ModAckItem_SCG_Bearer; }; struct split_Bearer_t : E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer { static constexpr const char* name() {return "split_Bearer_t";} using parent_t = E_RABs_Admitted_ToBeReleased_ModAckItem_Split_Bearer; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sCG_Bearer_t)]; char dummy2[sizeof(split_Bearer_t)]; }; asn::variant var; index_type index {0}; }; /* E-RABs-Admitted-ToBeReleased-ModAckItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-Admitted-ToBeReleased-ModAckItem CRITICALITY ignore TYPE E-RABs-Admitted-ToReleased-ModAckItem PRESENCE mandatory} } */ struct E_RABs_Admitted_ToBeReleased_ModAckItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(id_E_RABs_Admitted_ToBeReleased_ModAckItem); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_Admitted_ToBeReleased_ModAckItem)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_ModAckItem);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_Admitted_ToReleased_ModAckItem& select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { return set(1); } E_RABs_Admitted_ToReleased_ModAckItem const* get_id_E_RABs_Admitted_ToBeReleased_ModAckItem() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_Admitted_ToBeReleased_ModAckItem()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_Admitted_ToReleased_ModAckItem)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeReleased_ModAckItem() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeReleased-ModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-ModAckItemIEs} } */ struct E_RABs_Admitted_ToBeReleased_ModAckList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_ModAckList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_Admitted_ToBeReleased_ModAckList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-ModAckList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent ::= SEQUENCE { iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<1, 0, true, 1>; struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(iE_Extensions); }; template void encode(V& v) const { v(iE_Extensions); }; void clear() { iE_Extensions.clear(); }; private: iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent ::= SEQUENCE { iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent : asn::sequence<1, 0, true, 1> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<1, 0, true, 1>; struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(iE_Extensions); }; template void encode(V& v) const { v(iE_Extensions); }; void clear() { iE_Extensions.clear(); }; private: iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBModAck_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToReleased-SgNBModAck-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-Admitted-ToBeReleased-SgNBModAck-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModAck-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToReleased_SgNBModAck_Item : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-Admitted-ToReleased-SgNBModAck-Item";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_Admitted_ToBeReleased_SgNBModAck_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-Admitted-ToBeReleased-SgNBModAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToReleased-SgNBModAck-Item PRESENCE mandatory} } */ struct E_RABs_Admitted_ToBeReleased_SgNBModAck_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_Admitted_ToReleased_SgNBModAck_Item& select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { return set(1); } E_RABs_Admitted_ToReleased_SgNBModAck_Item const* get_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_Admitted_ToReleased_SgNBModAck_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAck_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeReleased-SgNBModAckList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-SgNBModAck-ItemIEs} } */ struct E_RABs_Admitted_ToBeReleased_SgNBModAckList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_SgNBModAckList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_Admitted_ToBeReleased_SgNBModAckList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBModAckList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, rlc-Mode-transferred RLCMode, iE-Extensions ProtocolExtensionContainer { {E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item";} using parent_t = asn::sequence<3, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct rlc_Mode_transferred_t : RLCMode { static constexpr const char* name() {return "rlc_Mode_transferred_t";} using parent_t = RLCMode; }; rlc_Mode_transferred_t& ref_rlc_Mode_transferred() {return rlc_Mode_transferred;} rlc_Mode_transferred_t const& ref_rlc_Mode_transferred() const {return rlc_Mode_transferred;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(rlc_Mode_transferred); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(rlc_Mode_transferred); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); rlc_Mode_transferred.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; rlc_Mode_transferred_t rlc_Mode_transferred; iE_Extensions_t iE_Extensions; }; /* E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-Item PRESENCE mandatory}, ... } */ struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item& select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { return set(1); } E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item const* get_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAck_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-Admitted-ToBeReleased-SgNBRelReqAck-ItemIEs} } */ struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent ::= SEQUENCE { iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent : asn::sequence<1, 0, true, 1> { static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<1, 0, true, 1>; struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(iE_Extensions); }; template void encode(V& v) const { v(iE_Extensions); }; void clear() { iE_Extensions.clear(); }; private: iE_Extensions_t iE_Extensions; }; /* E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}, ... } */ struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_uLpDCPSnLength)) { type = 1; return true; } else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(ignore); type=1;} void select_id_dLPDCPSnLength() { set(ignore); type=2;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_uLpDCPSnLength()); return true; case 2: v(select_id_dLPDCPSnLength()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(PDCPSnLength)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(optional); type=1;} void select_id_dLPDCPSnLength() { set(optional); type=2;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent : asn::sequence<2, 0, true, 2> { static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<2, 0, true, 2>; struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint { static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(secondary_meNB_UL_GTP_TEIDatPDCP); v(iE_Extensions); }; template void encode(V& v) const { v(secondary_meNB_UL_GTP_TEIDatPDCP); v(iE_Extensions); }; void clear() { secondary_meNB_UL_GTP_TEIDatPDCP.clear(); iE_Extensions.clear(); }; private: secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; iE_Extensions_t iE_Extensions; }; /* E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-AdmittedToBeModified-SgNBModConf-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-AdmittedToBeModified-SgNBModConf-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-AdmittedToBeModified-SgNBModConf-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_AdmittedToBeModified_SgNBModConf_Item : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConf-Item";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_AdmittedToBeModified_SgNBModConf_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-AdmittedToBeModified-SgNBModConf-Item CRITICALITY ignore TYPE E-RABs-AdmittedToBeModified-SgNBModConf-Item PRESENCE mandatory }, ... } */ struct E_RABs_AdmittedToBeModified_SgNBModConf_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_AdmittedToBeModified_SgNBModConf_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_AdmittedToBeModified_SgNBModConf_Item& select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { return set(1); } E_RABs_AdmittedToBeModified_SgNBModConf_Item const* get_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_AdmittedToBeModified_SgNBModConf_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_AdmittedToBeModified_SgNBModConf_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-AdmittedToBeModified-SgNBModConfList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-AdmittedToBeModified-SgNBModConf-ItemIEs} } */ struct E_RABs_AdmittedToBeModified_SgNBModConfList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_AdmittedToBeModified_SgNBModConfList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_AdmittedToBeModified_SgNBModConfList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-AdmittedToBeModified-SgNBModConfList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-SubjectToCounterCheckItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_SubjectToCounterCheckItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-SubjectToCounterCheckItem ::= SEQUENCE { e-RAB-ID E-RAB-ID, uL-Count INTEGER (0..4294967295), dL-Count INTEGER (0..4294967295), iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToCounterCheckItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_SubjectToCounterCheckItem : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-SubjectToCounterCheckItem";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct uL_Count_t : asn::integer<> { using constraint_t = asn::constraints>; static constexpr const char* name() {return "uL_Count_t";} using parent_t = asn::integer<>; }; uL_Count_t& ref_uL_Count() {return uL_Count;} uL_Count_t const& ref_uL_Count() const {return uL_Count;} struct dL_Count_t : asn::integer<> { using constraint_t = asn::constraints>; static constexpr const char* name() {return "dL_Count_t";} using parent_t = asn::integer<>; }; dL_Count_t& ref_dL_Count() {return dL_Count;} dL_Count_t const& ref_dL_Count() const {return dL_Count;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(uL_Count); v(dL_Count); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(uL_Count); v(dL_Count); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); uL_Count.clear(); dL_Count.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; uL_Count_t uL_Count; dL_Count_t dL_Count; iE_Extensions_t iE_Extensions; }; /* E-RABs-SubjectToCounterCheckItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-SubjectToCounterCheckItem CRITICALITY ignore TYPE E-RABs-SubjectToCounterCheckItem PRESENCE mandatory}, ... } */ struct E_RABs_SubjectToCounterCheckItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_SubjectToCounterCheckItem() { set(id_E_RABs_SubjectToCounterCheckItem); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_SubjectToCounterCheckItem)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToCounterCheckItem);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_SubjectToCounterCheckItem() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_SubjectToCounterCheckItem& select_id_E_RABs_SubjectToCounterCheckItem() { return set(1); } E_RABs_SubjectToCounterCheckItem const* get_id_E_RABs_SubjectToCounterCheckItem() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_SubjectToCounterCheckItem()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_SubjectToCounterCheckItem)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_SubjectToCounterCheckItem() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-SubjectToCounterCheck-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToCounterCheckItemIEs} } */ struct E_RABs_SubjectToCounterCheck_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_SubjectToCounterCheck_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_SubjectToCounterCheck_List : asn::sequenceof { static constexpr const char* name() {return "E-RABs-SubjectToCounterCheck-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_SubjectToSgNBCounterCheck_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-SubjectToSgNBCounterCheck-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, uL-Count INTEGER (0..4294967295), dL-Count INTEGER (0..4294967295), iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToSgNBCounterCheck-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_SubjectToSgNBCounterCheck_Item : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-SubjectToSgNBCounterCheck-Item";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct uL_Count_t : asn::integer<> { using constraint_t = asn::constraints>; static constexpr const char* name() {return "uL_Count_t";} using parent_t = asn::integer<>; }; uL_Count_t& ref_uL_Count() {return uL_Count;} uL_Count_t const& ref_uL_Count() const {return uL_Count;} struct dL_Count_t : asn::integer<> { using constraint_t = asn::constraints>; static constexpr const char* name() {return "dL_Count_t";} using parent_t = asn::integer<>; }; dL_Count_t& ref_dL_Count() {return dL_Count;} dL_Count_t const& ref_dL_Count() const {return dL_Count;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(uL_Count); v(dL_Count); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(uL_Count); v(dL_Count); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); uL_Count.clear(); dL_Count.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; uL_Count_t uL_Count; dL_Count_t dL_Count; iE_Extensions_t iE_Extensions; }; /* E-RABs-SubjectToSgNBCounterCheck-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-SubjectToSgNBCounterCheck-Item CRITICALITY ignore TYPE E-RABs-SubjectToSgNBCounterCheck-Item PRESENCE mandatory}, ... } */ struct E_RABs_SubjectToSgNBCounterCheck_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(id_E_RABs_SubjectToSgNBCounterCheck_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_SubjectToSgNBCounterCheck_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToSgNBCounterCheck_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_SubjectToSgNBCounterCheck_Item& select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { return set(1); } E_RABs_SubjectToSgNBCounterCheck_Item const* get_id_E_RABs_SubjectToSgNBCounterCheck_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_SubjectToSgNBCounterCheck_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_SubjectToSgNBCounterCheck_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_SubjectToSgNBCounterCheck_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-SubjectToSgNBCounterCheck-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToSgNBCounterCheck-ItemIEs} } */ struct E_RABs_SubjectToSgNBCounterCheck_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_SubjectToSgNBCounterCheck_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_SubjectToSgNBCounterCheck_List : asn::sequenceof { static constexpr const char* name() {return "E-RABs-SubjectToSgNBCounterCheck-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-SubjectToStatusTransfer-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-ReceiveStatusOfULPDCPSDUsExtended CRITICALITY ignore EXTENSION ReceiveStatusOfULPDCPSDUsExtended PRESENCE optional}| { ID id-ULCOUNTValueExtended CRITICALITY ignore EXTENSION COUNTValueExtended PRESENCE optional}| { ID id-DLCOUNTValueExtended CRITICALITY ignore EXTENSION COUNTValueExtended PRESENCE optional}| { ID id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 CRITICALITY ignore EXTENSION ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 PRESENCE optional}| { ID id-ULCOUNTValuePDCP-SNlength18 CRITICALITY ignore EXTENSION COUNTvaluePDCP-SNlength18 PRESENCE optional}| { ID id-DLCOUNTValuePDCP-SNlength18 CRITICALITY ignore EXTENSION COUNTvaluePDCP-SNlength18 PRESENCE optional}, ... } */ struct E_RABs_SubjectToStatusTransfer_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(id_ReceiveStatusOfULPDCPSDUsExtended); type=1;} void select_id_ULCOUNTValueExtended() { set(id_ULCOUNTValueExtended); type=2;} void select_id_DLCOUNTValueExtended() { set(id_DLCOUNTValueExtended); type=3;} void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18); type=4;} void select_id_ULCOUNTValuePDCP_SNlength18() { set(id_ULCOUNTValuePDCP_SNlength18); type=5;} void select_id_DLCOUNTValuePDCP_SNlength18() { set(id_DLCOUNTValuePDCP_SNlength18); type=6;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ReceiveStatusOfULPDCPSDUsExtended)) { type = 1; return true; } else if(equal(id_ULCOUNTValueExtended)) { type = 2; return true; } else if(equal(id_DLCOUNTValueExtended)) { type = 3; return true; } else if(equal(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18)) { type = 4; return true; } else if(equal(id_ULCOUNTValuePDCP_SNlength18)) { type = 5; return true; } else if(equal(id_DLCOUNTValuePDCP_SNlength18)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ReceiveStatusOfULPDCPSDUsExtended);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ULCOUNTValueExtended);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_DLCOUNTValueExtended);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_ULCOUNTValuePDCP_SNlength18);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_DLCOUNTValuePDCP_SNlength18);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(ignore); type=1;} void select_id_ULCOUNTValueExtended() { set(ignore); type=2;} void select_id_DLCOUNTValueExtended() { set(ignore); type=3;} void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(ignore); type=4;} void select_id_ULCOUNTValuePDCP_SNlength18() { set(ignore); type=5;} void select_id_DLCOUNTValuePDCP_SNlength18() { set(ignore); type=6;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} ReceiveStatusOfULPDCPSDUsExtended& select_id_ReceiveStatusOfULPDCPSDUsExtended() { return set(1); } ReceiveStatusOfULPDCPSDUsExtended const* get_id_ReceiveStatusOfULPDCPSDUsExtended() const { return get(1); } COUNTValueExtended& select_id_ULCOUNTValueExtended() { return set(2); } COUNTValueExtended const* get_id_ULCOUNTValueExtended() const { return get(2); } COUNTValueExtended& select_id_DLCOUNTValueExtended() { return set(3); } COUNTValueExtended const* get_id_DLCOUNTValueExtended() const { return get(3); } ReceiveStatusOfULPDCPSDUsPDCP_SNlength18& select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { return set(4); } ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 const* get_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() const { return get(4); } COUNTvaluePDCP_SNlength18& select_id_ULCOUNTValuePDCP_SNlength18() { return set(5); } COUNTvaluePDCP_SNlength18 const* get_id_ULCOUNTValuePDCP_SNlength18() const { return get(5); } COUNTvaluePDCP_SNlength18& select_id_DLCOUNTValuePDCP_SNlength18() { return set(6); } COUNTvaluePDCP_SNlength18 const* get_id_DLCOUNTValuePDCP_SNlength18() const { return get(6); } bool is_unknown() const { return type == 7; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ReceiveStatusOfULPDCPSDUsExtended()); return true; case 2: v(select_id_ULCOUNTValueExtended()); return true; case 3: v(select_id_DLCOUNTValueExtended()); return true; case 4: v(select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18()); return true; case 5: v(select_id_ULCOUNTValuePDCP_SNlength18()); return true; case 6: v(select_id_DLCOUNTValuePDCP_SNlength18()); return true; case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(COUNTValueExtended)]; char dummy2[sizeof(COUNTvaluePDCP_SNlength18)]; char dummy3[sizeof(ReceiveStatusOfULPDCPSDUsExtended)]; char dummy4[sizeof(ReceiveStatusOfULPDCPSDUsPDCP_SNlength18)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_ReceiveStatusOfULPDCPSDUsExtended() { set(optional); type=1;} void select_id_ULCOUNTValueExtended() { set(optional); type=2;} void select_id_DLCOUNTValueExtended() { set(optional); type=3;} void select_id_ReceiveStatusOfULPDCPSDUsPDCP_SNlength18() { set(optional); type=4;} void select_id_ULCOUNTValuePDCP_SNlength18() { set(optional); type=5;} void select_id_DLCOUNTValuePDCP_SNlength18() { set(optional); type=6;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-SubjectToStatusTransfer-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, receiveStatusofULPDCPSDUs ReceiveStatusofULPDCPSDUs OPTIONAL, uL-COUNTvalue COUNTvalue, dL-COUNTvalue COUNTvalue, iE-Extensions ProtocolExtensionContainer { {E-RABs-SubjectToStatusTransfer-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_SubjectToStatusTransfer_Item : asn::sequence<5, 0, true, 2> { static constexpr const char* name() {return "E-RABs-SubjectToStatusTransfer-Item";} using parent_t = asn::sequence<5, 0, true, 2>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct receiveStatusofULPDCPSDUs_t : ReceiveStatusofULPDCPSDUs { static constexpr const char* name() {return "receiveStatusofULPDCPSDUs_t";} using parent_t = ReceiveStatusofULPDCPSDUs; static constexpr bool optional = true; }; receiveStatusofULPDCPSDUs_t& set_receiveStatusofULPDCPSDUs() { receiveStatusofULPDCPSDUs.setpresent(true); return receiveStatusofULPDCPSDUs;} receiveStatusofULPDCPSDUs_t const* get_receiveStatusofULPDCPSDUs() const {return receiveStatusofULPDCPSDUs.is_valid() ? &receiveStatusofULPDCPSDUs : nullptr;} struct uL_COUNTvalue_t : COUNTvalue { static constexpr const char* name() {return "uL_COUNTvalue_t";} using parent_t = COUNTvalue; }; uL_COUNTvalue_t& ref_uL_COUNTvalue() {return uL_COUNTvalue;} uL_COUNTvalue_t const& ref_uL_COUNTvalue() const {return uL_COUNTvalue;} struct dL_COUNTvalue_t : COUNTvalue { static constexpr const char* name() {return "dL_COUNTvalue_t";} using parent_t = COUNTvalue; }; dL_COUNTvalue_t& ref_dL_COUNTvalue() {return dL_COUNTvalue;} dL_COUNTvalue_t const& ref_dL_COUNTvalue() const {return dL_COUNTvalue;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(receiveStatusofULPDCPSDUs); v(uL_COUNTvalue); v(dL_COUNTvalue); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(receiveStatusofULPDCPSDUs); v(uL_COUNTvalue); v(dL_COUNTvalue); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); receiveStatusofULPDCPSDUs.clear(); uL_COUNTvalue.clear(); dL_COUNTvalue.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; receiveStatusofULPDCPSDUs_t receiveStatusofULPDCPSDUs; uL_COUNTvalue_t uL_COUNTvalue; dL_COUNTvalue_t dL_COUNTvalue; iE_Extensions_t iE_Extensions; }; /* E-RABs-SubjectToStatusTransfer-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-SubjectToStatusTransfer-Item CRITICALITY ignore TYPE E-RABs-SubjectToStatusTransfer-Item PRESENCE mandatory } } */ struct E_RABs_SubjectToStatusTransfer_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(id_E_RABs_SubjectToStatusTransfer_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_SubjectToStatusTransfer_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToStatusTransfer_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_SubjectToStatusTransfer_Item& select_id_E_RABs_SubjectToStatusTransfer_Item() { return set(1); } E_RABs_SubjectToStatusTransfer_Item const* get_id_E_RABs_SubjectToStatusTransfer_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_SubjectToStatusTransfer_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_SubjectToStatusTransfer_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_E_RABs_SubjectToStatusTransfer_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-SubjectToStatusTransfer-List ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-SubjectToStatusTransfer-ItemIEs} } */ struct E_RABs_SubjectToStatusTransfer_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_SubjectToStatusTransfer_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_SubjectToStatusTransfer_List : asn::sequenceof { static constexpr const char* name() {return "E-RABs-SubjectToStatusTransfer-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeAdded-Item-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| { ID id-SIPTO-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}, ... } */ struct E_RABs_ToBeAdded_Item_SCG_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Correlation_ID() { set(id_Correlation_ID); type=1;} void select_id_SIPTO_Correlation_ID() { set(id_SIPTO_Correlation_ID); type=2;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Correlation_ID)) { type = 1; return true; } else if(equal(id_SIPTO_Correlation_ID)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Correlation_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SIPTO_Correlation_ID);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Correlation_ID() { set(ignore); type=1;} void select_id_SIPTO_Correlation_ID() { set(ignore); type=2;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} Correlation_ID& select_id_Correlation_ID() { return set(1); } Correlation_ID const* get_id_Correlation_ID() const { return get(1); } Correlation_ID& select_id_SIPTO_Correlation_ID() { return set(2); } Correlation_ID const* get_id_SIPTO_Correlation_ID() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Correlation_ID()); return true; case 2: v(select_id_SIPTO_Correlation_ID()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Correlation_ID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Correlation_ID() { set(optional); type=1;} void select_id_SIPTO_Correlation_ID() { set(optional); type=2;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-Item-SCG-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, dL-Forwarding DL-Forwarding OPTIONAL, s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-Item-SCG-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeAdded_Item_SCG_Bearer : asn::sequence<5, 0, true, 2> { static constexpr const char* name() {return "E-RABs-ToBeAdded-Item-SCG-Bearer";} using parent_t = asn::sequence<5, 0, true, 2>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; }; e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} struct dL_Forwarding_t : DL_Forwarding { static constexpr const char* name() {return "dL_Forwarding_t";} using parent_t = DL_Forwarding; static constexpr bool optional = true; }; dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(dL_Forwarding); v(s1_UL_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(dL_Forwarding); v(s1_UL_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); e_RAB_Level_QoS_Parameters.clear(); dL_Forwarding.clear(); s1_UL_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; dL_Forwarding_t dL_Forwarding; s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeAdded-Item-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeAdded_Item_Split_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-Item-Split-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, meNB-GTPtunnelEndpoint GTPtunnelEndpoint, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-Item-Split-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeAdded_Item_Split_Bearer : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeAdded-Item-Split-Bearer";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; }; e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; meNB_GTPtunnelEndpoint_t& ref_meNB_GTPtunnelEndpoint() {return meNB_GTPtunnelEndpoint;} meNB_GTPtunnelEndpoint_t const& ref_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(meNB_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(meNB_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); e_RAB_Level_QoS_Parameters.clear(); meNB_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeAdded-Item ::= CHOICE { sCG-Bearer E-RABs-ToBeAdded-Item-SCG-Bearer, split-Bearer E-RABs-ToBeAdded-Item-Split-Bearer, ... } */ struct E_RABs_ToBeAdded_Item : asn::choice<2, 0, true> { static constexpr const char* name() {return "E-RABs-ToBeAdded-Item";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~E_RABs_ToBeAdded_Item() {clear();} struct sCG_Bearer_t : E_RABs_ToBeAdded_Item_SCG_Bearer { static constexpr const char* name() {return "sCG_Bearer_t";} using parent_t = E_RABs_ToBeAdded_Item_SCG_Bearer; }; struct split_Bearer_t : E_RABs_ToBeAdded_Item_Split_Bearer { static constexpr const char* name() {return "split_Bearer_t";} using parent_t = E_RABs_ToBeAdded_Item_Split_Bearer; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sCG_Bearer_t)]; char dummy2[sizeof(split_Bearer_t)]; }; asn::variant var; index_type index {0}; }; /* E-RABs-ToBeAdded-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeAdded-Item CRITICALITY reject TYPE E-RABs-ToBeAdded-Item PRESENCE mandatory}, ... } */ struct E_RABs_ToBeAdded_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeAdded_Item() { set(id_E_RABs_ToBeAdded_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeAdded_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeAdded_Item() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeAdded_Item& select_id_E_RABs_ToBeAdded_Item() { return set(1); } E_RABs_ToBeAdded_Item const* get_id_E_RABs_ToBeAdded_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeAdded_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeAdded_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeAdded_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-ItemIEs} } */ struct E_RABs_ToBeAdded_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeAdded_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeAdded_List : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeAdded-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| { ID id-SIPTO-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}, ... } */ struct E_RABs_ToBeAdded_ModReqItem_SCG_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Correlation_ID() { set(id_Correlation_ID); type=1;} void select_id_SIPTO_Correlation_ID() { set(id_SIPTO_Correlation_ID); type=2;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Correlation_ID)) { type = 1; return true; } else if(equal(id_SIPTO_Correlation_ID)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Correlation_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SIPTO_Correlation_ID);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Correlation_ID() { set(ignore); type=1;} void select_id_SIPTO_Correlation_ID() { set(ignore); type=2;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} Correlation_ID& select_id_Correlation_ID() { return set(1); } Correlation_ID const* get_id_Correlation_ID() const { return get(1); } Correlation_ID& select_id_SIPTO_Correlation_ID() { return set(2); } Correlation_ID const* get_id_SIPTO_Correlation_ID() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Correlation_ID()); return true; case 2: v(select_id_SIPTO_Correlation_ID()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Correlation_ID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Correlation_ID() { set(optional); type=1;} void select_id_SIPTO_Correlation_ID() { set(optional); type=2;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-ModReqItem-SCG-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, dL-Forwarding DL-Forwarding OPTIONAL, s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeAdded_ModReqItem_SCG_Bearer : asn::sequence<5, 0, true, 2> { static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem-SCG-Bearer";} using parent_t = asn::sequence<5, 0, true, 2>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; }; e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} struct dL_Forwarding_t : DL_Forwarding { static constexpr const char* name() {return "dL_Forwarding_t";} using parent_t = DL_Forwarding; static constexpr bool optional = true; }; dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(dL_Forwarding); v(s1_UL_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(dL_Forwarding); v(s1_UL_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); e_RAB_Level_QoS_Parameters.clear(); dL_Forwarding.clear(); s1_UL_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; dL_Forwarding_t dL_Forwarding; s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeAdded_ModReqItem_Split_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-ModReqItem-Split-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, meNB-GTPtunnelEndpoint GTPtunnelEndpoint, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-ModReqItem-Split-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeAdded_ModReqItem_Split_Bearer : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem-Split-Bearer";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; }; e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; meNB_GTPtunnelEndpoint_t& ref_meNB_GTPtunnelEndpoint() {return meNB_GTPtunnelEndpoint;} meNB_GTPtunnelEndpoint_t const& ref_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(meNB_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(meNB_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); e_RAB_Level_QoS_Parameters.clear(); meNB_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeAdded-ModReqItem ::= CHOICE { sCG-Bearer E-RABs-ToBeAdded-ModReqItem-SCG-Bearer, split-Bearer E-RABs-ToBeAdded-ModReqItem-Split-Bearer, ... } */ struct E_RABs_ToBeAdded_ModReqItem : asn::choice<2, 0, true> { static constexpr const char* name() {return "E-RABs-ToBeAdded-ModReqItem";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~E_RABs_ToBeAdded_ModReqItem() {clear();} struct sCG_Bearer_t : E_RABs_ToBeAdded_ModReqItem_SCG_Bearer { static constexpr const char* name() {return "sCG_Bearer_t";} using parent_t = E_RABs_ToBeAdded_ModReqItem_SCG_Bearer; }; struct split_Bearer_t : E_RABs_ToBeAdded_ModReqItem_Split_Bearer { static constexpr const char* name() {return "split_Bearer_t";} using parent_t = E_RABs_ToBeAdded_ModReqItem_Split_Bearer; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sCG_Bearer_t)]; char dummy2[sizeof(split_Bearer_t)]; }; asn::variant var; index_type index {0}; }; /* E-RABs-ToBeAdded-ModReqItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeAdded-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeAdded-ModReqItem PRESENCE mandatory}, ... } */ struct E_RABs_ToBeAdded_ModReqItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeAdded_ModReqItem() { set(id_E_RABs_ToBeAdded_ModReqItem); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeAdded_ModReqItem)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_ModReqItem);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeAdded_ModReqItem() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeAdded_ModReqItem& select_id_E_RABs_ToBeAdded_ModReqItem() { return set(1); } E_RABs_ToBeAdded_ModReqItem const* get_id_E_RABs_ToBeAdded_ModReqItem() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeAdded_ModReqItem()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeAdded_ModReqItem)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeAdded_ModReqItem() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-ModReqItemIEs} } */ struct E_RABs_ToBeAdded_List_ModReq_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeAdded_List_ModReq_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeAdded_List_ModReq : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeAdded-List-ModReq";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, ... } */ struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_RLCMode_transferred)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RLCMode_transferred() { set(ignore); type=1;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} RLCMode& select_id_RLCMode_transferred() { return set(1); } RLCMode const* get_id_RLCMode_transferred() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_RLCMode_transferred()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(RLCMode)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RLCMode_transferred() { set(optional); type=1;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent ::= SEQUENCE { full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, max-MCG-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, -- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” and GBR QoS Information IE is present in Full E-RAB Level QoS Parameters IE -- dL-Forwarding DL-Forwarding OPTIONAL, meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, -- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent : asn::sequence<6, 0, true, 4> { static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<6, 0, true, 4>; struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; }; full_E_RAB_Level_QoS_Parameters_t& ref_full_E_RAB_Level_QoS_Parameters() {return full_E_RAB_Level_QoS_Parameters;} full_E_RAB_Level_QoS_Parameters_t const& ref_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters;} struct max_MCG_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation { static constexpr const char* name() {return "max_MCG_admit_E_RAB_Level_QoS_Parameters_t";} using parent_t = GBR_QosInformation; static constexpr bool optional = true; }; max_MCG_admit_E_RAB_Level_QoS_Parameters_t& set_max_MCG_admit_E_RAB_Level_QoS_Parameters() { max_MCG_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MCG_admit_E_RAB_Level_QoS_Parameters;} max_MCG_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MCG_admit_E_RAB_Level_QoS_Parameters() const {return max_MCG_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MCG_admit_E_RAB_Level_QoS_Parameters : nullptr;} struct dL_Forwarding_t : DL_Forwarding { static constexpr const char* name() {return "dL_Forwarding_t";} using parent_t = DL_Forwarding; static constexpr bool optional = true; }; dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint { static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(full_E_RAB_Level_QoS_Parameters); v(max_MCG_admit_E_RAB_Level_QoS_Parameters); v(dL_Forwarding); v(meNB_DL_GTP_TEIDatMCG); v(s1_UL_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(full_E_RAB_Level_QoS_Parameters); v(max_MCG_admit_E_RAB_Level_QoS_Parameters); v(dL_Forwarding); v(meNB_DL_GTP_TEIDatMCG); v(s1_UL_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { full_E_RAB_Level_QoS_Parameters.clear(); max_MCG_admit_E_RAB_Level_QoS_Parameters.clear(); dL_Forwarding.clear(); meNB_DL_GTP_TEIDatMCG.clear(); s1_UL_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; max_MCG_admit_E_RAB_Level_QoS_Parameters_t max_MCG_admit_E_RAB_Level_QoS_Parameters; dL_Forwarding_t dL_Forwarding; meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| { ID id-duplicationActivation CRITICALITY ignore EXTENSION DuplicationActivation PRESENCE optional}, ... } */ struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} void select_id_duplicationActivation() { set(id_duplicationActivation); type=3;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_uLpDCPSnLength)) { type = 1; return true; } else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } else if(equal(id_duplicationActivation)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_duplicationActivation);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(ignore); type=1;} void select_id_dLPDCPSnLength() { set(ignore); type=2;} void select_id_duplicationActivation() { set(ignore); type=3;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } DuplicationActivation& select_id_duplicationActivation() { return set(3); } DuplicationActivation const* get_id_duplicationActivation() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_uLpDCPSnLength()); return true; case 2: v(select_id_dLPDCPSnLength()); return true; case 3: v(select_id_duplicationActivation()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(DuplicationActivation)]; char dummy2[sizeof(PDCPSnLength)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(optional); type=1;} void select_id_dLPDCPSnLength() { set(optional); type=2;} void select_id_duplicationActivation() { set(optional); type=3;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint, secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, rlc-Mode RLCMode, uL-Configuration ULConfiguration OPTIONAL, -- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent : asn::sequence<6, 0, true, 3> { static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<6, 0, true, 3>; struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; }; requested_SCG_E_RAB_Level_QoS_Parameters_t& ref_requested_SCG_E_RAB_Level_QoS_Parameters() {return requested_SCG_E_RAB_Level_QoS_Parameters;} requested_SCG_E_RAB_Level_QoS_Parameters_t const& ref_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters;} struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint { static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} using parent_t = GTPtunnelEndpoint; }; meNB_UL_GTP_TEIDatPDCP_t& ref_meNB_UL_GTP_TEIDatPDCP() {return meNB_UL_GTP_TEIDatPDCP;} meNB_UL_GTP_TEIDatPDCP_t const& ref_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP;} struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint { static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} struct rlc_Mode_t : RLCMode { static constexpr const char* name() {return "rlc_Mode_t";} using parent_t = RLCMode; }; rlc_Mode_t& ref_rlc_Mode() {return rlc_Mode;} rlc_Mode_t const& ref_rlc_Mode() const {return rlc_Mode;} struct uL_Configuration_t : ULConfiguration { static constexpr const char* name() {return "uL_Configuration_t";} using parent_t = ULConfiguration; static constexpr bool optional = true; }; uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(requested_SCG_E_RAB_Level_QoS_Parameters); v(meNB_UL_GTP_TEIDatPDCP); v(secondary_meNB_UL_GTP_TEIDatPDCP); v(rlc_Mode); v(uL_Configuration); v(iE_Extensions); }; template void encode(V& v) const { v(requested_SCG_E_RAB_Level_QoS_Parameters); v(meNB_UL_GTP_TEIDatPDCP); v(secondary_meNB_UL_GTP_TEIDatPDCP); v(rlc_Mode); v(uL_Configuration); v(iE_Extensions); }; void clear() { requested_SCG_E_RAB_Level_QoS_Parameters.clear(); meNB_UL_GTP_TEIDatPDCP.clear(); secondary_meNB_UL_GTP_TEIDatPDCP.clear(); rlc_Mode.clear(); uL_Configuration.clear(); iE_Extensions.clear(); }; private: requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; rlc_Mode_t rlc_Mode; uL_Configuration_t uL_Configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeAdded_SgNBAddReq_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-SgNBAddReq-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, drb-ID DRB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-ToBeAdded-SgNBAddReq-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBAddReq-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeAdded_SgNBAddReq_Item : asn::sequence<5, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReq-Item";} using parent_t = asn::sequence<5, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct drb_ID_t : DRB_ID { static constexpr const char* name() {return "drb_ID_t";} using parent_t = DRB_ID; }; drb_ID_t& ref_drb_ID() {return drb_ID;} drb_ID_t const& ref_drb_ID() const {return drb_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_ToBeAdded_SgNBAddReq_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(drb_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(drb_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); drb_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; drb_ID_t drb_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeAdded-SgNBAddReq-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeAdded-SgNBAddReq-Item CRITICALITY reject TYPE E-RABs-ToBeAdded-SgNBAddReq-Item PRESENCE mandatory}, ... } */ struct E_RABs_ToBeAdded_SgNBAddReq_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(id_E_RABs_ToBeAdded_SgNBAddReq_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeAdded_SgNBAddReq_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBAddReq_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeAdded_SgNBAddReq_Item& select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { return set(1); } E_RABs_ToBeAdded_SgNBAddReq_Item const* get_id_E_RABs_ToBeAdded_SgNBAddReq_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeAdded_SgNBAddReq_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeAdded_SgNBAddReq_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeAdded_SgNBAddReq_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-SgNBAddReqList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-SgNBAddReq-ItemIEs} } */ struct E_RABs_ToBeAdded_SgNBAddReqList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeAdded_SgNBAddReqList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeAdded_SgNBAddReqList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBAddReqList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, ... } */ struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_RLCMode_transferred)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RLCMode_transferred() { set(ignore); type=1;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} RLCMode& select_id_RLCMode_transferred() { return set(1); } RLCMode const* get_id_RLCMode_transferred() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_RLCMode_transferred()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(RLCMode)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RLCMode_transferred() { set(optional); type=1;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, max-MN-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, -- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” and GBR QoS Information IE is present in Full E-RAB Level QoS Parameters IE -- dL-Forwarding DL-Forwarding OPTIONAL, meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, -- This IE shall be present if MCG resource IE in the the EN-DC Resource Configuration IE is set to “present” -- s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<6, 0, true, 4> { static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<6, 0, true, 4>; struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; }; full_E_RAB_Level_QoS_Parameters_t& ref_full_E_RAB_Level_QoS_Parameters() {return full_E_RAB_Level_QoS_Parameters;} full_E_RAB_Level_QoS_Parameters_t const& ref_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters;} struct max_MN_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation { static constexpr const char* name() {return "max_MN_admit_E_RAB_Level_QoS_Parameters_t";} using parent_t = GBR_QosInformation; static constexpr bool optional = true; }; max_MN_admit_E_RAB_Level_QoS_Parameters_t& set_max_MN_admit_E_RAB_Level_QoS_Parameters() { max_MN_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MN_admit_E_RAB_Level_QoS_Parameters;} max_MN_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MN_admit_E_RAB_Level_QoS_Parameters() const {return max_MN_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MN_admit_E_RAB_Level_QoS_Parameters : nullptr;} struct dL_Forwarding_t : DL_Forwarding { static constexpr const char* name() {return "dL_Forwarding_t";} using parent_t = DL_Forwarding; static constexpr bool optional = true; }; dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint { static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; s1_UL_GTPtunnelEndpoint_t& ref_s1_UL_GTPtunnelEndpoint() {return s1_UL_GTPtunnelEndpoint;} s1_UL_GTPtunnelEndpoint_t const& ref_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(full_E_RAB_Level_QoS_Parameters); v(max_MN_admit_E_RAB_Level_QoS_Parameters); v(dL_Forwarding); v(meNB_DL_GTP_TEIDatMCG); v(s1_UL_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(full_E_RAB_Level_QoS_Parameters); v(max_MN_admit_E_RAB_Level_QoS_Parameters); v(dL_Forwarding); v(meNB_DL_GTP_TEIDatMCG); v(s1_UL_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { full_E_RAB_Level_QoS_Parameters.clear(); max_MN_admit_E_RAB_Level_QoS_Parameters.clear(); dL_Forwarding.clear(); meNB_DL_GTP_TEIDatMCG.clear(); s1_UL_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; max_MN_admit_E_RAB_Level_QoS_Parameters_t max_MN_admit_E_RAB_Level_QoS_Parameters; dL_Forwarding_t dL_Forwarding; meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| { ID id-duplicationActivation CRITICALITY ignore EXTENSION DuplicationActivation PRESENCE optional}, ... } */ struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} void select_id_duplicationActivation() { set(id_duplicationActivation); type=3;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_uLpDCPSnLength)) { type = 1; return true; } else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } else if(equal(id_duplicationActivation)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_duplicationActivation);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(ignore); type=1;} void select_id_dLPDCPSnLength() { set(ignore); type=2;} void select_id_duplicationActivation() { set(ignore); type=3;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } DuplicationActivation& select_id_duplicationActivation() { return set(3); } DuplicationActivation const* get_id_duplicationActivation() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_uLpDCPSnLength()); return true; case 2: v(select_id_dLPDCPSnLength()); return true; case 3: v(select_id_duplicationActivation()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(DuplicationActivation)]; char dummy2[sizeof(PDCPSnLength)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(optional); type=1;} void select_id_dLPDCPSnLength() { set(optional); type=2;} void select_id_duplicationActivation() { set(optional); type=3;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint, secondary-meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, rlc-Mode RLCMode, uL-Configuration ULConfiguration OPTIONAL, -- This IE shall be present if MCG resource and SCG resources IEs in the the EN-DC Resource Configuration IE are set to “present” -- iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<6, 0, true, 3> { static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<6, 0, true, 3>; struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; }; requested_SCG_E_RAB_Level_QoS_Parameters_t& ref_requested_SCG_E_RAB_Level_QoS_Parameters() {return requested_SCG_E_RAB_Level_QoS_Parameters;} requested_SCG_E_RAB_Level_QoS_Parameters_t const& ref_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters;} struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint { static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} using parent_t = GTPtunnelEndpoint; }; meNB_UL_GTP_TEIDatPDCP_t& ref_meNB_UL_GTP_TEIDatPDCP() {return meNB_UL_GTP_TEIDatPDCP;} meNB_UL_GTP_TEIDatPDCP_t const& ref_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP;} struct secondary_meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint { static constexpr const char* name() {return "secondary_meNB_UL_GTP_TEIDatPDCP_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; secondary_meNB_UL_GTP_TEIDatPDCP_t& set_secondary_meNB_UL_GTP_TEIDatPDCP() { secondary_meNB_UL_GTP_TEIDatPDCP.setpresent(true); return secondary_meNB_UL_GTP_TEIDatPDCP;} secondary_meNB_UL_GTP_TEIDatPDCP_t const* get_secondary_meNB_UL_GTP_TEIDatPDCP() const {return secondary_meNB_UL_GTP_TEIDatPDCP.is_valid() ? &secondary_meNB_UL_GTP_TEIDatPDCP : nullptr;} struct rlc_Mode_t : RLCMode { static constexpr const char* name() {return "rlc_Mode_t";} using parent_t = RLCMode; }; rlc_Mode_t& ref_rlc_Mode() {return rlc_Mode;} rlc_Mode_t const& ref_rlc_Mode() const {return rlc_Mode;} struct uL_Configuration_t : ULConfiguration { static constexpr const char* name() {return "uL_Configuration_t";} using parent_t = ULConfiguration; static constexpr bool optional = true; }; uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(requested_SCG_E_RAB_Level_QoS_Parameters); v(meNB_UL_GTP_TEIDatPDCP); v(secondary_meNB_UL_GTP_TEIDatPDCP); v(rlc_Mode); v(uL_Configuration); v(iE_Extensions); }; template void encode(V& v) const { v(requested_SCG_E_RAB_Level_QoS_Parameters); v(meNB_UL_GTP_TEIDatPDCP); v(secondary_meNB_UL_GTP_TEIDatPDCP); v(rlc_Mode); v(uL_Configuration); v(iE_Extensions); }; void clear() { requested_SCG_E_RAB_Level_QoS_Parameters.clear(); meNB_UL_GTP_TEIDatPDCP.clear(); secondary_meNB_UL_GTP_TEIDatPDCP.clear(); rlc_Mode.clear(); uL_Configuration.clear(); iE_Extensions.clear(); }; private: requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; secondary_meNB_UL_GTP_TEIDatPDCP_t secondary_meNB_UL_GTP_TEIDatPDCP; rlc_Mode_t rlc_Mode; uL_Configuration_t uL_Configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeAdded_SgNBModReq_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-SgNBModReq-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, drb-ID DRB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-ToBeAdded-SgNBModReq-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeAdded-SgNBModReq-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeAdded_SgNBModReq_Item : asn::sequence<5, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-Item";} using parent_t = asn::sequence<5, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct drb_ID_t : DRB_ID { static constexpr const char* name() {return "drb_ID_t";} using parent_t = DRB_ID; }; drb_ID_t& ref_drb_ID() {return drb_ID;} drb_ID_t const& ref_drb_ID() const {return drb_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(drb_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(drb_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); drb_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; drb_ID_t drb_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeAdded-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeAdded-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeAdded-SgNBModReq-Item PRESENCE mandatory}, ... } */ struct E_RABs_ToBeAdded_SgNBModReq_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(id_E_RABs_ToBeAdded_SgNBModReq_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeAdded_SgNBModReq_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBModReq_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeAdded_SgNBModReq_Item& select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { return set(1); } E_RABs_ToBeAdded_SgNBModReq_Item const* get_id_E_RABs_ToBeAdded_SgNBModReq_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeAdded_SgNBModReq_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeAdded_SgNBModReq_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeAdded_SgNBModReq_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeAdded-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeAdded-SgNBModReq-ItemIEs} } */ struct E_RABs_ToBeAdded_SgNBModReq_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeAdded_SgNBModReq_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeAdded_SgNBModReq_List : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeAdded-SgNBModReq-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeModified_ModReqItem_SCG_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeModified-ModReqItem-SCG-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeModified_ModReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> { static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem-SCG-Bearer";} using parent_t = asn::sequence<4, 0, true, 3>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; static constexpr bool optional = true; }; e_RAB_Level_QoS_Parameters_t& set_e_RAB_Level_QoS_Parameters() { e_RAB_Level_QoS_Parameters.setpresent(true); return e_RAB_Level_QoS_Parameters;} e_RAB_Level_QoS_Parameters_t const* get_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters.is_valid() ? &e_RAB_Level_QoS_Parameters : nullptr;} struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; s1_UL_GTPtunnelEndpoint_t& set_s1_UL_GTPtunnelEndpoint() { s1_UL_GTPtunnelEndpoint.setpresent(true); return s1_UL_GTPtunnelEndpoint;} s1_UL_GTPtunnelEndpoint_t const* get_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint.is_valid() ? &s1_UL_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(s1_UL_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(s1_UL_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); e_RAB_Level_QoS_Parameters.clear(); s1_UL_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeModified_ModReqItem_Split_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeModified-ModReqItem-Split-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, meNB-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-ModReqItem-Split-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeModified_ModReqItem_Split_Bearer : asn::sequence<4, 0, true, 3> { static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem-Split-Bearer";} using parent_t = asn::sequence<4, 0, true, 3>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; static constexpr bool optional = true; }; e_RAB_Level_QoS_Parameters_t& set_e_RAB_Level_QoS_Parameters() { e_RAB_Level_QoS_Parameters.setpresent(true); return e_RAB_Level_QoS_Parameters;} e_RAB_Level_QoS_Parameters_t const* get_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters.is_valid() ? &e_RAB_Level_QoS_Parameters : nullptr;} struct meNB_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "meNB_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; meNB_GTPtunnelEndpoint_t& set_meNB_GTPtunnelEndpoint() { meNB_GTPtunnelEndpoint.setpresent(true); return meNB_GTPtunnelEndpoint;} meNB_GTPtunnelEndpoint_t const* get_meNB_GTPtunnelEndpoint() const {return meNB_GTPtunnelEndpoint.is_valid() ? &meNB_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(meNB_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(meNB_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); e_RAB_Level_QoS_Parameters.clear(); meNB_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; meNB_GTPtunnelEndpoint_t meNB_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeModified-ModReqItem ::= CHOICE { sCG-Bearer E-RABs-ToBeModified-ModReqItem-SCG-Bearer, split-Bearer E-RABs-ToBeModified-ModReqItem-Split-Bearer, ... } */ struct E_RABs_ToBeModified_ModReqItem : asn::choice<2, 0, true> { static constexpr const char* name() {return "E-RABs-ToBeModified-ModReqItem";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~E_RABs_ToBeModified_ModReqItem() {clear();} struct sCG_Bearer_t : E_RABs_ToBeModified_ModReqItem_SCG_Bearer { static constexpr const char* name() {return "sCG_Bearer_t";} using parent_t = E_RABs_ToBeModified_ModReqItem_SCG_Bearer; }; struct split_Bearer_t : E_RABs_ToBeModified_ModReqItem_Split_Bearer { static constexpr const char* name() {return "split_Bearer_t";} using parent_t = E_RABs_ToBeModified_ModReqItem_Split_Bearer; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sCG_Bearer_t)]; char dummy2[sizeof(split_Bearer_t)]; }; asn::variant var; index_type index {0}; }; /* E-RABs-ToBeModified-ModReqItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeModified-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeModified-ModReqItem PRESENCE mandatory}, ... } */ struct E_RABs_ToBeModified_ModReqItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeModified_ModReqItem() { set(id_E_RABs_ToBeModified_ModReqItem); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeModified_ModReqItem)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_ModReqItem);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeModified_ModReqItem() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeModified_ModReqItem& select_id_E_RABs_ToBeModified_ModReqItem() { return set(1); } E_RABs_ToBeModified_ModReqItem const* get_id_E_RABs_ToBeModified_ModReqItem() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeModified_ModReqItem()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeModified_ModReqItem)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeModified_ModReqItem() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeModified-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-ModReqItemIEs} } */ struct E_RABs_ToBeModified_List_ModReq_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeModified_List_ModReq_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeModified_List_ModReq : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeModified-List-ModReq";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional }, ... } */ struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RLC_Status() { set(id_RLC_Status); type=1;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_RLC_Status)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RLC_Status() { set(ignore); type=1;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} RLC_Status& select_id_RLC_Status() { return set(1); } RLC_Status const* get_id_RLC_Status() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_RLC_Status()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(RLC_Status)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RLC_Status() { set(optional); type=1;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { full-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, max-MN-admit-E-RAB-Level-QoS-Parameters GBR-QosInformation OPTIONAL, meNB-DL-GTP-TEIDatMCG GTPtunnelEndpoint OPTIONAL, s1-UL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> { static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<5, 0, true, 5>; struct full_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "full_E_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; static constexpr bool optional = true; }; full_E_RAB_Level_QoS_Parameters_t& set_full_E_RAB_Level_QoS_Parameters() { full_E_RAB_Level_QoS_Parameters.setpresent(true); return full_E_RAB_Level_QoS_Parameters;} full_E_RAB_Level_QoS_Parameters_t const* get_full_E_RAB_Level_QoS_Parameters() const {return full_E_RAB_Level_QoS_Parameters.is_valid() ? &full_E_RAB_Level_QoS_Parameters : nullptr;} struct max_MN_admit_E_RAB_Level_QoS_Parameters_t : GBR_QosInformation { static constexpr const char* name() {return "max_MN_admit_E_RAB_Level_QoS_Parameters_t";} using parent_t = GBR_QosInformation; static constexpr bool optional = true; }; max_MN_admit_E_RAB_Level_QoS_Parameters_t& set_max_MN_admit_E_RAB_Level_QoS_Parameters() { max_MN_admit_E_RAB_Level_QoS_Parameters.setpresent(true); return max_MN_admit_E_RAB_Level_QoS_Parameters;} max_MN_admit_E_RAB_Level_QoS_Parameters_t const* get_max_MN_admit_E_RAB_Level_QoS_Parameters() const {return max_MN_admit_E_RAB_Level_QoS_Parameters.is_valid() ? &max_MN_admit_E_RAB_Level_QoS_Parameters : nullptr;} struct meNB_DL_GTP_TEIDatMCG_t : GTPtunnelEndpoint { static constexpr const char* name() {return "meNB_DL_GTP_TEIDatMCG_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; meNB_DL_GTP_TEIDatMCG_t& set_meNB_DL_GTP_TEIDatMCG() { meNB_DL_GTP_TEIDatMCG.setpresent(true); return meNB_DL_GTP_TEIDatMCG;} meNB_DL_GTP_TEIDatMCG_t const* get_meNB_DL_GTP_TEIDatMCG() const {return meNB_DL_GTP_TEIDatMCG.is_valid() ? &meNB_DL_GTP_TEIDatMCG : nullptr;} struct s1_UL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_UL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; s1_UL_GTPtunnelEndpoint_t& set_s1_UL_GTPtunnelEndpoint() { s1_UL_GTPtunnelEndpoint.setpresent(true); return s1_UL_GTPtunnelEndpoint;} s1_UL_GTPtunnelEndpoint_t const* get_s1_UL_GTPtunnelEndpoint() const {return s1_UL_GTPtunnelEndpoint.is_valid() ? &s1_UL_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(full_E_RAB_Level_QoS_Parameters); v(max_MN_admit_E_RAB_Level_QoS_Parameters); v(meNB_DL_GTP_TEIDatMCG); v(s1_UL_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(full_E_RAB_Level_QoS_Parameters); v(max_MN_admit_E_RAB_Level_QoS_Parameters); v(meNB_DL_GTP_TEIDatMCG); v(s1_UL_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { full_E_RAB_Level_QoS_Parameters.clear(); max_MN_admit_E_RAB_Level_QoS_Parameters.clear(); meNB_DL_GTP_TEIDatMCG.clear(); s1_UL_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: full_E_RAB_Level_QoS_Parameters_t full_E_RAB_Level_QoS_Parameters; max_MN_admit_E_RAB_Level_QoS_Parameters_t max_MN_admit_E_RAB_Level_QoS_Parameters; meNB_DL_GTP_TEIDatMCG_t meNB_DL_GTP_TEIDatMCG; s1_UL_GTPtunnelEndpoint_t s1_UL_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| { ID id-secondarymeNBULGTPTEIDatPDCP CRITICALITY ignore EXTENSION GTPtunnelEndpoint PRESENCE optional}, ... } */ struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} void select_id_secondarymeNBULGTPTEIDatPDCP() { set(id_secondarymeNBULGTPTEIDatPDCP); type=3;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_uLpDCPSnLength)) { type = 1; return true; } else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } else if(equal(id_secondarymeNBULGTPTEIDatPDCP)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_secondarymeNBULGTPTEIDatPDCP);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(ignore); type=1;} void select_id_dLPDCPSnLength() { set(ignore); type=2;} void select_id_secondarymeNBULGTPTEIDatPDCP() { set(ignore); type=3;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } GTPtunnelEndpoint& select_id_secondarymeNBULGTPTEIDatPDCP() { return set(3); } GTPtunnelEndpoint const* get_id_secondarymeNBULGTPTEIDatPDCP() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_uLpDCPSnLength()); return true; case 2: v(select_id_dLPDCPSnLength()); return true; case 3: v(select_id_secondarymeNBULGTPTEIDatPDCP()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GTPtunnelEndpoint)]; char dummy2[sizeof(PDCPSnLength)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(optional); type=1;} void select_id_dLPDCPSnLength() { set(optional); type=2;} void select_id_secondarymeNBULGTPTEIDatPDCP() { set(optional); type=3;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { requested-SCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, meNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, uL-Configuration ULConfiguration OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<4, 0, true, 4> { static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<4, 0, true, 4>; struct requested_SCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "requested_SCG_E_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; static constexpr bool optional = true; }; requested_SCG_E_RAB_Level_QoS_Parameters_t& set_requested_SCG_E_RAB_Level_QoS_Parameters() { requested_SCG_E_RAB_Level_QoS_Parameters.setpresent(true); return requested_SCG_E_RAB_Level_QoS_Parameters;} requested_SCG_E_RAB_Level_QoS_Parameters_t const* get_requested_SCG_E_RAB_Level_QoS_Parameters() const {return requested_SCG_E_RAB_Level_QoS_Parameters.is_valid() ? &requested_SCG_E_RAB_Level_QoS_Parameters : nullptr;} struct meNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint { static constexpr const char* name() {return "meNB_UL_GTP_TEIDatPDCP_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; meNB_UL_GTP_TEIDatPDCP_t& set_meNB_UL_GTP_TEIDatPDCP() { meNB_UL_GTP_TEIDatPDCP.setpresent(true); return meNB_UL_GTP_TEIDatPDCP;} meNB_UL_GTP_TEIDatPDCP_t const* get_meNB_UL_GTP_TEIDatPDCP() const {return meNB_UL_GTP_TEIDatPDCP.is_valid() ? &meNB_UL_GTP_TEIDatPDCP : nullptr;} struct uL_Configuration_t : ULConfiguration { static constexpr const char* name() {return "uL_Configuration_t";} using parent_t = ULConfiguration; static constexpr bool optional = true; }; uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(requested_SCG_E_RAB_Level_QoS_Parameters); v(meNB_UL_GTP_TEIDatPDCP); v(uL_Configuration); v(iE_Extensions); }; template void encode(V& v) const { v(requested_SCG_E_RAB_Level_QoS_Parameters); v(meNB_UL_GTP_TEIDatPDCP); v(uL_Configuration); v(iE_Extensions); }; void clear() { requested_SCG_E_RAB_Level_QoS_Parameters.clear(); meNB_UL_GTP_TEIDatPDCP.clear(); uL_Configuration.clear(); iE_Extensions.clear(); }; private: requested_SCG_E_RAB_Level_QoS_Parameters_t requested_SCG_E_RAB_Level_QoS_Parameters; meNB_UL_GTP_TEIDatPDCP_t meNB_UL_GTP_TEIDatPDCP; uL_Configuration_t uL_Configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeModified-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeModified_SgNBModReq_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeModified-SgNBModReq-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-ToBeModified-SgNBModReq-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReq-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeModified_SgNBModReq_Item : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-Item";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_ToBeModified_SgNBModReq_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeModified-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeModified-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReq-Item PRESENCE mandatory}, ... } */ struct E_RABs_ToBeModified_SgNBModReq_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(id_E_RABs_ToBeModified_SgNBModReq_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeModified_SgNBModReq_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReq_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeModified_SgNBModReq_Item& select_id_E_RABs_ToBeModified_SgNBModReq_Item() { return set(1); } E_RABs_ToBeModified_SgNBModReq_Item const* get_id_E_RABs_ToBeModified_SgNBModReq_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeModified_SgNBModReq_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeModified_SgNBModReq_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeModified_SgNBModReq_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeModified-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-SgNBModReq-ItemIEs} } */ struct E_RABs_ToBeModified_SgNBModReq_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeModified_SgNBModReq_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeModified_SgNBModReq_List : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReq-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-uLpDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| { ID id-dLPDCPSnLength CRITICALITY ignore EXTENSION PDCPSnLength PRESENCE optional}| { ID id-new-drb-ID-req CRITICALITY ignore EXTENSION NewDRBIDrequest PRESENCE optional}, ... } */ struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(id_uLpDCPSnLength); type=1;} void select_id_dLPDCPSnLength() { set(id_dLPDCPSnLength); type=2;} void select_id_new_drb_ID_req() { set(id_new_drb_ID_req); type=3;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_uLpDCPSnLength)) { type = 1; return true; } else if(equal(id_dLPDCPSnLength)) { type = 2; return true; } else if(equal(id_new_drb_ID_req)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_uLpDCPSnLength);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_dLPDCPSnLength);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_new_drb_ID_req);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(ignore); type=1;} void select_id_dLPDCPSnLength() { set(ignore); type=2;} void select_id_new_drb_ID_req() { set(ignore); type=3;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} PDCPSnLength& select_id_uLpDCPSnLength() { return set(1); } PDCPSnLength const* get_id_uLpDCPSnLength() const { return get(1); } PDCPSnLength& select_id_dLPDCPSnLength() { return set(2); } PDCPSnLength const* get_id_dLPDCPSnLength() const { return get(2); } NewDRBIDrequest& select_id_new_drb_ID_req() { return set(3); } NewDRBIDrequest const* get_id_new_drb_ID_req() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_uLpDCPSnLength()); return true; case 2: v(select_id_dLPDCPSnLength()); return true; case 3: v(select_id_new_drb_ID_req()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(NewDRBIDrequest)]; char dummy2[sizeof(PDCPSnLength)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_uLpDCPSnLength() { set(optional); type=1;} void select_id_dLPDCPSnLength() { set(optional); type=2;} void select_id_new_drb_ID_req() { set(optional); type=3;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent ::= SEQUENCE { requested-MCG-E-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters OPTIONAL, uL-Configuration ULConfiguration OPTIONAL, sgNB-UL-GTP-TEIDatPDCP GTPtunnelEndpoint OPTIONAL, s1-DL-GTP-TEIDatSgNB GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent : asn::sequence<5, 0, true, 5> { static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<5, 0, true, 5>; struct requested_MCG_E_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "requested_MCG_E_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; static constexpr bool optional = true; }; requested_MCG_E_RAB_Level_QoS_Parameters_t& set_requested_MCG_E_RAB_Level_QoS_Parameters() { requested_MCG_E_RAB_Level_QoS_Parameters.setpresent(true); return requested_MCG_E_RAB_Level_QoS_Parameters;} requested_MCG_E_RAB_Level_QoS_Parameters_t const* get_requested_MCG_E_RAB_Level_QoS_Parameters() const {return requested_MCG_E_RAB_Level_QoS_Parameters.is_valid() ? &requested_MCG_E_RAB_Level_QoS_Parameters : nullptr;} struct uL_Configuration_t : ULConfiguration { static constexpr const char* name() {return "uL_Configuration_t";} using parent_t = ULConfiguration; static constexpr bool optional = true; }; uL_Configuration_t& set_uL_Configuration() { uL_Configuration.setpresent(true); return uL_Configuration;} uL_Configuration_t const* get_uL_Configuration() const {return uL_Configuration.is_valid() ? &uL_Configuration : nullptr;} struct sgNB_UL_GTP_TEIDatPDCP_t : GTPtunnelEndpoint { static constexpr const char* name() {return "sgNB_UL_GTP_TEIDatPDCP_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; sgNB_UL_GTP_TEIDatPDCP_t& set_sgNB_UL_GTP_TEIDatPDCP() { sgNB_UL_GTP_TEIDatPDCP.setpresent(true); return sgNB_UL_GTP_TEIDatPDCP;} sgNB_UL_GTP_TEIDatPDCP_t const* get_sgNB_UL_GTP_TEIDatPDCP() const {return sgNB_UL_GTP_TEIDatPDCP.is_valid() ? &sgNB_UL_GTP_TEIDatPDCP : nullptr;} struct s1_DL_GTP_TEIDatSgNB_t : GTPtunnelEndpoint { static constexpr const char* name() {return "s1_DL_GTP_TEIDatSgNB_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; s1_DL_GTP_TEIDatSgNB_t& set_s1_DL_GTP_TEIDatSgNB() { s1_DL_GTP_TEIDatSgNB.setpresent(true); return s1_DL_GTP_TEIDatSgNB;} s1_DL_GTP_TEIDatSgNB_t const* get_s1_DL_GTP_TEIDatSgNB() const {return s1_DL_GTP_TEIDatSgNB.is_valid() ? &s1_DL_GTP_TEIDatSgNB : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(requested_MCG_E_RAB_Level_QoS_Parameters); v(uL_Configuration); v(sgNB_UL_GTP_TEIDatPDCP); v(s1_DL_GTP_TEIDatSgNB); v(iE_Extensions); }; template void encode(V& v) const { v(requested_MCG_E_RAB_Level_QoS_Parameters); v(uL_Configuration); v(sgNB_UL_GTP_TEIDatPDCP); v(s1_DL_GTP_TEIDatSgNB); v(iE_Extensions); }; void clear() { requested_MCG_E_RAB_Level_QoS_Parameters.clear(); uL_Configuration.clear(); sgNB_UL_GTP_TEIDatPDCP.clear(); s1_DL_GTP_TEIDatSgNB.clear(); iE_Extensions.clear(); }; private: requested_MCG_E_RAB_Level_QoS_Parameters_t requested_MCG_E_RAB_Level_QoS_Parameters; uL_Configuration_t uL_Configuration; sgNB_UL_GTP_TEIDatPDCP_t sgNB_UL_GTP_TEIDatPDCP; s1_DL_GTP_TEIDatSgNB_t s1_DL_GTP_TEIDatSgNB; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-RLC-Status CRITICALITY ignore EXTENSION RLC-Status PRESENCE optional}| { ID id-lCID CRITICALITY ignore EXTENSION LCID PRESENCE optional}, ... } */ struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_RLC_Status() { set(id_RLC_Status); type=1;} void select_id_lCID() { set(id_lCID); type=2;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_RLC_Status)) { type = 1; return true; } else if(equal(id_lCID)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_RLC_Status);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_lCID);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_RLC_Status() { set(ignore); type=1;} void select_id_lCID() { set(ignore); type=2;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} RLC_Status& select_id_RLC_Status() { return set(1); } RLC_Status const* get_id_RLC_Status() const { return get(1); } LCID& select_id_lCID() { return set(2); } LCID const* get_id_lCID() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_RLC_Status()); return true; case 2: v(select_id_lCID()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(LCID)]; char dummy2[sizeof(RLC_Status)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_RLC_Status() { set(optional); type=1;} void select_id_lCID() { set(optional); type=2;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent ::= SEQUENCE { sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, secondary-sgNB-DL-GTP-TEIDatSCG GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent : asn::sequence<3, 0, true, 3> { static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<3, 0, true, 3>; struct sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint { static constexpr const char* name() {return "sgNB_DL_GTP_TEIDatSCG_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; sgNB_DL_GTP_TEIDatSCG_t& set_sgNB_DL_GTP_TEIDatSCG() { sgNB_DL_GTP_TEIDatSCG.setpresent(true); return sgNB_DL_GTP_TEIDatSCG;} sgNB_DL_GTP_TEIDatSCG_t const* get_sgNB_DL_GTP_TEIDatSCG() const {return sgNB_DL_GTP_TEIDatSCG.is_valid() ? &sgNB_DL_GTP_TEIDatSCG : nullptr;} struct secondary_sgNB_DL_GTP_TEIDatSCG_t : GTPtunnelEndpoint { static constexpr const char* name() {return "secondary_sgNB_DL_GTP_TEIDatSCG_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; secondary_sgNB_DL_GTP_TEIDatSCG_t& set_secondary_sgNB_DL_GTP_TEIDatSCG() { secondary_sgNB_DL_GTP_TEIDatSCG.setpresent(true); return secondary_sgNB_DL_GTP_TEIDatSCG;} secondary_sgNB_DL_GTP_TEIDatSCG_t const* get_secondary_sgNB_DL_GTP_TEIDatSCG() const {return secondary_sgNB_DL_GTP_TEIDatSCG.is_valid() ? &secondary_sgNB_DL_GTP_TEIDatSCG : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(sgNB_DL_GTP_TEIDatSCG); v(secondary_sgNB_DL_GTP_TEIDatSCG); v(iE_Extensions); }; template void encode(V& v) const { v(sgNB_DL_GTP_TEIDatSCG); v(secondary_sgNB_DL_GTP_TEIDatSCG); v(iE_Extensions); }; void clear() { sgNB_DL_GTP_TEIDatSCG.clear(); secondary_sgNB_DL_GTP_TEIDatSCG.clear(); iE_Extensions.clear(); }; private: sgNB_DL_GTP_TEIDatSCG_t sgNB_DL_GTP_TEIDatSCG; secondary_sgNB_DL_GTP_TEIDatSCG_t secondary_sgNB_DL_GTP_TEIDatSCG; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeModified_SgNBModReqd_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeModified-SgNBModReqd-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-ToBeModified-SgNBModReqd-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeModified-SgNBModReqd-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeModified_SgNBModReqd_Item : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqd-Item";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_ToBeModified_SgNBModReqd_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeModified-SgNBModReqd-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeModified-SgNBModReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReqd-Item PRESENCE mandatory }, ... } */ struct E_RABs_ToBeModified_SgNBModReqd_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(id_E_RABs_ToBeModified_SgNBModReqd_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeModified_SgNBModReqd_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReqd_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeModified_SgNBModReqd_Item& select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { return set(1); } E_RABs_ToBeModified_SgNBModReqd_Item const* get_id_E_RABs_ToBeModified_SgNBModReqd_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeModified_SgNBModReqd_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeModified_SgNBModReqd_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeModified_SgNBModReqd_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeModified-SgNBModReqdList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeModified-SgNBModReqd-ItemIEs} } */ struct E_RABs_ToBeModified_SgNBModReqdList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeModified_SgNBModReqdList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeModified_SgNBModReqdList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeModified-SgNBModReqdList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_ModReqItem_SCG_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-ModReqItem-SCG-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqItem-SCG-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_ModReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> { static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem-SCG-Bearer";} using parent_t = asn::sequence<4, 0, true, 3>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(dL_Forwarding_GTPtunnelEndpoint); v(uL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(dL_Forwarding_GTPtunnelEndpoint); v(uL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); dL_Forwarding_GTPtunnelEndpoint.clear(); uL_Forwarding_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_ModReqItem_Split_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-ModReqItem-Split-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqItem-Split-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_ModReqItem_Split_Bearer : asn::sequence<3, 0, true, 2> { static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem-Split-Bearer";} using parent_t = asn::sequence<3, 0, true, 2>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(dL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(dL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); dL_Forwarding_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-ModReqItem ::= CHOICE { sCG-Bearer E-RABs-ToBeReleased-ModReqItem-SCG-Bearer, split-Bearer E-RABs-ToBeReleased-ModReqItem-Split-Bearer, ... } */ struct E_RABs_ToBeReleased_ModReqItem : asn::choice<2, 0, true> { static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqItem";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~E_RABs_ToBeReleased_ModReqItem() {clear();} struct sCG_Bearer_t : E_RABs_ToBeReleased_ModReqItem_SCG_Bearer { static constexpr const char* name() {return "sCG_Bearer_t";} using parent_t = E_RABs_ToBeReleased_ModReqItem_SCG_Bearer; }; struct split_Bearer_t : E_RABs_ToBeReleased_ModReqItem_Split_Bearer { static constexpr const char* name() {return "split_Bearer_t";} using parent_t = E_RABs_ToBeReleased_ModReqItem_Split_Bearer; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sCG_Bearer_t)]; char dummy2[sizeof(split_Bearer_t)]; }; asn::variant var; index_type index {0}; }; /* E-RABs-ToBeReleased-ModReqItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeReleased-ModReqItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqItem PRESENCE mandatory}, ... } */ struct E_RABs_ToBeReleased_ModReqItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_ModReqItem() { set(id_E_RABs_ToBeReleased_ModReqItem); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeReleased_ModReqItem)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqItem);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_ModReqItem() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeReleased_ModReqItem& select_id_E_RABs_ToBeReleased_ModReqItem() { return set(1); } E_RABs_ToBeReleased_ModReqItem const* get_id_E_RABs_ToBeReleased_ModReqItem() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeReleased_ModReqItem()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeReleased_ModReqItem)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_ModReqItem() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-List-ModReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-ModReqItemIEs} } */ struct E_RABs_ToBeReleased_List_ModReq_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeReleased_List_ModReq_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeReleased_List_ModReq : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeReleased-List-ModReq";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_RelConfItem_SCG_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-RelConfItem-SCG-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelConfItem-SCG-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_RelConfItem_SCG_Bearer : asn::sequence<4, 0, true, 3> { static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem-SCG-Bearer";} using parent_t = asn::sequence<4, 0, true, 3>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(uL_Forwarding_GTPtunnelEndpoint); v(dL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(uL_Forwarding_GTPtunnelEndpoint); v(dL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); uL_Forwarding_GTPtunnelEndpoint.clear(); dL_Forwarding_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_RelConfItem_Split_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-RelConfItem-Split-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelConfItem-Split-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_RelConfItem_Split_Bearer : asn::sequence<3, 0, true, 2> { static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem-Split-Bearer";} using parent_t = asn::sequence<3, 0, true, 2>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(dL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(dL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); dL_Forwarding_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-RelConfItem ::= CHOICE { sCG-Bearer E-RABs-ToBeReleased-RelConfItem-SCG-Bearer, split-Bearer E-RABs-ToBeReleased-RelConfItem-Split-Bearer, ... } */ struct E_RABs_ToBeReleased_RelConfItem : asn::choice<2, 0, true> { static constexpr const char* name() {return "E-RABs-ToBeReleased-RelConfItem";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~E_RABs_ToBeReleased_RelConfItem() {clear();} struct sCG_Bearer_t : E_RABs_ToBeReleased_RelConfItem_SCG_Bearer { static constexpr const char* name() {return "sCG_Bearer_t";} using parent_t = E_RABs_ToBeReleased_RelConfItem_SCG_Bearer; }; struct split_Bearer_t : E_RABs_ToBeReleased_RelConfItem_Split_Bearer { static constexpr const char* name() {return "split_Bearer_t";} using parent_t = E_RABs_ToBeReleased_RelConfItem_Split_Bearer; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sCG_Bearer_t)]; char dummy2[sizeof(split_Bearer_t)]; }; asn::variant var; index_type index {0}; }; /* E-RABs-ToBeReleased-RelConfItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeReleased-RelConfItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-RelConfItem PRESENCE mandatory}, ... } */ struct E_RABs_ToBeReleased_RelConfItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_RelConfItem() { set(id_E_RABs_ToBeReleased_RelConfItem); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeReleased_RelConfItem)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_RelConfItem);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_RelConfItem() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeReleased_RelConfItem& select_id_E_RABs_ToBeReleased_RelConfItem() { return set(1); } E_RABs_ToBeReleased_RelConfItem const* get_id_E_RABs_ToBeReleased_RelConfItem() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeReleased_RelConfItem()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeReleased_RelConfItem)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_RelConfItem() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-List-RelConf ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-RelConfItemIEs} } */ struct E_RABs_ToBeReleased_List_RelConf_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeReleased_List_RelConf_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeReleased_List_RelConf : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeReleased-List-RelConf";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_RelReqItem_SCG_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-RelReqItem-SCG-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, uL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelReqItem-SCG-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_RelReqItem_SCG_Bearer : asn::sequence<4, 0, true, 3> { static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem-SCG-Bearer";} using parent_t = asn::sequence<4, 0, true, 3>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct uL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; uL_Forwarding_GTPtunnelEndpoint_t& set_uL_Forwarding_GTPtunnelEndpoint() { uL_Forwarding_GTPtunnelEndpoint.setpresent(true); return uL_Forwarding_GTPtunnelEndpoint;} uL_Forwarding_GTPtunnelEndpoint_t const* get_uL_Forwarding_GTPtunnelEndpoint() const {return uL_Forwarding_GTPtunnelEndpoint.is_valid() ? &uL_Forwarding_GTPtunnelEndpoint : nullptr;} struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(uL_Forwarding_GTPtunnelEndpoint); v(dL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(uL_Forwarding_GTPtunnelEndpoint); v(dL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); uL_Forwarding_GTPtunnelEndpoint.clear(); dL_Forwarding_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; uL_Forwarding_GTPtunnelEndpoint_t uL_Forwarding_GTPtunnelEndpoint; dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_RelReqItem_Split_BearerExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-RelReqItem-Split-Bearer ::= SEQUENCE { e-RAB-ID E-RAB-ID, dL-Forwarding-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-RelReqItem-Split-BearerExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_RelReqItem_Split_Bearer : asn::sequence<3, 0, true, 2> { static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem-Split-Bearer";} using parent_t = asn::sequence<3, 0, true, 2>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct dL_Forwarding_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_Forwarding_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_Forwarding_GTPtunnelEndpoint_t& set_dL_Forwarding_GTPtunnelEndpoint() { dL_Forwarding_GTPtunnelEndpoint.setpresent(true); return dL_Forwarding_GTPtunnelEndpoint;} dL_Forwarding_GTPtunnelEndpoint_t const* get_dL_Forwarding_GTPtunnelEndpoint() const {return dL_Forwarding_GTPtunnelEndpoint.is_valid() ? &dL_Forwarding_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(dL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(dL_Forwarding_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); dL_Forwarding_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; dL_Forwarding_GTPtunnelEndpoint_t dL_Forwarding_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-RelReqItem ::= CHOICE { sCG-Bearer E-RABs-ToBeReleased-RelReqItem-SCG-Bearer, split-Bearer E-RABs-ToBeReleased-RelReqItem-Split-Bearer, ... } */ struct E_RABs_ToBeReleased_RelReqItem : asn::choice<2, 0, true> { static constexpr const char* name() {return "E-RABs-ToBeReleased-RelReqItem";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~E_RABs_ToBeReleased_RelReqItem() {clear();} struct sCG_Bearer_t : E_RABs_ToBeReleased_RelReqItem_SCG_Bearer { static constexpr const char* name() {return "sCG_Bearer_t";} using parent_t = E_RABs_ToBeReleased_RelReqItem_SCG_Bearer; }; struct split_Bearer_t : E_RABs_ToBeReleased_RelReqItem_Split_Bearer { static constexpr const char* name() {return "split_Bearer_t";} using parent_t = E_RABs_ToBeReleased_RelReqItem_Split_Bearer; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sCG_Bearer_t& select_sCG_Bearer() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sCG_Bearer_t const* get_sCG_Bearer() const { if(get_index() == 1) { return &var.as();} return nullptr; } split_Bearer_t& select_split_Bearer() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} split_Bearer_t const* get_split_Bearer() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sCG_Bearer_t)]; char dummy2[sizeof(split_Bearer_t)]; }; asn::variant var; index_type index {0}; }; /* E-RABs-ToBeReleased-RelReqItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeReleased-RelReqItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-RelReqItem PRESENCE mandatory}, ... } */ struct E_RABs_ToBeReleased_RelReqItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_RelReqItem() { set(id_E_RABs_ToBeReleased_RelReqItem); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeReleased_RelReqItem)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_RelReqItem);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_RelReqItem() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeReleased_RelReqItem& select_id_E_RABs_ToBeReleased_RelReqItem() { return set(1); } E_RABs_ToBeReleased_RelReqItem const* get_id_E_RABs_ToBeReleased_RelReqItem() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeReleased_RelReqItem()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeReleased_RelReqItem)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_RelReqItem() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-List-RelReq ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-RelReqItemIEs} } */ struct E_RABs_ToBeReleased_List_RelReq_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeReleased_List_RelReq_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeReleased_List_RelReq : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeReleased-List-RelReq";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeReleased-ModReqdItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_ModReqdItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-ModReqdItem ::= SEQUENCE { e-RAB-ID E-RAB-ID, cause Cause, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-ModReqdItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_ModReqdItem : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqdItem";} using parent_t = asn::sequence<3, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct cause_t : Cause { static constexpr const char* name() {return "cause_t";} using parent_t = Cause; }; cause_t& ref_cause() {return cause;} cause_t const& ref_cause() const {return cause;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(cause); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(cause); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); cause.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; cause_t cause; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-ModReqdItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeReleased-ModReqdItem CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqdItem PRESENCE mandatory }, ... } */ struct E_RABs_ToBeReleased_ModReqdItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(id_E_RABs_ToBeReleased_ModReqdItem); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeReleased_ModReqdItem)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqdItem);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeReleased_ModReqdItem& select_id_E_RABs_ToBeReleased_ModReqdItem() { return set(1); } E_RABs_ToBeReleased_ModReqdItem const* get_id_E_RABs_ToBeReleased_ModReqdItem() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeReleased_ModReqdItem()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeReleased_ModReqdItem)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_ModReqdItem() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-ModReqd ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-ModReqdItemIEs} } */ struct E_RABs_ToBeReleased_ModReqd_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeReleased_ModReqd_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeReleased_ModReqd : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeReleased-ModReqd";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent ::= SEQUENCE { uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<3, 0, true, 3>; struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(uL_GTPtunnelEndpoint); v(dL_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(uL_GTPtunnelEndpoint); v(dL_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { uL_GTPtunnelEndpoint.clear(); dL_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<1, 0, true, 1>; struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(iE_Extensions); }; template void encode(V& v) const { v(iE_Extensions); }; void clear() { iE_Extensions.clear(); }; private: iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBChaConf_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBChaConf-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBChaConf-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBChaConf-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBChaConf_Item : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConf-Item";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_ToBeReleased_SgNBChaConf_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBChaConf-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeReleased-SgNBChaConf-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBChaConf-Item PRESENCE mandatory}, ... } */ struct E_RABs_ToBeReleased_SgNBChaConf_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(id_E_RABs_ToBeReleased_SgNBChaConf_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeReleased_SgNBChaConf_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBChaConf_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeReleased_SgNBChaConf_Item& select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { return set(1); } E_RABs_ToBeReleased_SgNBChaConf_Item const* get_id_E_RABs_ToBeReleased_SgNBChaConf_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeReleased_SgNBChaConf_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeReleased_SgNBChaConf_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBChaConf_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBChaConfList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBChaConf-ItemIEs} } */ struct E_RABs_ToBeReleased_SgNBChaConfList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBChaConfList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeReleased_SgNBChaConfList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBChaConfList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent ::= SEQUENCE { dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<3, 0, true, 3>; struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(dL_GTPtunnelEndpoint); v(uL_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(dL_GTPtunnelEndpoint); v(uL_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { dL_GTPtunnelEndpoint.clear(); uL_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<1, 0, true, 1>; struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(iE_Extensions); }; template void encode(V& v) const { v(iE_Extensions); }; void clear() { iE_Extensions.clear(); }; private: iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBModReq_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBModReq-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBModReq-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReq-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBModReq_Item : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-Item";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_ToBeReleased_SgNBModReq_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBModReq-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeReleased-SgNBModReq-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReq-Item PRESENCE mandatory}, ... } */ struct E_RABs_ToBeReleased_SgNBModReq_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(id_E_RABs_ToBeReleased_SgNBModReq_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeReleased_SgNBModReq_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReq_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeReleased_SgNBModReq_Item& select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { return set(1); } E_RABs_ToBeReleased_SgNBModReq_Item const* get_id_E_RABs_ToBeReleased_SgNBModReq_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeReleased_SgNBModReq_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeReleased_SgNBModReq_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBModReq_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBModReq-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBModReq-ItemIEs} } */ struct E_RABs_ToBeReleased_SgNBModReq_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBModReq_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeReleased_SgNBModReq_List : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReq-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-RLCMode-transferred CRITICALITY ignore EXTENSION RLCMode PRESENCE optional}, ... } */ struct E_RABs_ToBeReleased_SgNBModReqd_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RLCMode_transferred() { set(id_RLCMode_transferred); type=1;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_RLCMode_transferred)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_RLCMode_transferred);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RLCMode_transferred() { set(ignore); type=1;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} RLCMode& select_id_RLCMode_transferred() { return set(1); } RLCMode const* get_id_RLCMode_transferred() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_RLCMode_transferred()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(RLCMode)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RLCMode_transferred() { set(optional); type=1;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBModReqd-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, cause Cause, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBModReqd-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBModReqd_Item : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReqd-Item";} using parent_t = asn::sequence<3, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct cause_t : Cause { static constexpr const char* name() {return "cause_t";} using parent_t = Cause; }; cause_t& ref_cause() {return cause;} cause_t const& ref_cause() const {return cause;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(cause); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(cause); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); cause.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; cause_t cause; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBModReqd-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeReleased-SgNBModReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReqd-Item PRESENCE mandatory }, ... } */ struct E_RABs_ToBeReleased_SgNBModReqd_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(id_E_RABs_ToBeReleased_SgNBModReqd_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeReleased_SgNBModReqd_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReqd_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeReleased_SgNBModReqd_Item& select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { return set(1); } E_RABs_ToBeReleased_SgNBModReqd_Item const* get_id_E_RABs_ToBeReleased_SgNBModReqd_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeReleased_SgNBModReqd_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeReleased_SgNBModReqd_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBModReqd_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBModReqdList ::= SEQUENCE (SIZE (1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBModReqd-ItemIEs} } */ struct E_RABs_ToBeReleased_SgNBModReqdList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBModReqdList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeReleased_SgNBModReqdList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBModReqdList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent ::= SEQUENCE { uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<3, 0, true, 3>; struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(uL_GTPtunnelEndpoint); v(dL_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(uL_GTPtunnelEndpoint); v(dL_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { uL_GTPtunnelEndpoint.clear(); dL_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent ::= SEQUENCE { iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<1, 0, true, 1>; struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(iE_Extensions); }; template void encode(V& v) const { v(iE_Extensions); }; void clear() { iE_Extensions.clear(); }; private: iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBRelConf_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBRelConf-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBRelConf-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelConf-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBRelConf_Item : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConf-Item";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBRelConf-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeReleased-SgNBRelConf-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelConf-Item PRESENCE mandatory}, ... } */ struct E_RABs_ToBeReleased_SgNBRelConf_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(id_E_RABs_ToBeReleased_SgNBRelConf_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeReleased_SgNBRelConf_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelConf_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeReleased_SgNBRelConf_Item& select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { return set(1); } E_RABs_ToBeReleased_SgNBRelConf_Item const* get_id_E_RABs_ToBeReleased_SgNBRelConf_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelConf_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelConf_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBRelConf_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBRelConfList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelConf-ItemIEs} } */ struct E_RABs_ToBeReleased_SgNBRelConfList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelConfList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeReleased_SgNBRelConfList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelConfList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent ::= SEQUENCE { uL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, dL-GTPtunnelEndpoint GTPtunnelEndpoint OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent : asn::sequence<3, 0, true, 3> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent";} using parent_t = asn::sequence<3, 0, true, 3>; struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; uL_GTPtunnelEndpoint_t& set_uL_GTPtunnelEndpoint() { uL_GTPtunnelEndpoint.setpresent(true); return uL_GTPtunnelEndpoint;} uL_GTPtunnelEndpoint_t const* get_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint.is_valid() ? &uL_GTPtunnelEndpoint : nullptr;} struct dL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "dL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; static constexpr bool optional = true; }; dL_GTPtunnelEndpoint_t& set_dL_GTPtunnelEndpoint() { dL_GTPtunnelEndpoint.setpresent(true); return dL_GTPtunnelEndpoint;} dL_GTPtunnelEndpoint_t const* get_dL_GTPtunnelEndpoint() const {return dL_GTPtunnelEndpoint.is_valid() ? &dL_GTPtunnelEndpoint : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(uL_GTPtunnelEndpoint); v(dL_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(uL_GTPtunnelEndpoint); v(dL_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { uL_GTPtunnelEndpoint.clear(); dL_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; dL_GTPtunnelEndpoint_t dL_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresentExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent ::= SEQUENCE { iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresentExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent : asn::sequence<1, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent";} using parent_t = asn::sequence<1, 0, true, 1>; struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(iE_Extensions); }; template void encode(V& v) const { v(iE_Extensions); }; void clear() { iE_Extensions.clear(); }; private: iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBRelReq_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBRelReq-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, en-DC-ResourceConfiguration EN-DC-ResourceConfiguration, resource-configuration CHOICE { sgNBPDCPpresent E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPpresent, sgNBPDCPnotpresent E-RABs-ToBeReleased-SgNBRelReq-Item-SgNBPDCPnotpresent, ... }, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReq-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBRelReq_Item : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReq-Item";} using parent_t = asn::sequence<4, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct en_DC_ResourceConfiguration_t : EN_DC_ResourceConfiguration { static constexpr const char* name() {return "en_DC_ResourceConfiguration_t";} using parent_t = EN_DC_ResourceConfiguration; }; en_DC_ResourceConfiguration_t& ref_en_DC_ResourceConfiguration() {return en_DC_ResourceConfiguration;} en_DC_ResourceConfiguration_t const& ref_en_DC_ResourceConfiguration() const {return en_DC_ResourceConfiguration;} struct resource_configuration_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "resource_configuration_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~resource_configuration_t() {clear();} struct sgNBPDCPpresent_t : E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent { static constexpr const char* name() {return "sgNBPDCPpresent_t";} using parent_t = E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPpresent; }; struct sgNBPDCPnotpresent_t : E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent { static constexpr const char* name() {return "sgNBPDCPnotpresent_t";} using parent_t = E_RABs_ToBeReleased_SgNBRelReq_Item_SgNBPDCPnotpresent; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } sgNBPDCPpresent_t& select_sgNBPDCPpresent() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} sgNBPDCPpresent_t const* get_sgNBPDCPpresent() const { if(get_index() == 1) { return &var.as();} return nullptr; } sgNBPDCPnotpresent_t& select_sgNBPDCPnotpresent() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} sgNBPDCPnotpresent_t const* get_sgNBPDCPnotpresent() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(sgNBPDCPpresent_t)]; char dummy2[sizeof(sgNBPDCPnotpresent_t)]; }; asn::variant var; index_type index {0}; }; resource_configuration_t& ref_resource_configuration() {return resource_configuration;} resource_configuration_t const& ref_resource_configuration() const {return resource_configuration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(en_DC_ResourceConfiguration); v(resource_configuration); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); en_DC_ResourceConfiguration.clear(); resource_configuration.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; en_DC_ResourceConfiguration_t en_DC_ResourceConfiguration; resource_configuration_t resource_configuration; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBRelReq-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeReleased-SgNBRelReq-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReq-Item PRESENCE mandatory}, ... } */ struct E_RABs_ToBeReleased_SgNBRelReq_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(id_E_RABs_ToBeReleased_SgNBRelReq_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeReleased_SgNBRelReq_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReq_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeReleased_SgNBRelReq_Item& select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { return set(1); } E_RABs_ToBeReleased_SgNBRelReq_Item const* get_id_E_RABs_ToBeReleased_SgNBRelReq_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelReq_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelReq_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBRelReq_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBRelReqList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelReq-ItemIEs} } */ struct E_RABs_ToBeReleased_SgNBRelReqList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelReqList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeReleased_SgNBRelReqList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct E_RABs_ToBeReleased_SgNBRelReqd_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBRelReqd-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, rlc-Mode-transferred RLCMode, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeReleased-SgNBRelReqd-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeReleased_SgNBRelReqd_Item : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqd-Item";} using parent_t = asn::sequence<3, 0, true, 1>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct rlc_Mode_transferred_t : RLCMode { static constexpr const char* name() {return "rlc_Mode_transferred_t";} using parent_t = RLCMode; }; rlc_Mode_transferred_t& ref_rlc_Mode_transferred() {return rlc_Mode_transferred;} rlc_Mode_transferred_t const& ref_rlc_Mode_transferred() const {return rlc_Mode_transferred;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(rlc_Mode_transferred); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(rlc_Mode_transferred); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); rlc_Mode_transferred.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; rlc_Mode_transferred_t rlc_Mode_transferred; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeReleased-SgNBRelReqd-Item CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqd-Item PRESENCE mandatory}, ... } */ struct E_RABs_ToBeReleased_SgNBRelReqd_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(id_E_RABs_ToBeReleased_SgNBRelReqd_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeReleased_SgNBRelReqd_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqd_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeReleased_SgNBRelReqd_Item& select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { return set(1); } E_RABs_ToBeReleased_SgNBRelReqd_Item const* get_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeReleased_SgNBRelReqd_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeReleased_SgNBRelReqd_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeReleased-SgNBRelReqdList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeReleased-SgNBRelReqd-ItemIEs} } */ struct E_RABs_ToBeReleased_SgNBRelReqdList_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeReleased_SgNBRelReqdList_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeReleased_SgNBRelReqdList : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeReleased-SgNBRelReqdList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeSetup-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-BearerType CRITICALITY reject EXTENSION BearerType PRESENCE optional}, ... } */ struct E_RABs_ToBeSetup_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_BearerType() { set(id_BearerType); type=1;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_BearerType)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_BearerType);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_BearerType() { set(reject); type=1;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} BearerType& select_id_BearerType() { return set(1); } BearerType const* get_id_BearerType() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_BearerType()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(BearerType)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_BearerType() { set(optional); type=1;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeSetup-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, dL-Forwarding DL-Forwarding OPTIONAL, uL-GTPtunnelEndpoint GTPtunnelEndpoint, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeSetup-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeSetup_Item : asn::sequence<5, 0, true, 2> { static constexpr const char* name() {return "E-RABs-ToBeSetup-Item";} using parent_t = asn::sequence<5, 0, true, 2>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; }; e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} struct dL_Forwarding_t : DL_Forwarding { static constexpr const char* name() {return "dL_Forwarding_t";} using parent_t = DL_Forwarding; static constexpr bool optional = true; }; dL_Forwarding_t& set_dL_Forwarding() { dL_Forwarding.setpresent(true); return dL_Forwarding;} dL_Forwarding_t const* get_dL_Forwarding() const {return dL_Forwarding.is_valid() ? &dL_Forwarding : nullptr;} struct uL_GTPtunnelEndpoint_t : GTPtunnelEndpoint { static constexpr const char* name() {return "uL_GTPtunnelEndpoint_t";} using parent_t = GTPtunnelEndpoint; }; uL_GTPtunnelEndpoint_t& ref_uL_GTPtunnelEndpoint() {return uL_GTPtunnelEndpoint;} uL_GTPtunnelEndpoint_t const& ref_uL_GTPtunnelEndpoint() const {return uL_GTPtunnelEndpoint;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(dL_Forwarding); v(uL_GTPtunnelEndpoint); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(dL_Forwarding); v(uL_GTPtunnelEndpoint); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); e_RAB_Level_QoS_Parameters.clear(); dL_Forwarding.clear(); uL_GTPtunnelEndpoint.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; dL_Forwarding_t dL_Forwarding; uL_GTPtunnelEndpoint_t uL_GTPtunnelEndpoint; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeSetup-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeSetup-Item CRITICALITY ignore TYPE E-RABs-ToBeSetup-Item PRESENCE mandatory }, ... } */ struct E_RABs_ToBeSetup_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeSetup_Item() { set(id_E_RABs_ToBeSetup_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeSetup_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeSetup_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeSetup_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeSetup_Item& select_id_E_RABs_ToBeSetup_Item() { return set(1); } E_RABs_ToBeSetup_Item const* get_id_E_RABs_ToBeSetup_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeSetup_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeSetup_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeSetup_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeSetup-List ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeSetup-ItemIEs} } */ struct E_RABs_ToBeSetup_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeSetup_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeSetup_List : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeSetup-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* E-RABs-ToBeSetupRetrieve-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-uL-GTPtunnelEndpoint CRITICALITY reject EXTENSION GTPtunnelEndpoint PRESENCE mandatory}| { ID id-dL-Forwarding CRITICALITY ignore EXTENSION DL-Forwarding PRESENCE optional }, ... } */ struct E_RABs_ToBeSetupRetrieve_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uL_GTPtunnelEndpoint() { set(id_uL_GTPtunnelEndpoint); type=1;} void select_id_dL_Forwarding() { set(id_dL_Forwarding); type=2;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_uL_GTPtunnelEndpoint)) { type = 1; return true; } else if(equal(id_dL_Forwarding)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_uL_GTPtunnelEndpoint);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_dL_Forwarding);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uL_GTPtunnelEndpoint() { set(reject); type=1;} void select_id_dL_Forwarding() { set(ignore); type=2;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} GTPtunnelEndpoint& select_id_uL_GTPtunnelEndpoint() { return set(1); } GTPtunnelEndpoint const* get_id_uL_GTPtunnelEndpoint() const { return get(1); } DL_Forwarding& select_id_dL_Forwarding() { return set(2); } DL_Forwarding const* get_id_dL_Forwarding() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_uL_GTPtunnelEndpoint()); return true; case 2: v(select_id_dL_Forwarding()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(DL_Forwarding)]; char dummy2[sizeof(GTPtunnelEndpoint)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_uL_GTPtunnelEndpoint() { set(mandatory); type=1;} void select_id_dL_Forwarding() { set(optional); type=2;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeSetupRetrieve-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, e-RAB-Level-QoS-Parameters E-RAB-Level-QoS-Parameters, bearerType BearerType OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABs-ToBeSetupRetrieve-ItemExtIEs} } OPTIONAL, ... } */ struct E_RABs_ToBeSetupRetrieve_Item : asn::sequence<4, 0, true, 2> { static constexpr const char* name() {return "E-RABs-ToBeSetupRetrieve-Item";} using parent_t = asn::sequence<4, 0, true, 2>; struct e_RAB_ID_t : E_RAB_ID { static constexpr const char* name() {return "e_RAB_ID_t";} using parent_t = E_RAB_ID; }; e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;} e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;} struct e_RAB_Level_QoS_Parameters_t : E_RAB_Level_QoS_Parameters { static constexpr const char* name() {return "e_RAB_Level_QoS_Parameters_t";} using parent_t = E_RAB_Level_QoS_Parameters; }; e_RAB_Level_QoS_Parameters_t& ref_e_RAB_Level_QoS_Parameters() {return e_RAB_Level_QoS_Parameters;} e_RAB_Level_QoS_Parameters_t const& ref_e_RAB_Level_QoS_Parameters() const {return e_RAB_Level_QoS_Parameters;} struct bearerType_t : BearerType { static constexpr const char* name() {return "bearerType_t";} using parent_t = BearerType; static constexpr bool optional = true; }; bearerType_t& set_bearerType() { bearerType.setpresent(true); return bearerType;} bearerType_t const* get_bearerType() const {return bearerType.is_valid() ? &bearerType : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(bearerType); v(iE_Extensions); }; template void encode(V& v) const { v(e_RAB_ID); v(e_RAB_Level_QoS_Parameters); v(bearerType); v(iE_Extensions); }; void clear() { e_RAB_ID.clear(); e_RAB_Level_QoS_Parameters.clear(); bearerType.clear(); iE_Extensions.clear(); }; private: e_RAB_ID_t e_RAB_ID; e_RAB_Level_QoS_Parameters_t e_RAB_Level_QoS_Parameters; bearerType_t bearerType; iE_Extensions_t iE_Extensions; }; /* E-RABs-ToBeSetupRetrieve-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-E-RABs-ToBeSetupRetrieve-Item CRITICALITY ignore TYPE E-RABs-ToBeSetupRetrieve-Item PRESENCE mandatory}, ... } */ struct E_RABs_ToBeSetupRetrieve_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(id_E_RABs_ToBeSetupRetrieve_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_E_RABs_ToBeSetupRetrieve_Item)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABs_ToBeSetupRetrieve_Item);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} E_RABs_ToBeSetupRetrieve_Item& select_id_E_RABs_ToBeSetupRetrieve_Item() { return set(1); } E_RABs_ToBeSetupRetrieve_Item const* get_id_E_RABs_ToBeSetupRetrieve_Item() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_E_RABs_ToBeSetupRetrieve_Item()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_ToBeSetupRetrieve_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_E_RABs_ToBeSetupRetrieve_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* E-RABs-ToBeSetup-ListRetrieve ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RABs-ToBeSetupRetrieve-ItemIEs} } */ struct E_RABs_ToBeSetup_ListRetrieve_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "E_RABs_ToBeSetup_ListRetrieve_elm";} using parent_t = ProtocolIE_Single_Container; }; struct E_RABs_ToBeSetup_ListRetrieve : asn::sequenceof { static constexpr const char* name() {return "E-RABs-ToBeSetup-ListRetrieve";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ENB-ENDCConfigUpdateAckIEs X2AP-PROTOCOL-IES ::= { ... } */ struct ENB_ENDCConfigUpdateAckIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* FDD-InfoNeighbourServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct FDD_InfoNeighbourServedNRCell_Information_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* FDD-InfoNeighbourServedNRCell-Information ::= SEQUENCE { ul-NRFreqInfo NRFreqInfo, dl-NRFreqInfo NRFreqInfo, iE-Extensions ProtocolExtensionContainer { {FDD-InfoNeighbourServedNRCell-Information-ExtIEs} } OPTIONAL, ... } */ struct FDD_InfoNeighbourServedNRCell_Information : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "FDD-InfoNeighbourServedNRCell-Information";} using parent_t = asn::sequence<3, 0, true, 1>; struct ul_NRFreqInfo_t : NRFreqInfo { static constexpr const char* name() {return "ul_NRFreqInfo_t";} using parent_t = NRFreqInfo; }; ul_NRFreqInfo_t& ref_ul_NRFreqInfo() {return ul_NRFreqInfo;} ul_NRFreqInfo_t const& ref_ul_NRFreqInfo() const {return ul_NRFreqInfo;} struct dl_NRFreqInfo_t : NRFreqInfo { static constexpr const char* name() {return "dl_NRFreqInfo_t";} using parent_t = NRFreqInfo; }; dl_NRFreqInfo_t& ref_dl_NRFreqInfo() {return dl_NRFreqInfo;} dl_NRFreqInfo_t const& ref_dl_NRFreqInfo() const {return dl_NRFreqInfo;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(ul_NRFreqInfo); v(dl_NRFreqInfo); v(iE_Extensions); }; template void encode(V& v) const { v(ul_NRFreqInfo); v(dl_NRFreqInfo); v(iE_Extensions); }; void clear() { ul_NRFreqInfo.clear(); dl_NRFreqInfo.clear(); iE_Extensions.clear(); }; private: ul_NRFreqInfo_t ul_NRFreqInfo; dl_NRFreqInfo_t dl_NRFreqInfo; iE_Extensions_t iE_Extensions; }; /* TDD-InfoNeighbourServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct TDD_InfoNeighbourServedNRCell_Information_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* TDD-InfoNeighbourServedNRCell-Information ::= SEQUENCE { nRFreqInfo NRFreqInfo, iE-Extensions ProtocolExtensionContainer { {TDD-InfoNeighbourServedNRCell-Information-ExtIEs} } OPTIONAL, ... } */ struct TDD_InfoNeighbourServedNRCell_Information : asn::sequence<2, 0, true, 1> { static constexpr const char* name() {return "TDD-InfoNeighbourServedNRCell-Information";} using parent_t = asn::sequence<2, 0, true, 1>; struct nRFreqInfo_t : NRFreqInfo { static constexpr const char* name() {return "nRFreqInfo_t";} using parent_t = NRFreqInfo; }; nRFreqInfo_t& ref_nRFreqInfo() {return nRFreqInfo;} nRFreqInfo_t const& ref_nRFreqInfo() const {return nRFreqInfo;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(nRFreqInfo); v(iE_Extensions); }; template void encode(V& v) const { v(nRFreqInfo); v(iE_Extensions); }; void clear() { nRFreqInfo.clear(); iE_Extensions.clear(); }; private: nRFreqInfo_t nRFreqInfo; iE_Extensions_t iE_Extensions; }; /* NRNeighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct NRNeighbour_Information_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* NRNeighbour-Information ::= SEQUENCE (SIZE (1.. maxofNRNeighbours))OF SEQUENCE { nrpCI NRPCI, nrCellID NRCGI, fiveGS-TAC FiveGS-TAC OPTIONAL, configured-TAC TAC OPTIONAL, measurementTimingConfiguration OCTET STRING, nRNeighbourModeInfo CHOICE { fdd FDD-InfoNeighbourServedNRCell-Information, tdd TDD-InfoNeighbourServedNRCell-Information, ... }, iE-Extensions ProtocolExtensionContainer { {NRNeighbour-Information-ExtIEs} } OPTIONAL, ... } */ struct NRNeighbour_Information_elm : asn::sequence<7, 0, true, 3> { static constexpr const char* name() {return "NRNeighbour_Information_elm";} using parent_t = asn::sequence<7, 0, true, 3>; struct nrpCI_t : NRPCI { static constexpr const char* name() {return "nrpCI_t";} using parent_t = NRPCI; }; nrpCI_t& ref_nrpCI() {return nrpCI;} nrpCI_t const& ref_nrpCI() const {return nrpCI;} struct nrCellID_t : NRCGI { static constexpr const char* name() {return "nrCellID_t";} using parent_t = NRCGI; }; nrCellID_t& ref_nrCellID() {return nrCellID;} nrCellID_t const& ref_nrCellID() const {return nrCellID;} struct fiveGS_TAC_t : FiveGS_TAC { static constexpr const char* name() {return "fiveGS_TAC_t";} using parent_t = FiveGS_TAC; static constexpr bool optional = true; }; fiveGS_TAC_t& set_fiveGS_TAC() { fiveGS_TAC.setpresent(true); return fiveGS_TAC;} fiveGS_TAC_t const* get_fiveGS_TAC() const {return fiveGS_TAC.is_valid() ? &fiveGS_TAC : nullptr;} struct configured_TAC_t : TAC { static constexpr const char* name() {return "configured_TAC_t";} using parent_t = TAC; static constexpr bool optional = true; }; configured_TAC_t& set_configured_TAC() { configured_TAC.setpresent(true); return configured_TAC;} configured_TAC_t const* get_configured_TAC() const {return configured_TAC.is_valid() ? &configured_TAC : nullptr;} struct measurementTimingConfiguration_t : asn::ostring<> { static constexpr const char* name() {return "measurementTimingConfiguration_t";} using parent_t = asn::ostring<>; }; measurementTimingConfiguration_t& ref_measurementTimingConfiguration() {return measurementTimingConfiguration;} measurementTimingConfiguration_t const& ref_measurementTimingConfiguration() const {return measurementTimingConfiguration;} struct nRNeighbourModeInfo_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "nRNeighbourModeInfo_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~nRNeighbourModeInfo_t() {clear();} struct fdd_t : FDD_InfoNeighbourServedNRCell_Information { static constexpr const char* name() {return "fdd_t";} using parent_t = FDD_InfoNeighbourServedNRCell_Information; }; struct tdd_t : TDD_InfoNeighbourServedNRCell_Information { static constexpr const char* name() {return "tdd_t";} using parent_t = TDD_InfoNeighbourServedNRCell_Information; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(fdd_t)]; char dummy2[sizeof(tdd_t)]; }; asn::variant var; index_type index {0}; }; nRNeighbourModeInfo_t& ref_nRNeighbourModeInfo() {return nRNeighbourModeInfo;} nRNeighbourModeInfo_t const& ref_nRNeighbourModeInfo() const {return nRNeighbourModeInfo;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(nrpCI); v(nrCellID); v(fiveGS_TAC); v(configured_TAC); v(measurementTimingConfiguration); v(nRNeighbourModeInfo); v(iE_Extensions); }; template void encode(V& v) const { v(nrpCI); v(nrCellID); v(fiveGS_TAC); v(configured_TAC); v(measurementTimingConfiguration); v(nRNeighbourModeInfo); v(iE_Extensions); }; void clear() { nrpCI.clear(); nrCellID.clear(); fiveGS_TAC.clear(); configured_TAC.clear(); measurementTimingConfiguration.clear(); nRNeighbourModeInfo.clear(); iE_Extensions.clear(); }; private: nrpCI_t nrpCI; nrCellID_t nrCellID; fiveGS_TAC_t fiveGS_TAC; configured_TAC_t configured_TAC; measurementTimingConfiguration_t measurementTimingConfiguration; nRNeighbourModeInfo_t nRNeighbourModeInfo; iE_Extensions_t iE_Extensions; }; struct NRNeighbour_Information : asn::sequenceof { static constexpr const char* name() {return "NRNeighbour-Information";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ServedEUTRAcellsENDCX2Management-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct ServedEUTRAcellsENDCX2Management_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ServedEUTRAcellsENDCX2ManagementList ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { servedEUTRACellInfo ServedCell-Information, nrNeighbourInfo NRNeighbour-Information OPTIONAL, iE-Extensions ProtocolExtensionContainer { {ServedEUTRAcellsENDCX2Management-ExtIEs} } OPTIONAL, ... } */ struct ServedEUTRAcellsENDCX2ManagementList_elm : asn::sequence<3, 0, true, 2> { static constexpr const char* name() {return "ServedEUTRAcellsENDCX2ManagementList_elm";} using parent_t = asn::sequence<3, 0, true, 2>; struct servedEUTRACellInfo_t : ServedCell_Information { static constexpr const char* name() {return "servedEUTRACellInfo_t";} using parent_t = ServedCell_Information; }; servedEUTRACellInfo_t& ref_servedEUTRACellInfo() {return servedEUTRACellInfo;} servedEUTRACellInfo_t const& ref_servedEUTRACellInfo() const {return servedEUTRACellInfo;} struct nrNeighbourInfo_t : NRNeighbour_Information { static constexpr const char* name() {return "nrNeighbourInfo_t";} using parent_t = NRNeighbour_Information; static constexpr bool optional = true; }; nrNeighbourInfo_t& set_nrNeighbourInfo() { nrNeighbourInfo.setpresent(true); return nrNeighbourInfo;} nrNeighbourInfo_t const* get_nrNeighbourInfo() const {return nrNeighbourInfo.is_valid() ? &nrNeighbourInfo : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(servedEUTRACellInfo); v(nrNeighbourInfo); v(iE_Extensions); }; template void encode(V& v) const { v(servedEUTRACellInfo); v(nrNeighbourInfo); v(iE_Extensions); }; void clear() { servedEUTRACellInfo.clear(); nrNeighbourInfo.clear(); iE_Extensions.clear(); }; private: servedEUTRACellInfo_t servedEUTRACellInfo; nrNeighbourInfo_t nrNeighbourInfo; iE_Extensions_t iE_Extensions; }; struct ServedEUTRAcellsENDCX2ManagementList : asn::sequenceof { static constexpr const char* name() {return "ServedEUTRAcellsENDCX2ManagementList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct ServedEUTRAcellsToModifyListENDCConfUpd_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ServedEUTRAcellsToModifyListENDCConfUpd ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { old-ECGI ECGI, servedEUTRACellInfo ServedCell-Information, nrNeighbourInfo NRNeighbour-Information OPTIONAL, iE-Extensions ProtocolExtensionContainer { {ServedEUTRAcellsToModifyListENDCConfUpd-ExtIEs} } OPTIONAL, ... } */ struct ServedEUTRAcellsToModifyListENDCConfUpd_elm : asn::sequence<4, 0, true, 2> { static constexpr const char* name() {return "ServedEUTRAcellsToModifyListENDCConfUpd_elm";} using parent_t = asn::sequence<4, 0, true, 2>; struct old_ECGI_t : ECGI { static constexpr const char* name() {return "old_ECGI_t";} using parent_t = ECGI; }; old_ECGI_t& ref_old_ECGI() {return old_ECGI;} old_ECGI_t const& ref_old_ECGI() const {return old_ECGI;} struct servedEUTRACellInfo_t : ServedCell_Information { static constexpr const char* name() {return "servedEUTRACellInfo_t";} using parent_t = ServedCell_Information; }; servedEUTRACellInfo_t& ref_servedEUTRACellInfo() {return servedEUTRACellInfo;} servedEUTRACellInfo_t const& ref_servedEUTRACellInfo() const {return servedEUTRACellInfo;} struct nrNeighbourInfo_t : NRNeighbour_Information { static constexpr const char* name() {return "nrNeighbourInfo_t";} using parent_t = NRNeighbour_Information; static constexpr bool optional = true; }; nrNeighbourInfo_t& set_nrNeighbourInfo() { nrNeighbourInfo.setpresent(true); return nrNeighbourInfo;} nrNeighbourInfo_t const* get_nrNeighbourInfo() const {return nrNeighbourInfo.is_valid() ? &nrNeighbourInfo : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(old_ECGI); v(servedEUTRACellInfo); v(nrNeighbourInfo); v(iE_Extensions); }; template void encode(V& v) const { v(old_ECGI); v(servedEUTRACellInfo); v(nrNeighbourInfo); v(iE_Extensions); }; void clear() { old_ECGI.clear(); servedEUTRACellInfo.clear(); nrNeighbourInfo.clear(); iE_Extensions.clear(); }; private: old_ECGI_t old_ECGI; servedEUTRACellInfo_t servedEUTRACellInfo; nrNeighbourInfo_t nrNeighbourInfo; iE_Extensions_t iE_Extensions; }; struct ServedEUTRAcellsToModifyListENDCConfUpd : asn::sequenceof { static constexpr const char* name() {return "ServedEUTRAcellsToModifyListENDCConfUpd";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ServedEUTRAcellsToDeleteListENDCConfUpd ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI */ struct ServedEUTRAcellsToDeleteListENDCConfUpd_elm : ECGI { static constexpr const char* name() {return "ServedEUTRAcellsToDeleteListENDCConfUpd_elm";} using parent_t = ECGI; }; struct ServedEUTRAcellsToDeleteListENDCConfUpd : asn::sequenceof { static constexpr const char* name() {return "ServedEUTRAcellsToDeleteListENDCConfUpd";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ENB-ENDCConfigUpdateIEs X2AP-PROTOCOL-IES ::= { { ID id-CellAssistanceInformation CRITICALITY reject TYPE CellAssistanceInformation PRESENCE optional }| { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE optional }| { ID id-ServedEUTRAcellsToModifyListENDCConfUpd CRITICALITY reject TYPE ServedEUTRAcellsToModifyListENDCConfUpd PRESENCE optional }| { ID id-ServedEUTRAcellsToDeleteListENDCConfUpd CRITICALITY reject TYPE ServedEUTRAcellsToDeleteListENDCConfUpd PRESENCE optional }, ... } */ struct ENB_ENDCConfigUpdateIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_CellAssistanceInformation() { set(id_CellAssistanceInformation); type=1;} void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(id_ServedEUTRAcellsToModifyListENDCConfUpd); type=3;} void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(id_ServedEUTRAcellsToDeleteListENDCConfUpd); type=4;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_CellAssistanceInformation)) { type = 1; return true; } else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } else if(equal(id_ServedEUTRAcellsToModifyListENDCConfUpd)) { type = 3; return true; } else if(equal(id_ServedEUTRAcellsToDeleteListENDCConfUpd)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_CellAssistanceInformation);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsToModifyListENDCConfUpd);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsToDeleteListENDCConfUpd);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_CellAssistanceInformation() { set(reject); type=1;} void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(reject); type=3;} void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(reject); type=4;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} CellAssistanceInformation& select_id_CellAssistanceInformation() { return set(1); } CellAssistanceInformation const* get_id_CellAssistanceInformation() const { return get(1); } ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } ServedEUTRAcellsToModifyListENDCConfUpd& select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { return set(3); } ServedEUTRAcellsToModifyListENDCConfUpd const* get_id_ServedEUTRAcellsToModifyListENDCConfUpd() const { return get(3); } ServedEUTRAcellsToDeleteListENDCConfUpd& select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { return set(4); } ServedEUTRAcellsToDeleteListENDCConfUpd const* get_id_ServedEUTRAcellsToDeleteListENDCConfUpd() const { return get(4); } bool is_unknown() const { return type == 5; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_CellAssistanceInformation()); return true; case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; case 3: v(select_id_ServedEUTRAcellsToModifyListENDCConfUpd()); return true; case 4: v(select_id_ServedEUTRAcellsToDeleteListENDCConfUpd()); return true; case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CellAssistanceInformation)]; char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; char dummy3[sizeof(ServedEUTRAcellsToDeleteListENDCConfUpd)]; char dummy4[sizeof(ServedEUTRAcellsToModifyListENDCConfUpd)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_CellAssistanceInformation() { set(optional); type=1;} void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(optional); type=2;} void select_id_ServedEUTRAcellsToModifyListENDCConfUpd() { set(optional); type=3;} void select_id_ServedEUTRAcellsToDeleteListENDCConfUpd() { set(optional); type=4;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENB-ENDCX2RemovalReqAckIEs X2AP-PROTOCOL-IES ::= { { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, ... } */ struct ENB_ENDCX2RemovalReqAckIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_GlobalENB_ID)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_GlobalENB_ID()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GlobalENB_ID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENB-ENDCX2RemovalReqIEs X2AP-PROTOCOL-IES ::= { { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, ... } */ struct ENB_ENDCX2RemovalReqIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_GlobalENB_ID)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_GlobalENB_ID()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GlobalENB_ID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENB-ENDCX2SetupReqAckIEs X2AP-PROTOCOL-IES ::= { { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE mandatory}, ... } */ struct ENB_ENDCX2SetupReqAckIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_GlobalENB_ID)) { type = 1; return true; } else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(reject); type=1;} void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_GlobalENB_ID()); return true; case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GlobalENB_ID)]; char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(mandatory); type=1;} void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(mandatory); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENB-ENDCX2SetupReqIEs X2AP-PROTOCOL-IES ::= { { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| { ID id-ServedEUTRAcellsENDCX2ManagementList CRITICALITY reject TYPE ServedEUTRAcellsENDCX2ManagementList PRESENCE mandatory}, ... } */ struct ENB_ENDCX2SetupReqIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(id_ServedEUTRAcellsENDCX2ManagementList); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_GlobalENB_ID)) { type = 1; return true; } else if(equal(id_ServedEUTRAcellsENDCX2ManagementList)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedEUTRAcellsENDCX2ManagementList);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(reject); type=1;} void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(reject); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } ServedEUTRAcellsENDCX2ManagementList& select_id_ServedEUTRAcellsENDCX2ManagementList() { return set(2); } ServedEUTRAcellsENDCX2ManagementList const* get_id_ServedEUTRAcellsENDCX2ManagementList() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_GlobalENB_ID()); return true; case 2: v(select_id_ServedEUTRAcellsENDCX2ManagementList()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GlobalENB_ID)]; char dummy2[sizeof(ServedEUTRAcellsENDCX2ManagementList)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(mandatory); type=1;} void select_id_ServedEUTRAcellsENDCX2ManagementList() { set(mandatory); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ListofEUTRACellsinEUTRACoordinationResp ::= SEQUENCE (SIZE (0..maxCellineNB)) OF ECGI */ struct ListofEUTRACellsinEUTRACoordinationResp_elm : ECGI { static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationResp_elm";} using parent_t = ECGI; }; struct ListofEUTRACellsinEUTRACoordinationResp : asn::sequenceof { static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationResp";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ENB-EUTRA-NRCellResourceCoordinationReqAckIEs X2AP-PROTOCOL-IES ::= { { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| { ID id-ListofEUTRACellsinEUTRACoordinationResp CRITICALITY reject TYPE ListofEUTRACellsinEUTRACoordinationResp PRESENCE mandatory}, ... } */ struct ENB_EUTRA_NRCellResourceCoordinationReqAckIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(id_ListofEUTRACellsinEUTRACoordinationResp); type=3;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } else if(equal(id_ListofEUTRACellsinEUTRACoordinationResp)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinEUTRACoordinationResp);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_DataTrafficResourceIndication() { set(reject); type=1;} void select_id_SpectrumSharingGroupID() { set(reject); type=2;} void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(reject); type=3;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } ListofEUTRACellsinEUTRACoordinationResp& select_id_ListofEUTRACellsinEUTRACoordinationResp() { return set(3); } ListofEUTRACellsinEUTRACoordinationResp const* get_id_ListofEUTRACellsinEUTRACoordinationResp() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_DataTrafficResourceIndication()); return true; case 2: v(select_id_SpectrumSharingGroupID()); return true; case 3: v(select_id_ListofEUTRACellsinEUTRACoordinationResp()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(DataTrafficResourceIndication)]; char dummy2[sizeof(ListofEUTRACellsinEUTRACoordinationResp)]; char dummy3[sizeof(SpectrumSharingGroupID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} void select_id_ListofEUTRACellsinEUTRACoordinationResp() { set(mandatory); type=3;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ListofEUTRACellsinEUTRACoordinationReq ::= SEQUENCE (SIZE (0..maxCellineNB)) OF ECGI */ struct ListofEUTRACellsinEUTRACoordinationReq_elm : ECGI { static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationReq_elm";} using parent_t = ECGI; }; struct ListofEUTRACellsinEUTRACoordinationReq : asn::sequenceof { static constexpr const char* name() {return "ListofEUTRACellsinEUTRACoordinationReq";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ENB-EUTRA-NRCellResourceCoordinationReqIEs X2AP-PROTOCOL-IES ::= { { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| { ID id-ListofEUTRACellsinEUTRACoordinationReq CRITICALITY reject TYPE ListofEUTRACellsinEUTRACoordinationReq PRESENCE mandatory}, ... } */ struct ENB_EUTRA_NRCellResourceCoordinationReqIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(id_ListofEUTRACellsinEUTRACoordinationReq); type=3;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } else if(equal(id_ListofEUTRACellsinEUTRACoordinationReq)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinEUTRACoordinationReq);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_DataTrafficResourceIndication() { set(reject); type=1;} void select_id_SpectrumSharingGroupID() { set(reject); type=2;} void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(reject); type=3;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } ListofEUTRACellsinEUTRACoordinationReq& select_id_ListofEUTRACellsinEUTRACoordinationReq() { return set(3); } ListofEUTRACellsinEUTRACoordinationReq const* get_id_ListofEUTRACellsinEUTRACoordinationReq() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_DataTrafficResourceIndication()); return true; case 2: v(select_id_SpectrumSharingGroupID()); return true; case 3: v(select_id_ListofEUTRACellsinEUTRACoordinationReq()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(DataTrafficResourceIndication)]; char dummy2[sizeof(ListofEUTRACellsinEUTRACoordinationReq)]; char dummy3[sizeof(SpectrumSharingGroupID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} void select_id_ListofEUTRACellsinEUTRACoordinationReq() { set(mandatory); type=3;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ServedCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-DeactivationIndication CRITICALITY ignore EXTENSION DeactivationIndication PRESENCE optional }, ... } */ struct ServedCellsToModify_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_DeactivationIndication() { set(id_DeactivationIndication); type=1;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_DeactivationIndication)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_DeactivationIndication);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_DeactivationIndication() { set(ignore); type=1;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} DeactivationIndication& select_id_DeactivationIndication() { return set(1); } DeactivationIndication const* get_id_DeactivationIndication() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_DeactivationIndication()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(DeactivationIndication)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_DeactivationIndication() { set(optional); type=1;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ServedCellsToModify-Item::= SEQUENCE { old-ecgi ECGI, servedCellInfo ServedCell-Information, neighbour-Info Neighbour-Information OPTIONAL, iE-Extensions ProtocolExtensionContainer { {ServedCellsToModify-Item-ExtIEs} } OPTIONAL, ... } */ struct ServedCellsToModify_Item : asn::sequence<4, 0, true, 2> { static constexpr const char* name() {return "ServedCellsToModify-Item";} using parent_t = asn::sequence<4, 0, true, 2>; struct old_ecgi_t : ECGI { static constexpr const char* name() {return "old_ecgi_t";} using parent_t = ECGI; }; old_ecgi_t& ref_old_ecgi() {return old_ecgi;} old_ecgi_t const& ref_old_ecgi() const {return old_ecgi;} struct servedCellInfo_t : ServedCell_Information { static constexpr const char* name() {return "servedCellInfo_t";} using parent_t = ServedCell_Information; }; servedCellInfo_t& ref_servedCellInfo() {return servedCellInfo;} servedCellInfo_t const& ref_servedCellInfo() const {return servedCellInfo;} struct neighbour_Info_t : Neighbour_Information { static constexpr const char* name() {return "neighbour_Info_t";} using parent_t = Neighbour_Information; static constexpr bool optional = true; }; neighbour_Info_t& set_neighbour_Info() { neighbour_Info.setpresent(true); return neighbour_Info;} neighbour_Info_t const* get_neighbour_Info() const {return neighbour_Info.is_valid() ? &neighbour_Info : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(old_ecgi); v(servedCellInfo); v(neighbour_Info); v(iE_Extensions); }; template void encode(V& v) const { v(old_ecgi); v(servedCellInfo); v(neighbour_Info); v(iE_Extensions); }; void clear() { old_ecgi.clear(); servedCellInfo.clear(); neighbour_Info.clear(); iE_Extensions.clear(); }; private: old_ecgi_t old_ecgi; servedCellInfo_t servedCellInfo; neighbour_Info_t neighbour_Info; iE_Extensions_t iE_Extensions; }; /* ServedCellsToModify::= SEQUENCE (SIZE (1..maxCellineNB)) OF ServedCellsToModify-Item */ struct ServedCellsToModify_elm : ServedCellsToModify_Item { static constexpr const char* name() {return "ServedCellsToModify_elm";} using parent_t = ServedCellsToModify_Item; }; struct ServedCellsToModify : asn::sequenceof { static constexpr const char* name() {return "ServedCellsToModify";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* Old-ECGIs::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI */ struct Old_ECGIs_elm : ECGI { static constexpr const char* name() {return "Old_ECGIs_elm";} using parent_t = ECGI; }; struct Old_ECGIs : asn::sequenceof { static constexpr const char* name() {return "Old-ECGIs";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ENBConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { { ID id-ServedCellsToAdd CRITICALITY reject TYPE ServedCells PRESENCE optional}| { ID id-ServedCellsToModify CRITICALITY reject TYPE ServedCellsToModify PRESENCE optional}| { ID id-ServedCellsToDelete CRITICALITY reject TYPE Old-ECGIs PRESENCE optional}| { ID id-GUGroupIDToAddList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| { ID id-GUGroupIDToDeleteList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| { ID id-CoverageModificationList CRITICALITY reject TYPE CoverageModificationList PRESENCE optional}, ... } */ struct ENBConfigurationUpdate_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_ServedCellsToAdd() { set(id_ServedCellsToAdd); type=1;} void select_id_ServedCellsToModify() { set(id_ServedCellsToModify); type=2;} void select_id_ServedCellsToDelete() { set(id_ServedCellsToDelete); type=3;} void select_id_GUGroupIDToAddList() { set(id_GUGroupIDToAddList); type=4;} void select_id_GUGroupIDToDeleteList() { set(id_GUGroupIDToDeleteList); type=5;} void select_id_CoverageModificationList() { set(id_CoverageModificationList); type=6;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ServedCellsToAdd)) { type = 1; return true; } else if(equal(id_ServedCellsToModify)) { type = 2; return true; } else if(equal(id_ServedCellsToDelete)) { type = 3; return true; } else if(equal(id_GUGroupIDToAddList)) { type = 4; return true; } else if(equal(id_GUGroupIDToDeleteList)) { type = 5; return true; } else if(equal(id_CoverageModificationList)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedCellsToAdd);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCellsToModify);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedCellsToDelete);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_GUGroupIDToAddList);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_GUGroupIDToDeleteList);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_CoverageModificationList);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_ServedCellsToAdd() { set(reject); type=1;} void select_id_ServedCellsToModify() { set(reject); type=2;} void select_id_ServedCellsToDelete() { set(reject); type=3;} void select_id_GUGroupIDToAddList() { set(reject); type=4;} void select_id_GUGroupIDToDeleteList() { set(reject); type=5;} void select_id_CoverageModificationList() { set(reject); type=6;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else if(equal(reject)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} ServedCells& select_id_ServedCellsToAdd() { return set(1); } ServedCells const* get_id_ServedCellsToAdd() const { return get(1); } ServedCellsToModify& select_id_ServedCellsToModify() { return set(2); } ServedCellsToModify const* get_id_ServedCellsToModify() const { return get(2); } Old_ECGIs& select_id_ServedCellsToDelete() { return set(3); } Old_ECGIs const* get_id_ServedCellsToDelete() const { return get(3); } GUGroupIDList& select_id_GUGroupIDToAddList() { return set(4); } GUGroupIDList const* get_id_GUGroupIDToAddList() const { return get(4); } GUGroupIDList& select_id_GUGroupIDToDeleteList() { return set(5); } GUGroupIDList const* get_id_GUGroupIDToDeleteList() const { return get(5); } CoverageModificationList& select_id_CoverageModificationList() { return set(6); } CoverageModificationList const* get_id_CoverageModificationList() const { return get(6); } bool is_unknown() const { return type == 7; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ServedCellsToAdd()); return true; case 2: v(select_id_ServedCellsToModify()); return true; case 3: v(select_id_ServedCellsToDelete()); return true; case 4: v(select_id_GUGroupIDToAddList()); return true; case 5: v(select_id_GUGroupIDToDeleteList()); return true; case 6: v(select_id_CoverageModificationList()); return true; case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CoverageModificationList)]; char dummy2[sizeof(GUGroupIDList)]; char dummy3[sizeof(Old_ECGIs)]; char dummy4[sizeof(ServedCells)]; char dummy5[sizeof(ServedCellsToModify)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_ServedCellsToAdd() { set(optional); type=1;} void select_id_ServedCellsToModify() { set(optional); type=2;} void select_id_ServedCellsToDelete() { set(optional); type=3;} void select_id_GUGroupIDToAddList() { set(optional); type=4;} void select_id_GUGroupIDToDeleteList() { set(optional); type=5;} void select_id_CoverageModificationList() { set(optional); type=6;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENBConfigurationUpdate ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENBConfigurationUpdate-IEs}}, ... } */ struct ENBConfigurationUpdate : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENBConfigurationUpdate";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ENBConfigurationUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, ... } */ struct ENBConfigurationUpdateAcknowledge_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_CriticalityDiagnostics)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_CriticalityDiagnostics() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(1); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_CriticalityDiagnostics()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_CriticalityDiagnostics() { set(optional); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENBConfigurationUpdateAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENBConfigurationUpdateAcknowledge-IEs}}, ... } */ struct ENBConfigurationUpdateAcknowledge : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENBConfigurationUpdateAcknowledge";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ENBConfigurationUpdateFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, ... } */ struct ENBConfigurationUpdateFailure_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_Cause() { set(id_Cause); type=1;} void select_id_TimeToWait() { set(id_TimeToWait); type=2;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Cause)) { type = 1; return true; } else if(equal(id_TimeToWait)) { type = 2; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_Cause() { set(ignore); type=1;} void select_id_TimeToWait() { set(ignore); type=2;} void select_id_CriticalityDiagnostics() { set(ignore); type=3;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} Cause& select_id_Cause() { return set(1); } Cause const* get_id_Cause() const { return get(1); } TimeToWait& select_id_TimeToWait() { return set(2); } TimeToWait const* get_id_TimeToWait() const { return get(2); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Cause()); return true; case 2: v(select_id_TimeToWait()); return true; case 3: v(select_id_CriticalityDiagnostics()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(TimeToWait)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_Cause() { set(mandatory); type=1;} void select_id_TimeToWait() { set(optional); type=2;} void select_id_CriticalityDiagnostics() { set(optional); type=3;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENBConfigurationUpdateFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENBConfigurationUpdateFailure-IEs}}, ... } */ struct ENBConfigurationUpdateFailure : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENBConfigurationUpdateFailure";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ENDCCellActivationFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } */ struct ENDCCellActivationFailure_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ActivationID() { set(id_ActivationID); type=1;} void select_id_Cause() { set(id_Cause); type=2;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ActivationID)) { type = 1; return true; } else if(equal(id_Cause)) { type = 2; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivationID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ActivationID() { set(reject); type=1;} void select_id_Cause() { set(ignore); type=2;} void select_id_CriticalityDiagnostics() { set(ignore); type=3;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} ActivationID& select_id_ActivationID() { return set(1); } ActivationID const* get_id_ActivationID() const { return get(1); } Cause& select_id_Cause() { return set(2); } Cause const* get_id_Cause() const { return get(2); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ActivationID()); return true; case 2: v(select_id_Cause()); return true; case 3: v(select_id_CriticalityDiagnostics()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ActivationID)]; char dummy2[sizeof(Cause)]; char dummy3[sizeof(CriticalityDiagnostics)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ActivationID() { set(mandatory); type=1;} void select_id_Cause() { set(mandatory); type=2;} void select_id_CriticalityDiagnostics() { set(optional); type=3;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCCellActivationFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCCellActivationFailure-IEs}}, ... } */ struct ENDCCellActivationFailure : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCCellActivationFailure";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ServedNRCellsToActivate-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct ServedNRCellsToActivate_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ServedNRCellsToActivate-Item::= SEQUENCE { nrCellID NRCGI, iE-Extensions ProtocolExtensionContainer { {ServedNRCellsToActivate-Item-ExtIEs} } OPTIONAL, ... } */ struct ServedNRCellsToActivate_Item : asn::sequence<2, 0, true, 1> { static constexpr const char* name() {return "ServedNRCellsToActivate-Item";} using parent_t = asn::sequence<2, 0, true, 1>; struct nrCellID_t : NRCGI { static constexpr const char* name() {return "nrCellID_t";} using parent_t = NRCGI; }; nrCellID_t& ref_nrCellID() {return nrCellID;} nrCellID_t const& ref_nrCellID() const {return nrCellID;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(nrCellID); v(iE_Extensions); }; template void encode(V& v) const { v(nrCellID); v(iE_Extensions); }; void clear() { nrCellID.clear(); iE_Extensions.clear(); }; private: nrCellID_t nrCellID; iE_Extensions_t iE_Extensions; }; /* ServedNRCellsToActivate::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF ServedNRCellsToActivate-Item */ struct ServedNRCellsToActivate_elm : ServedNRCellsToActivate_Item { static constexpr const char* name() {return "ServedNRCellsToActivate_elm";} using parent_t = ServedNRCellsToActivate_Item; }; struct ServedNRCellsToActivate : asn::sequenceof { static constexpr const char* name() {return "ServedNRCellsToActivate";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ENDCCellActivationRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-ServedNRCellsToActivate CRITICALITY reject TYPE ServedNRCellsToActivate PRESENCE mandatory}| { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory}, ... } */ struct ENDCCellActivationRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_ServedNRCellsToActivate() { set(id_ServedNRCellsToActivate); type=1;} void select_id_ActivationID() { set(id_ActivationID); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ServedNRCellsToActivate)) { type = 1; return true; } else if(equal(id_ActivationID)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRCellsToActivate);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ActivationID);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_ServedNRCellsToActivate() { set(reject); type=1;} void select_id_ActivationID() { set(reject); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} ServedNRCellsToActivate& select_id_ServedNRCellsToActivate() { return set(1); } ServedNRCellsToActivate const* get_id_ServedNRCellsToActivate() const { return get(1); } ActivationID& select_id_ActivationID() { return set(2); } ActivationID const* get_id_ActivationID() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ServedNRCellsToActivate()); return true; case 2: v(select_id_ActivationID()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ActivationID)]; char dummy2[sizeof(ServedNRCellsToActivate)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_ServedNRCellsToActivate() { set(mandatory); type=1;} void select_id_ActivationID() { set(mandatory); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCCellActivationRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCCellActivationRequest-IEs}}, ... } */ struct ENDCCellActivationRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCCellActivationRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ENDCCellActivationResponse-IEs X2AP-PROTOCOL-IES ::= { { ID id-ActivatedNRCellList CRITICALITY ignore TYPE ActivatedNRCellList PRESENCE mandatory}| { ID id-ActivationID CRITICALITY reject TYPE ActivationID PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, ... } */ struct ENDCCellActivationResponse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ActivatedNRCellList() { set(id_ActivatedNRCellList); type=1;} void select_id_ActivationID() { set(id_ActivationID); type=2;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ActivatedNRCellList)) { type = 1; return true; } else if(equal(id_ActivationID)) { type = 2; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ActivatedNRCellList);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ActivationID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ActivatedNRCellList() { set(ignore); type=1;} void select_id_ActivationID() { set(reject); type=2;} void select_id_CriticalityDiagnostics() { set(ignore); type=3;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} ActivatedNRCellList& select_id_ActivatedNRCellList() { return set(1); } ActivatedNRCellList const* get_id_ActivatedNRCellList() const { return get(1); } ActivationID& select_id_ActivationID() { return set(2); } ActivationID const* get_id_ActivationID() const { return get(2); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ActivatedNRCellList()); return true; case 2: v(select_id_ActivationID()); return true; case 3: v(select_id_CriticalityDiagnostics()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ActivatedNRCellList)]; char dummy2[sizeof(ActivationID)]; char dummy3[sizeof(CriticalityDiagnostics)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ActivatedNRCellList() { set(mandatory); type=1;} void select_id_ActivationID() { set(mandatory); type=2;} void select_id_CriticalityDiagnostics() { set(optional); type=3;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCCellActivationResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCCellActivationResponse-IEs}}, ... } */ struct ENDCCellActivationResponse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCCellActivationResponse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* FDD-InfoServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct FDD_InfoServedNRCell_Information_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* FDD-InfoServedNRCell-Information ::= SEQUENCE { ul-NRFreqInfo NRFreqInfo, dl-NRFreqInfo NRFreqInfo, ul-NR-TxBW NR-TxBW, dl-NR-TxBW NR-TxBW, iE-Extensions ProtocolExtensionContainer { {FDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, ... } */ struct FDD_InfoServedNRCell_Information : asn::sequence<5, 0, true, 1> { static constexpr const char* name() {return "FDD-InfoServedNRCell-Information";} using parent_t = asn::sequence<5, 0, true, 1>; struct ul_NRFreqInfo_t : NRFreqInfo { static constexpr const char* name() {return "ul_NRFreqInfo_t";} using parent_t = NRFreqInfo; }; ul_NRFreqInfo_t& ref_ul_NRFreqInfo() {return ul_NRFreqInfo;} ul_NRFreqInfo_t const& ref_ul_NRFreqInfo() const {return ul_NRFreqInfo;} struct dl_NRFreqInfo_t : NRFreqInfo { static constexpr const char* name() {return "dl_NRFreqInfo_t";} using parent_t = NRFreqInfo; }; dl_NRFreqInfo_t& ref_dl_NRFreqInfo() {return dl_NRFreqInfo;} dl_NRFreqInfo_t const& ref_dl_NRFreqInfo() const {return dl_NRFreqInfo;} struct ul_NR_TxBW_t : NR_TxBW { static constexpr const char* name() {return "ul_NR_TxBW_t";} using parent_t = NR_TxBW; }; ul_NR_TxBW_t& ref_ul_NR_TxBW() {return ul_NR_TxBW;} ul_NR_TxBW_t const& ref_ul_NR_TxBW() const {return ul_NR_TxBW;} struct dl_NR_TxBW_t : NR_TxBW { static constexpr const char* name() {return "dl_NR_TxBW_t";} using parent_t = NR_TxBW; }; dl_NR_TxBW_t& ref_dl_NR_TxBW() {return dl_NR_TxBW;} dl_NR_TxBW_t const& ref_dl_NR_TxBW() const {return dl_NR_TxBW;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(ul_NRFreqInfo); v(dl_NRFreqInfo); v(ul_NR_TxBW); v(dl_NR_TxBW); v(iE_Extensions); }; template void encode(V& v) const { v(ul_NRFreqInfo); v(dl_NRFreqInfo); v(ul_NR_TxBW); v(dl_NR_TxBW); v(iE_Extensions); }; void clear() { ul_NRFreqInfo.clear(); dl_NRFreqInfo.clear(); ul_NR_TxBW.clear(); dl_NR_TxBW.clear(); iE_Extensions.clear(); }; private: ul_NRFreqInfo_t ul_NRFreqInfo; dl_NRFreqInfo_t dl_NRFreqInfo; ul_NR_TxBW_t ul_NR_TxBW; dl_NR_TxBW_t dl_NR_TxBW; iE_Extensions_t iE_Extensions; }; /* TDD-InfoServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct TDD_InfoServedNRCell_Information_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* TDD-InfoServedNRCell-Information ::= SEQUENCE { nRFreqInfo NRFreqInfo, nR-TxBW NR-TxBW, iE-Extensions ProtocolExtensionContainer { {TDD-InfoServedNRCell-Information-ExtIEs} } OPTIONAL, ... } */ struct TDD_InfoServedNRCell_Information : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "TDD-InfoServedNRCell-Information";} using parent_t = asn::sequence<3, 0, true, 1>; struct nRFreqInfo_t : NRFreqInfo { static constexpr const char* name() {return "nRFreqInfo_t";} using parent_t = NRFreqInfo; }; nRFreqInfo_t& ref_nRFreqInfo() {return nRFreqInfo;} nRFreqInfo_t const& ref_nRFreqInfo() const {return nRFreqInfo;} struct nR_TxBW_t : NR_TxBW { static constexpr const char* name() {return "nR_TxBW_t";} using parent_t = NR_TxBW; }; nR_TxBW_t& ref_nR_TxBW() {return nR_TxBW;} nR_TxBW_t const& ref_nR_TxBW() const {return nR_TxBW;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(nRFreqInfo); v(nR_TxBW); v(iE_Extensions); }; template void encode(V& v) const { v(nRFreqInfo); v(nR_TxBW); v(iE_Extensions); }; void clear() { nRFreqInfo.clear(); nR_TxBW.clear(); iE_Extensions.clear(); }; private: nRFreqInfo_t nRFreqInfo; nR_TxBW_t nR_TxBW; iE_Extensions_t iE_Extensions; }; /* ServedNRCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct ServedNRCell_Information_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ServedNRCell-Information ::= SEQUENCE { nrpCI NRPCI, nrCellID NRCGI, fiveGS-TAC FiveGS-TAC OPTIONAL, configured-TAC TAC OPTIONAL, broadcastPLMNs BroadcastPLMNs-Item, nrModeInfo CHOICE { fdd FDD-InfoServedNRCell-Information, tdd TDD-InfoServedNRCell-Information, ... }, measurementTimingConfiguration OCTET STRING, iE-Extensions ProtocolExtensionContainer { {ServedNRCell-Information-ExtIEs} } OPTIONAL, ... } */ struct ServedNRCell_Information : asn::sequence<8, 0, true, 3> { static constexpr const char* name() {return "ServedNRCell-Information";} using parent_t = asn::sequence<8, 0, true, 3>; struct nrpCI_t : NRPCI { static constexpr const char* name() {return "nrpCI_t";} using parent_t = NRPCI; }; nrpCI_t& ref_nrpCI() {return nrpCI;} nrpCI_t const& ref_nrpCI() const {return nrpCI;} struct nrCellID_t : NRCGI { static constexpr const char* name() {return "nrCellID_t";} using parent_t = NRCGI; }; nrCellID_t& ref_nrCellID() {return nrCellID;} nrCellID_t const& ref_nrCellID() const {return nrCellID;} struct fiveGS_TAC_t : FiveGS_TAC { static constexpr const char* name() {return "fiveGS_TAC_t";} using parent_t = FiveGS_TAC; static constexpr bool optional = true; }; fiveGS_TAC_t& set_fiveGS_TAC() { fiveGS_TAC.setpresent(true); return fiveGS_TAC;} fiveGS_TAC_t const* get_fiveGS_TAC() const {return fiveGS_TAC.is_valid() ? &fiveGS_TAC : nullptr;} struct configured_TAC_t : TAC { static constexpr const char* name() {return "configured_TAC_t";} using parent_t = TAC; static constexpr bool optional = true; }; configured_TAC_t& set_configured_TAC() { configured_TAC.setpresent(true); return configured_TAC;} configured_TAC_t const* get_configured_TAC() const {return configured_TAC.is_valid() ? &configured_TAC : nullptr;} struct broadcastPLMNs_t : BroadcastPLMNs_Item { static constexpr const char* name() {return "broadcastPLMNs_t";} using parent_t = BroadcastPLMNs_Item; }; broadcastPLMNs_t& ref_broadcastPLMNs() {return broadcastPLMNs;} broadcastPLMNs_t const& ref_broadcastPLMNs() const {return broadcastPLMNs;} struct nrModeInfo_t : asn::choice<2, 0, true> { static constexpr const char* name() {return "nrModeInfo_t";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~nrModeInfo_t() {clear();} struct fdd_t : FDD_InfoServedNRCell_Information { static constexpr const char* name() {return "fdd_t";} using parent_t = FDD_InfoServedNRCell_Information; }; struct tdd_t : TDD_InfoServedNRCell_Information { static constexpr const char* name() {return "tdd_t";} using parent_t = TDD_InfoServedNRCell_Information; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as();} return nullptr; } tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(fdd_t)]; char dummy2[sizeof(tdd_t)]; }; asn::variant var; index_type index {0}; }; nrModeInfo_t& ref_nrModeInfo() {return nrModeInfo;} nrModeInfo_t const& ref_nrModeInfo() const {return nrModeInfo;} struct measurementTimingConfiguration_t : asn::ostring<> { static constexpr const char* name() {return "measurementTimingConfiguration_t";} using parent_t = asn::ostring<>; }; measurementTimingConfiguration_t& ref_measurementTimingConfiguration() {return measurementTimingConfiguration;} measurementTimingConfiguration_t const& ref_measurementTimingConfiguration() const {return measurementTimingConfiguration;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(nrpCI); v(nrCellID); v(fiveGS_TAC); v(configured_TAC); v(broadcastPLMNs); v(nrModeInfo); v(measurementTimingConfiguration); v(iE_Extensions); }; template void encode(V& v) const { v(nrpCI); v(nrCellID); v(fiveGS_TAC); v(configured_TAC); v(broadcastPLMNs); v(nrModeInfo); v(measurementTimingConfiguration); v(iE_Extensions); }; void clear() { nrpCI.clear(); nrCellID.clear(); fiveGS_TAC.clear(); configured_TAC.clear(); broadcastPLMNs.clear(); nrModeInfo.clear(); measurementTimingConfiguration.clear(); iE_Extensions.clear(); }; private: nrpCI_t nrpCI; nrCellID_t nrCellID; fiveGS_TAC_t fiveGS_TAC; configured_TAC_t configured_TAC; broadcastPLMNs_t broadcastPLMNs; nrModeInfo_t nrModeInfo; measurementTimingConfiguration_t measurementTimingConfiguration; iE_Extensions_t iE_Extensions; }; /* En-gNBServedCells-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct En_gNBServedCells_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ServedNRcellsENDCX2ManagementList ::= SEQUENCE (SIZE (1.. maxCellinengNB)) OF SEQUENCE { servedNRCellInfo ServedNRCell-Information, nRNeighbourInfo NRNeighbour-Information OPTIONAL, iE-Extensions ProtocolExtensionContainer { {En-gNBServedCells-ExtIEs} } OPTIONAL, ... } */ struct ServedNRcellsENDCX2ManagementList_elm : asn::sequence<3, 0, true, 2> { static constexpr const char* name() {return "ServedNRcellsENDCX2ManagementList_elm";} using parent_t = asn::sequence<3, 0, true, 2>; struct servedNRCellInfo_t : ServedNRCell_Information { static constexpr const char* name() {return "servedNRCellInfo_t";} using parent_t = ServedNRCell_Information; }; servedNRCellInfo_t& ref_servedNRCellInfo() {return servedNRCellInfo;} servedNRCellInfo_t const& ref_servedNRCellInfo() const {return servedNRCellInfo;} struct nRNeighbourInfo_t : NRNeighbour_Information { static constexpr const char* name() {return "nRNeighbourInfo_t";} using parent_t = NRNeighbour_Information; static constexpr bool optional = true; }; nRNeighbourInfo_t& set_nRNeighbourInfo() { nRNeighbourInfo.setpresent(true); return nRNeighbourInfo;} nRNeighbourInfo_t const* get_nRNeighbourInfo() const {return nRNeighbourInfo.is_valid() ? &nRNeighbourInfo : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(servedNRCellInfo); v(nRNeighbourInfo); v(iE_Extensions); }; template void encode(V& v) const { v(servedNRCellInfo); v(nRNeighbourInfo); v(iE_Extensions); }; void clear() { servedNRCellInfo.clear(); nRNeighbourInfo.clear(); iE_Extensions.clear(); }; private: servedNRCellInfo_t servedNRCellInfo; nRNeighbourInfo_t nRNeighbourInfo; iE_Extensions_t iE_Extensions; }; struct ServedNRcellsENDCX2ManagementList : asn::sequenceof { static constexpr const char* name() {return "ServedNRcellsENDCX2ManagementList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ServedNRCellsToModify-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct ServedNRCellsToModify_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ServedNRCellsToModify-Item::= SEQUENCE { old-nrcgi NRCGI, servedNRCellInformation ServedNRCell-Information, nrNeighbourInformation NRNeighbour-Information OPTIONAL, nrDeactivationIndication DeactivationIndication OPTIONAL, iE-Extensions ProtocolExtensionContainer { {ServedNRCellsToModify-Item-ExtIEs} } OPTIONAL, ... } */ struct ServedNRCellsToModify_Item : asn::sequence<5, 0, true, 3> { static constexpr const char* name() {return "ServedNRCellsToModify-Item";} using parent_t = asn::sequence<5, 0, true, 3>; struct old_nrcgi_t : NRCGI { static constexpr const char* name() {return "old_nrcgi_t";} using parent_t = NRCGI; }; old_nrcgi_t& ref_old_nrcgi() {return old_nrcgi;} old_nrcgi_t const& ref_old_nrcgi() const {return old_nrcgi;} struct servedNRCellInformation_t : ServedNRCell_Information { static constexpr const char* name() {return "servedNRCellInformation_t";} using parent_t = ServedNRCell_Information; }; servedNRCellInformation_t& ref_servedNRCellInformation() {return servedNRCellInformation;} servedNRCellInformation_t const& ref_servedNRCellInformation() const {return servedNRCellInformation;} struct nrNeighbourInformation_t : NRNeighbour_Information { static constexpr const char* name() {return "nrNeighbourInformation_t";} using parent_t = NRNeighbour_Information; static constexpr bool optional = true; }; nrNeighbourInformation_t& set_nrNeighbourInformation() { nrNeighbourInformation.setpresent(true); return nrNeighbourInformation;} nrNeighbourInformation_t const* get_nrNeighbourInformation() const {return nrNeighbourInformation.is_valid() ? &nrNeighbourInformation : nullptr;} struct nrDeactivationIndication_t : DeactivationIndication { static constexpr const char* name() {return "nrDeactivationIndication_t";} using parent_t = DeactivationIndication; static constexpr bool optional = true; }; nrDeactivationIndication_t& set_nrDeactivationIndication() { nrDeactivationIndication.setpresent(true); return nrDeactivationIndication;} nrDeactivationIndication_t const* get_nrDeactivationIndication() const {return nrDeactivationIndication.is_valid() ? &nrDeactivationIndication : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(old_nrcgi); v(servedNRCellInformation); v(nrNeighbourInformation); v(nrDeactivationIndication); v(iE_Extensions); }; template void encode(V& v) const { v(old_nrcgi); v(servedNRCellInformation); v(nrNeighbourInformation); v(nrDeactivationIndication); v(iE_Extensions); }; void clear() { old_nrcgi.clear(); servedNRCellInformation.clear(); nrNeighbourInformation.clear(); nrDeactivationIndication.clear(); iE_Extensions.clear(); }; private: old_nrcgi_t old_nrcgi; servedNRCellInformation_t servedNRCellInformation; nrNeighbourInformation_t nrNeighbourInformation; nrDeactivationIndication_t nrDeactivationIndication; iE_Extensions_t iE_Extensions; }; /* ServedNRcellsToModifyENDCConfUpdList ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF ServedNRCellsToModify-Item */ struct ServedNRcellsToModifyENDCConfUpdList_elm : ServedNRCellsToModify_Item { static constexpr const char* name() {return "ServedNRcellsToModifyENDCConfUpdList_elm";} using parent_t = ServedNRCellsToModify_Item; }; struct ServedNRcellsToModifyENDCConfUpdList : asn::sequenceof { static constexpr const char* name() {return "ServedNRcellsToModifyENDCConfUpdList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ServedNRcellsToDeleteENDCConfUpdList ::= SEQUENCE (SIZE (1..maxCellinengNB)) OF NRCGI */ struct ServedNRcellsToDeleteENDCConfUpdList_elm : NRCGI { static constexpr const char* name() {return "ServedNRcellsToDeleteENDCConfUpdList_elm";} using parent_t = NRCGI; }; struct ServedNRcellsToDeleteENDCConfUpdList : asn::sequenceof { static constexpr const char* name() {return "ServedNRcellsToDeleteENDCConfUpdList";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* En-gNB-ENDCConfigUpdateIEs X2AP-PROTOCOL-IES ::= { { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE optional }| { ID id-ServedNRcellsToModifyListENDCConfUpd CRITICALITY reject TYPE ServedNRcellsToModifyENDCConfUpdList PRESENCE optional }| { ID id-ServedNRcellsToDeleteListENDCConfUpd CRITICALITY reject TYPE ServedNRcellsToDeleteENDCConfUpdList PRESENCE optional }, ... } */ struct En_gNB_ENDCConfigUpdateIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=1;} void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(id_ServedNRcellsToModifyListENDCConfUpd); type=2;} void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(id_ServedNRcellsToDeleteListENDCConfUpd); type=3;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 1; return true; } else if(equal(id_ServedNRcellsToModifyListENDCConfUpd)) { type = 2; return true; } else if(equal(id_ServedNRcellsToDeleteListENDCConfUpd)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsToModifyListENDCConfUpd);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_ServedNRcellsToDeleteListENDCConfUpd);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=1;} void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(reject); type=2;} void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(reject); type=3;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(1); } ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(1); } ServedNRcellsToModifyENDCConfUpdList& select_id_ServedNRcellsToModifyListENDCConfUpd() { return set(2); } ServedNRcellsToModifyENDCConfUpdList const* get_id_ServedNRcellsToModifyListENDCConfUpd() const { return get(2); } ServedNRcellsToDeleteENDCConfUpdList& select_id_ServedNRcellsToDeleteListENDCConfUpd() { return set(3); } ServedNRcellsToDeleteENDCConfUpdList const* get_id_ServedNRcellsToDeleteListENDCConfUpd() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; case 2: v(select_id_ServedNRcellsToModifyListENDCConfUpd()); return true; case 3: v(select_id_ServedNRcellsToDeleteListENDCConfUpd()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ServedNRcellsENDCX2ManagementList)]; char dummy2[sizeof(ServedNRcellsToDeleteENDCConfUpdList)]; char dummy3[sizeof(ServedNRcellsToModifyENDCConfUpdList)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ServedNRcellsENDCX2ManagementList() { set(optional); type=1;} void select_id_ServedNRcellsToModifyListENDCConfUpd() { set(optional); type=2;} void select_id_ServedNRcellsToDeleteListENDCConfUpd() { set(optional); type=3;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* InitiatingNodeType-EndcConfigUpdate::= CHOICE { init-eNB ProtocolIE-Container {{ENB-ENDCConfigUpdateIEs}}, init-en-gNB ProtocolIE-Container {{En-gNB-ENDCConfigUpdateIEs}}, ... } */ struct InitiatingNodeType_EndcConfigUpdate : asn::choice<2, 0, true> { static constexpr const char* name() {return "InitiatingNodeType-EndcConfigUpdate";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~InitiatingNodeType_EndcConfigUpdate() {clear();} struct init_eNB_t : ProtocolIE_Container { static constexpr const char* name() {return "init_eNB_t";} using parent_t = ProtocolIE_Container; }; struct init_en_gNB_t : ProtocolIE_Container { static constexpr const char* name() {return "init_en_gNB_t";} using parent_t = ProtocolIE_Container; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(init_eNB_t)]; char dummy2[sizeof(init_en_gNB_t)]; }; asn::variant var; index_type index {0}; }; /* ENDCConfigurationUpdate-IEs X2AP-PROTOCOL-IES ::= { { ID id-InitiatingNodeType-EndcConfigUpdate CRITICALITY reject TYPE InitiatingNodeType-EndcConfigUpdate PRESENCE mandatory}, ... } */ struct ENDCConfigurationUpdate_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_InitiatingNodeType_EndcConfigUpdate() { set(id_InitiatingNodeType_EndcConfigUpdate); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_InitiatingNodeType_EndcConfigUpdate)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcConfigUpdate);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_InitiatingNodeType_EndcConfigUpdate() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} InitiatingNodeType_EndcConfigUpdate& select_id_InitiatingNodeType_EndcConfigUpdate() { return set(1); } InitiatingNodeType_EndcConfigUpdate const* get_id_InitiatingNodeType_EndcConfigUpdate() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_InitiatingNodeType_EndcConfigUpdate()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(InitiatingNodeType_EndcConfigUpdate)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_InitiatingNodeType_EndcConfigUpdate() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCConfigurationUpdate ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdate-IEs}}, ... } */ struct ENDCConfigurationUpdate : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCConfigurationUpdate";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* En-gNB-ENDCConfigUpdateAckIEs X2AP-PROTOCOL-IES ::= { { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE optional}, ... } */ struct En_gNB_ENDCConfigUpdateAckIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(1); } ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ServedNRcellsENDCX2ManagementList)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_ServedNRcellsENDCX2ManagementList() { set(optional); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* RespondingNodeType-EndcConfigUpdate::= CHOICE { respond-eNB ProtocolIE-Container {{ENB-ENDCConfigUpdateAckIEs}}, respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCConfigUpdateAckIEs}}, ... } */ struct RespondingNodeType_EndcConfigUpdate : asn::choice<2, 0, true> { static constexpr const char* name() {return "RespondingNodeType-EndcConfigUpdate";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~RespondingNodeType_EndcConfigUpdate() {clear();} struct respond_eNB_t : ProtocolIE_Container { static constexpr const char* name() {return "respond_eNB_t";} using parent_t = ProtocolIE_Container; }; struct respond_en_gNB_t : ProtocolIE_Container { static constexpr const char* name() {return "respond_en_gNB_t";} using parent_t = ProtocolIE_Container; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(respond_eNB_t)]; char dummy2[sizeof(respond_en_gNB_t)]; }; asn::variant var; index_type index {0}; }; /* ENDCConfigurationUpdateAcknowledge-IEs X2AP-PROTOCOL-IES ::= { { ID id-RespondingNodeType-EndcConfigUpdate CRITICALITY reject TYPE RespondingNodeType-EndcConfigUpdate PRESENCE mandatory}, ... } */ struct ENDCConfigurationUpdateAcknowledge_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RespondingNodeType_EndcConfigUpdate() { set(id_RespondingNodeType_EndcConfigUpdate); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_RespondingNodeType_EndcConfigUpdate)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcConfigUpdate);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RespondingNodeType_EndcConfigUpdate() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} RespondingNodeType_EndcConfigUpdate& select_id_RespondingNodeType_EndcConfigUpdate() { return set(1); } RespondingNodeType_EndcConfigUpdate const* get_id_RespondingNodeType_EndcConfigUpdate() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_RespondingNodeType_EndcConfigUpdate()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(RespondingNodeType_EndcConfigUpdate)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RespondingNodeType_EndcConfigUpdate() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCConfigurationUpdateAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdateAcknowledge-IEs}}, ... } */ struct ENDCConfigurationUpdateAcknowledge : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCConfigurationUpdateAcknowledge";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ENDCConfigurationUpdateFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }, ... } */ struct ENDCConfigurationUpdateFailure_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_Cause() { set(id_Cause); type=1;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} void select_id_TimeToWait() { set(id_TimeToWait); type=3;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Cause)) { type = 1; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } else if(equal(id_TimeToWait)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_Cause() { set(ignore); type=1;} void select_id_CriticalityDiagnostics() { set(ignore); type=2;} void select_id_TimeToWait() { set(ignore); type=3;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} Cause& select_id_Cause() { return set(1); } Cause const* get_id_Cause() const { return get(1); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } TimeToWait& select_id_TimeToWait() { return set(3); } TimeToWait const* get_id_TimeToWait() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Cause()); return true; case 2: v(select_id_CriticalityDiagnostics()); return true; case 3: v(select_id_TimeToWait()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(TimeToWait)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_Cause() { set(mandatory); type=1;} void select_id_CriticalityDiagnostics() { set(optional); type=2;} void select_id_TimeToWait() { set(optional); type=3;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCConfigurationUpdateFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCConfigurationUpdateFailure-IEs}}, ... } */ struct ENDCConfigurationUpdateFailure : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCConfigurationUpdateFailure";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ENDCPartialResetConfirm-IEs X2AP-PROTOCOL-IES ::= { { ID id-UEs-Admitted-ToBeReset CRITICALITY reject TYPE UEsToBeResetList PRESENCE mandatory}, ... } */ struct ENDCPartialResetConfirm_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_UEs_Admitted_ToBeReset() { set(id_UEs_Admitted_ToBeReset); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_UEs_Admitted_ToBeReset)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_UEs_Admitted_ToBeReset);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_UEs_Admitted_ToBeReset() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UEsToBeResetList& select_id_UEs_Admitted_ToBeReset() { return set(1); } UEsToBeResetList const* get_id_UEs_Admitted_ToBeReset() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_UEs_Admitted_ToBeReset()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(UEsToBeResetList)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_UEs_Admitted_ToBeReset() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCPartialResetConfirm ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCPartialResetConfirm-IEs}}, ... } */ struct ENDCPartialResetConfirm : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCPartialResetConfirm";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ENDCPartialResetRequired-IEs X2AP-PROTOCOL-IES ::= { { ID id-UEs-ToBeReset CRITICALITY reject TYPE UEsToBeResetList PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, ... } */ struct ENDCPartialResetRequired_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_UEs_ToBeReset() { set(id_UEs_ToBeReset); type=1;} void select_id_Cause() { set(id_Cause); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_UEs_ToBeReset)) { type = 1; return true; } else if(equal(id_Cause)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_UEs_ToBeReset);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_UEs_ToBeReset() { set(reject); type=1;} void select_id_Cause() { set(ignore); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UEsToBeResetList& select_id_UEs_ToBeReset() { return set(1); } UEsToBeResetList const* get_id_UEs_ToBeReset() const { return get(1); } Cause& select_id_Cause() { return set(2); } Cause const* get_id_Cause() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_UEs_ToBeReset()); return true; case 2: v(select_id_Cause()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(UEsToBeResetList)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_UEs_ToBeReset() { set(mandatory); type=1;} void select_id_Cause() { set(mandatory); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCPartialResetRequired ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCPartialResetRequired-IEs}}, ... } */ struct ENDCPartialResetRequired : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCPartialResetRequired";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ENDCX2RemovalFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } */ struct ENDCX2RemovalFailure_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Cause() { set(id_Cause); type=1;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Cause)) { type = 1; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Cause() { set(ignore); type=1;} void select_id_CriticalityDiagnostics() { set(ignore); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} Cause& select_id_Cause() { return set(1); } Cause const* get_id_Cause() const { return get(1); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Cause()); return true; case 2: v(select_id_CriticalityDiagnostics()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Cause() { set(mandatory); type=1;} void select_id_CriticalityDiagnostics() { set(optional); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCX2RemovalFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCX2RemovalFailure-IEs}}, ... } */ struct ENDCX2RemovalFailure : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCX2RemovalFailure";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* En-gNB-ENDCX2RemovalReqIEs X2AP-PROTOCOL-IES ::= { { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}, ... } */ struct En_gNB_ENDCX2RemovalReqIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_Globalen_gNB_ID() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Globalen_gNB_ID()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GlobalGNB_ID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* InitiatingNodeType-EndcX2Removal ::= CHOICE { init-eNB ProtocolIE-Container {{ENB-ENDCX2RemovalReqIEs}}, init-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2RemovalReqIEs}}, ... } */ struct InitiatingNodeType_EndcX2Removal : asn::choice<2, 0, true> { static constexpr const char* name() {return "InitiatingNodeType-EndcX2Removal";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~InitiatingNodeType_EndcX2Removal() {clear();} struct init_eNB_t : ProtocolIE_Container { static constexpr const char* name() {return "init_eNB_t";} using parent_t = ProtocolIE_Container; }; struct init_en_gNB_t : ProtocolIE_Container { static constexpr const char* name() {return "init_en_gNB_t";} using parent_t = ProtocolIE_Container; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(init_eNB_t)]; char dummy2[sizeof(init_en_gNB_t)]; }; asn::variant var; index_type index {0}; }; /* ENDCX2RemovalRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-InitiatingNodeType-EndcX2Removal CRITICALITY reject TYPE InitiatingNodeType-EndcX2Removal PRESENCE mandatory}, ... } */ struct ENDCX2RemovalRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_InitiatingNodeType_EndcX2Removal() { set(id_InitiatingNodeType_EndcX2Removal); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_InitiatingNodeType_EndcX2Removal)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcX2Removal);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_InitiatingNodeType_EndcX2Removal() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} InitiatingNodeType_EndcX2Removal& select_id_InitiatingNodeType_EndcX2Removal() { return set(1); } InitiatingNodeType_EndcX2Removal const* get_id_InitiatingNodeType_EndcX2Removal() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_InitiatingNodeType_EndcX2Removal()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(InitiatingNodeType_EndcX2Removal)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_InitiatingNodeType_EndcX2Removal() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCX2RemovalRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCX2RemovalRequest-IEs}}, ... } */ struct ENDCX2RemovalRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCX2RemovalRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* En-gNB-ENDCX2RemovalReqAckIEs X2AP-PROTOCOL-IES ::= { { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}, ... } */ struct En_gNB_ENDCX2RemovalReqAckIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_Globalen_gNB_ID() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Globalen_gNB_ID()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GlobalGNB_ID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* RespondingNodeType-EndcX2Removal ::= CHOICE { respond-eNB ProtocolIE-Container {{ENB-ENDCX2RemovalReqAckIEs}}, respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2RemovalReqAckIEs}}, ... } */ struct RespondingNodeType_EndcX2Removal : asn::choice<2, 0, true> { static constexpr const char* name() {return "RespondingNodeType-EndcX2Removal";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~RespondingNodeType_EndcX2Removal() {clear();} struct respond_eNB_t : ProtocolIE_Container { static constexpr const char* name() {return "respond_eNB_t";} using parent_t = ProtocolIE_Container; }; struct respond_en_gNB_t : ProtocolIE_Container { static constexpr const char* name() {return "respond_en_gNB_t";} using parent_t = ProtocolIE_Container; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(respond_eNB_t)]; char dummy2[sizeof(respond_en_gNB_t)]; }; asn::variant var; index_type index {0}; }; /* ENDCX2RemovalResponse-IEs X2AP-PROTOCOL-IES ::= { { ID id-RespondingNodeType-EndcX2Removal CRITICALITY reject TYPE RespondingNodeType-EndcX2Removal PRESENCE mandatory}, ... } */ struct ENDCX2RemovalResponse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RespondingNodeType_EndcX2Removal() { set(id_RespondingNodeType_EndcX2Removal); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_RespondingNodeType_EndcX2Removal)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcX2Removal);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RespondingNodeType_EndcX2Removal() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} RespondingNodeType_EndcX2Removal& select_id_RespondingNodeType_EndcX2Removal() { return set(1); } RespondingNodeType_EndcX2Removal const* get_id_RespondingNodeType_EndcX2Removal() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_RespondingNodeType_EndcX2Removal()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(RespondingNodeType_EndcX2Removal)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RespondingNodeType_EndcX2Removal() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCX2RemovalResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCX2RemovalResponse-IEs}}, ... } */ struct ENDCX2RemovalResponse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCX2RemovalResponse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ENDCX2SetupFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional } | { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }, ... } */ struct ENDCX2SetupFailure_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_Cause() { set(id_Cause); type=1;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} void select_id_TimeToWait() { set(id_TimeToWait); type=3;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Cause)) { type = 1; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } else if(equal(id_TimeToWait)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_Cause() { set(ignore); type=1;} void select_id_CriticalityDiagnostics() { set(ignore); type=2;} void select_id_TimeToWait() { set(ignore); type=3;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} Cause& select_id_Cause() { return set(1); } Cause const* get_id_Cause() const { return get(1); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } TimeToWait& select_id_TimeToWait() { return set(3); } TimeToWait const* get_id_TimeToWait() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Cause()); return true; case 2: v(select_id_CriticalityDiagnostics()); return true; case 3: v(select_id_TimeToWait()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(TimeToWait)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_Cause() { set(mandatory); type=1;} void select_id_CriticalityDiagnostics() { set(optional); type=2;} void select_id_TimeToWait() { set(optional); type=3;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCX2SetupFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCX2SetupFailure-IEs}}, ... } */ struct ENDCX2SetupFailure : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCX2SetupFailure";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* En-gNB-ENDCX2SetupReqIEs X2AP-PROTOCOL-IES ::= { { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE mandatory}, ... } */ struct En_gNB_ENDCX2SetupReqIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } else if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Globalen_gNB_ID() { set(reject); type=1;} void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(2); } ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Globalen_gNB_ID()); return true; case 2: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GlobalGNB_ID)]; char dummy2[sizeof(ServedNRcellsENDCX2ManagementList)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} void select_id_ServedNRcellsENDCX2ManagementList() { set(mandatory); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* InitiatingNodeType-EndcX2Setup ::= CHOICE { init-eNB ProtocolIE-Container {{ENB-ENDCX2SetupReqIEs}}, init-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2SetupReqIEs}}, ... } */ struct InitiatingNodeType_EndcX2Setup : asn::choice<2, 0, true> { static constexpr const char* name() {return "InitiatingNodeType-EndcX2Setup";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~InitiatingNodeType_EndcX2Setup() {clear();} struct init_eNB_t : ProtocolIE_Container { static constexpr const char* name() {return "init_eNB_t";} using parent_t = ProtocolIE_Container; }; struct init_en_gNB_t : ProtocolIE_Container { static constexpr const char* name() {return "init_en_gNB_t";} using parent_t = ProtocolIE_Container; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } init_eNB_t& select_init_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} init_eNB_t const* get_init_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } init_en_gNB_t& select_init_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} init_en_gNB_t const* get_init_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(init_eNB_t)]; char dummy2[sizeof(init_en_gNB_t)]; }; asn::variant var; index_type index {0}; }; /* ENDCX2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-InitiatingNodeType-EndcX2Setup CRITICALITY reject TYPE InitiatingNodeType-EndcX2Setup PRESENCE mandatory}, ... } */ struct ENDCX2SetupRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_InitiatingNodeType_EndcX2Setup() { set(id_InitiatingNodeType_EndcX2Setup); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_InitiatingNodeType_EndcX2Setup)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EndcX2Setup);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_InitiatingNodeType_EndcX2Setup() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} InitiatingNodeType_EndcX2Setup& select_id_InitiatingNodeType_EndcX2Setup() { return set(1); } InitiatingNodeType_EndcX2Setup const* get_id_InitiatingNodeType_EndcX2Setup() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_InitiatingNodeType_EndcX2Setup()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(InitiatingNodeType_EndcX2Setup)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_InitiatingNodeType_EndcX2Setup() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCX2SetupRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCX2SetupRequest-IEs}}, ... } */ struct ENDCX2SetupRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCX2SetupRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* En-gNB-ENDCX2SetupReqAckIEs X2AP-PROTOCOL-IES ::= { { ID id-Globalen-gNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| { ID id-ServedNRcellsENDCX2ManagementList CRITICALITY reject TYPE ServedNRcellsENDCX2ManagementList PRESENCE mandatory}, ... } */ struct En_gNB_ENDCX2SetupReqAckIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Globalen_gNB_ID() { set(id_Globalen_gNB_ID); type=1;} void select_id_ServedNRcellsENDCX2ManagementList() { set(id_ServedNRcellsENDCX2ManagementList); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Globalen_gNB_ID)) { type = 1; return true; } else if(equal(id_ServedNRcellsENDCX2ManagementList)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Globalen_gNB_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedNRcellsENDCX2ManagementList);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Globalen_gNB_ID() { set(reject); type=1;} void select_id_ServedNRcellsENDCX2ManagementList() { set(reject); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalGNB_ID& select_id_Globalen_gNB_ID() { return set(1); } GlobalGNB_ID const* get_id_Globalen_gNB_ID() const { return get(1); } ServedNRcellsENDCX2ManagementList& select_id_ServedNRcellsENDCX2ManagementList() { return set(2); } ServedNRcellsENDCX2ManagementList const* get_id_ServedNRcellsENDCX2ManagementList() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Globalen_gNB_ID()); return true; case 2: v(select_id_ServedNRcellsENDCX2ManagementList()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GlobalGNB_ID)]; char dummy2[sizeof(ServedNRcellsENDCX2ManagementList)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Globalen_gNB_ID() { set(mandatory); type=1;} void select_id_ServedNRcellsENDCX2ManagementList() { set(mandatory); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* RespondingNodeType-EndcX2Setup ::= CHOICE { respond-eNB ProtocolIE-Container {{ENB-ENDCX2SetupReqAckIEs}}, respond-en-gNB ProtocolIE-Container {{En-gNB-ENDCX2SetupReqAckIEs}}, ... } */ struct RespondingNodeType_EndcX2Setup : asn::choice<2, 0, true> { static constexpr const char* name() {return "RespondingNodeType-EndcX2Setup";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~RespondingNodeType_EndcX2Setup() {clear();} struct respond_eNB_t : ProtocolIE_Container { static constexpr const char* name() {return "respond_eNB_t";} using parent_t = ProtocolIE_Container; }; struct respond_en_gNB_t : ProtocolIE_Container { static constexpr const char* name() {return "respond_en_gNB_t";} using parent_t = ProtocolIE_Container; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(respond_eNB_t)]; char dummy2[sizeof(respond_en_gNB_t)]; }; asn::variant var; index_type index {0}; }; /* ENDCX2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { { ID id-RespondingNodeType-EndcX2Setup CRITICALITY reject TYPE RespondingNodeType-EndcX2Setup PRESENCE mandatory}, ... } */ struct ENDCX2SetupResponse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RespondingNodeType_EndcX2Setup() { set(id_RespondingNodeType_EndcX2Setup); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_RespondingNodeType_EndcX2Setup)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EndcX2Setup);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RespondingNodeType_EndcX2Setup() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} RespondingNodeType_EndcX2Setup& select_id_RespondingNodeType_EndcX2Setup() { return set(1); } RespondingNodeType_EndcX2Setup const* get_id_RespondingNodeType_EndcX2Setup() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_RespondingNodeType_EndcX2Setup()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(RespondingNodeType_EndcX2Setup)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RespondingNodeType_EndcX2Setup() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ENDCX2SetupResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ENDCX2SetupResponse-IEs}}, ... } */ struct ENDCX2SetupResponse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ENDCX2SetupResponse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ListofEUTRACellsinNRCoordinationReq ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ECGI */ struct ListofEUTRACellsinNRCoordinationReq_elm : ECGI { static constexpr const char* name() {return "ListofEUTRACellsinNRCoordinationReq_elm";} using parent_t = ECGI; }; struct ListofEUTRACellsinNRCoordinationReq : asn::sequenceof { static constexpr const char* name() {return "ListofEUTRACellsinNRCoordinationReq";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* ListofNRCellsinNRCoordinationReq ::= SEQUENCE (SIZE (0..maxnoNRcellsSpectrumSharingWithE-UTRA)) OF NRCGI */ struct ListofNRCellsinNRCoordinationReq_elm : NRCGI { static constexpr const char* name() {return "ListofNRCellsinNRCoordinationReq_elm";} using parent_t = NRCGI; }; struct ListofNRCellsinNRCoordinationReq : asn::sequenceof { static constexpr const char* name() {return "ListofNRCellsinNRCoordinationReq";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* En-gNB-EUTRA-NRCellResourceCoordinationReqIEs X2AP-PROTOCOL-IES ::= { { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| { ID id-ListofEUTRACellsinNRCoordinationReq CRITICALITY reject TYPE ListofEUTRACellsinNRCoordinationReq PRESENCE mandatory }| { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| { ID id-ListofNRCellsinNRCoordinationReq CRITICALITY reject TYPE ListofNRCellsinNRCoordinationReq PRESENCE mandatory}, ... } */ struct En_gNB_EUTRA_NRCellResourceCoordinationReqIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} void select_id_ListofEUTRACellsinNRCoordinationReq() { set(id_ListofEUTRACellsinNRCoordinationReq); type=2;} void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=3;} void select_id_ListofNRCellsinNRCoordinationReq() { set(id_ListofNRCellsinNRCoordinationReq); type=4;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } else if(equal(id_ListofEUTRACellsinNRCoordinationReq)) { type = 2; return true; } else if(equal(id_SpectrumSharingGroupID)) { type = 3; return true; } else if(equal(id_ListofNRCellsinNRCoordinationReq)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ListofEUTRACellsinNRCoordinationReq);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_ListofNRCellsinNRCoordinationReq);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_DataTrafficResourceIndication() { set(reject); type=1;} void select_id_ListofEUTRACellsinNRCoordinationReq() { set(reject); type=2;} void select_id_SpectrumSharingGroupID() { set(reject); type=3;} void select_id_ListofNRCellsinNRCoordinationReq() { set(reject); type=4;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } ListofEUTRACellsinNRCoordinationReq& select_id_ListofEUTRACellsinNRCoordinationReq() { return set(2); } ListofEUTRACellsinNRCoordinationReq const* get_id_ListofEUTRACellsinNRCoordinationReq() const { return get(2); } SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(3); } SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(3); } ListofNRCellsinNRCoordinationReq& select_id_ListofNRCellsinNRCoordinationReq() { return set(4); } ListofNRCellsinNRCoordinationReq const* get_id_ListofNRCellsinNRCoordinationReq() const { return get(4); } bool is_unknown() const { return type == 5; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_DataTrafficResourceIndication()); return true; case 2: v(select_id_ListofEUTRACellsinNRCoordinationReq()); return true; case 3: v(select_id_SpectrumSharingGroupID()); return true; case 4: v(select_id_ListofNRCellsinNRCoordinationReq()); return true; case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(DataTrafficResourceIndication)]; char dummy2[sizeof(ListofEUTRACellsinNRCoordinationReq)]; char dummy3[sizeof(ListofNRCellsinNRCoordinationReq)]; char dummy4[sizeof(SpectrumSharingGroupID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} void select_id_ListofEUTRACellsinNRCoordinationReq() { set(mandatory); type=2;} void select_id_SpectrumSharingGroupID() { set(mandatory); type=3;} void select_id_ListofNRCellsinNRCoordinationReq() { set(mandatory); type=4;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(mandatory)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* InitiatingNodeType-EutranrCellResourceCoordination ::= CHOICE { initiate-eNB ProtocolIE-Container {{ENB-EUTRA-NRCellResourceCoordinationReqIEs}}, initiate-en-gNB ProtocolIE-Container {{En-gNB-EUTRA-NRCellResourceCoordinationReqIEs}}, ... } */ struct InitiatingNodeType_EutranrCellResourceCoordination : asn::choice<2, 0, true> { static constexpr const char* name() {return "InitiatingNodeType-EutranrCellResourceCoordination";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~InitiatingNodeType_EutranrCellResourceCoordination() {clear();} struct initiate_eNB_t : ProtocolIE_Container { static constexpr const char* name() {return "initiate_eNB_t";} using parent_t = ProtocolIE_Container; }; struct initiate_en_gNB_t : ProtocolIE_Container { static constexpr const char* name() {return "initiate_en_gNB_t";} using parent_t = ProtocolIE_Container; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } initiate_eNB_t& select_initiate_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} initiate_eNB_t const* get_initiate_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } initiate_en_gNB_t& select_initiate_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} initiate_en_gNB_t const* get_initiate_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(initiate_eNB_t)]; char dummy2[sizeof(initiate_en_gNB_t)]; }; asn::variant var; index_type index {0}; }; /* EUTRANRCellResourceCoordinationRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-InitiatingNodeType-EutranrCellResourceCoordination CRITICALITY reject TYPE InitiatingNodeType-EutranrCellResourceCoordination PRESENCE mandatory}, ... } */ struct EUTRANRCellResourceCoordinationRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(id_InitiatingNodeType_EutranrCellResourceCoordination); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_InitiatingNodeType_EutranrCellResourceCoordination)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_InitiatingNodeType_EutranrCellResourceCoordination);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} InitiatingNodeType_EutranrCellResourceCoordination& select_id_InitiatingNodeType_EutranrCellResourceCoordination() { return set(1); } InitiatingNodeType_EutranrCellResourceCoordination const* get_id_InitiatingNodeType_EutranrCellResourceCoordination() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_InitiatingNodeType_EutranrCellResourceCoordination()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(InitiatingNodeType_EutranrCellResourceCoordination)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_InitiatingNodeType_EutranrCellResourceCoordination() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* EUTRANRCellResourceCoordinationRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{EUTRANRCellResourceCoordinationRequest-IEs}}, ... } */ struct EUTRANRCellResourceCoordinationRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "EUTRANRCellResourceCoordinationRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ListofNRCellsinNRCoordinationResp ::= SEQUENCE (SIZE (0..maxnoNRcellsSpectrumSharingWithE-UTRA)) OF NRCGI */ struct ListofNRCellsinNRCoordinationResp_elm : NRCGI { static constexpr const char* name() {return "ListofNRCellsinNRCoordinationResp_elm";} using parent_t = NRCGI; }; struct ListofNRCellsinNRCoordinationResp : asn::sequenceof { static constexpr const char* name() {return "ListofNRCellsinNRCoordinationResp";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs X2AP-PROTOCOL-IES ::= { { ID id-DataTrafficResourceIndication CRITICALITY reject TYPE DataTrafficResourceIndication PRESENCE mandatory}| { ID id-SpectrumSharingGroupID CRITICALITY reject TYPE SpectrumSharingGroupID PRESENCE mandatory}| { ID id-ListofNRCellsinNRCoordinationResp CRITICALITY reject TYPE ListofNRCellsinNRCoordinationResp PRESENCE mandatory}, ... } */ struct En_gNB_EUTRA_NRCellResourceCoordinationReqAckIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_DataTrafficResourceIndication() { set(id_DataTrafficResourceIndication); type=1;} void select_id_SpectrumSharingGroupID() { set(id_SpectrumSharingGroupID); type=2;} void select_id_ListofNRCellsinNRCoordinationResp() { set(id_ListofNRCellsinNRCoordinationResp); type=3;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_DataTrafficResourceIndication)) { type = 1; return true; } else if(equal(id_SpectrumSharingGroupID)) { type = 2; return true; } else if(equal(id_ListofNRCellsinNRCoordinationResp)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_DataTrafficResourceIndication);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SpectrumSharingGroupID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_ListofNRCellsinNRCoordinationResp);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_DataTrafficResourceIndication() { set(reject); type=1;} void select_id_SpectrumSharingGroupID() { set(reject); type=2;} void select_id_ListofNRCellsinNRCoordinationResp() { set(reject); type=3;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} DataTrafficResourceIndication& select_id_DataTrafficResourceIndication() { return set(1); } DataTrafficResourceIndication const* get_id_DataTrafficResourceIndication() const { return get(1); } SpectrumSharingGroupID& select_id_SpectrumSharingGroupID() { return set(2); } SpectrumSharingGroupID const* get_id_SpectrumSharingGroupID() const { return get(2); } ListofNRCellsinNRCoordinationResp& select_id_ListofNRCellsinNRCoordinationResp() { return set(3); } ListofNRCellsinNRCoordinationResp const* get_id_ListofNRCellsinNRCoordinationResp() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_DataTrafficResourceIndication()); return true; case 2: v(select_id_SpectrumSharingGroupID()); return true; case 3: v(select_id_ListofNRCellsinNRCoordinationResp()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(DataTrafficResourceIndication)]; char dummy2[sizeof(ListofNRCellsinNRCoordinationResp)]; char dummy3[sizeof(SpectrumSharingGroupID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_DataTrafficResourceIndication() { set(mandatory); type=1;} void select_id_SpectrumSharingGroupID() { set(mandatory); type=2;} void select_id_ListofNRCellsinNRCoordinationResp() { set(mandatory); type=3;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* RespondingNodeType-EutranrCellResourceCoordination ::= CHOICE { respond-eNB ProtocolIE-Container {{ENB-EUTRA-NRCellResourceCoordinationReqAckIEs}}, respond-en-gNB ProtocolIE-Container {{En-gNB-EUTRA-NRCellResourceCoordinationReqAckIEs}}, ... } */ struct RespondingNodeType_EutranrCellResourceCoordination : asn::choice<2, 0, true> { static constexpr const char* name() {return "RespondingNodeType-EutranrCellResourceCoordination";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~RespondingNodeType_EutranrCellResourceCoordination() {clear();} struct respond_eNB_t : ProtocolIE_Container { static constexpr const char* name() {return "respond_eNB_t";} using parent_t = ProtocolIE_Container; }; struct respond_en_gNB_t : ProtocolIE_Container { static constexpr const char* name() {return "respond_en_gNB_t";} using parent_t = ProtocolIE_Container; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } respond_eNB_t& select_respond_eNB() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} respond_eNB_t const* get_respond_eNB() const { if(get_index() == 1) { return &var.as();} return nullptr; } respond_en_gNB_t& select_respond_en_gNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} respond_en_gNB_t const* get_respond_en_gNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(respond_eNB_t)]; char dummy2[sizeof(respond_en_gNB_t)]; }; asn::variant var; index_type index {0}; }; /* EUTRANRCellResourceCoordinationResponse-IEs X2AP-PROTOCOL-IES ::= { { ID id-RespondingNodeType-EutranrCellResourceCoordination CRITICALITY reject TYPE RespondingNodeType-EutranrCellResourceCoordination PRESENCE mandatory}, ... } */ struct EUTRANRCellResourceCoordinationResponse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(id_RespondingNodeType_EutranrCellResourceCoordination); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_RespondingNodeType_EutranrCellResourceCoordination)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_RespondingNodeType_EutranrCellResourceCoordination);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} RespondingNodeType_EutranrCellResourceCoordination& select_id_RespondingNodeType_EutranrCellResourceCoordination() { return set(1); } RespondingNodeType_EutranrCellResourceCoordination const* get_id_RespondingNodeType_EutranrCellResourceCoordination() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_RespondingNodeType_EutranrCellResourceCoordination()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(RespondingNodeType_EutranrCellResourceCoordination)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_RespondingNodeType_EutranrCellResourceCoordination() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* EUTRANRCellResourceCoordinationResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{EUTRANRCellResourceCoordinationResponse-IEs}}, ... } */ struct EUTRANRCellResourceCoordinationResponse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "EUTRANRCellResourceCoordinationResponse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ErrorIndication-IEs X2AP-PROTOCOL-IES ::= { { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-Old-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, ... } */ struct ErrorIndication_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=5;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=6;} void select_id_Old_SgNB_UE_X2AP_ID() { set(id_Old_SgNB_UE_X2AP_ID); type=7;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 6; return true; } else if(equal(id_Old_SgNB_UE_X2AP_ID)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_Old_SgNB_UE_X2AP_ID);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} void select_id_Old_SgNB_UE_X2AP_ID() { set(ignore); type=7;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(5); } UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(6); } UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(6); } SgNB_UE_X2AP_ID& select_id_Old_SgNB_UE_X2AP_ID() { return set(7); } SgNB_UE_X2AP_ID const* get_id_Old_SgNB_UE_X2AP_ID() const { return get(7); } bool is_unknown() const { return type == 8; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; case 6: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; case 7: v(select_id_Old_SgNB_UE_X2AP_ID()); return true; case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(SgNB_UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID)]; char dummy5[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(optional); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(optional); type=2;} void select_id_Cause() { set(optional); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=6;} void select_id_Old_SgNB_UE_X2AP_ID() { set(optional); type=7;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ErrorIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ErrorIndication-IEs}}, ... } */ struct ErrorIndication : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ErrorIndication";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* GNBStatusIndicationIEs X2AP-PROTOCOL-IES ::= { { ID id-GNBOverloadInformation CRITICALITY ignore TYPE GNBOverloadInformation PRESENCE mandatory}, ... } */ struct GNBStatusIndicationIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_GNBOverloadInformation() { set(id_GNBOverloadInformation); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_GNBOverloadInformation)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_GNBOverloadInformation);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_GNBOverloadInformation() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GNBOverloadInformation& select_id_GNBOverloadInformation() { return set(1); } GNBOverloadInformation const* get_id_GNBOverloadInformation() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_GNBOverloadInformation()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GNBOverloadInformation)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_GNBOverloadInformation() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* GNBStatusIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container { { GNBStatusIndicationIEs} }, ... } */ struct GNBStatusIndication : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "GNBStatusIndication";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* HandoverCancel-IEs X2AP-PROTOCOL-IES ::= { { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE optional}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct HandoverCancel_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; case 5: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(UE_X2AP_ID)]; char dummy3[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(optional); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* HandoverCancel ::= SEQUENCE { protocolIEs ProtocolIE-Container {{HandoverCancel-IEs}}, ... } */ struct HandoverCancel : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "HandoverCancel";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* HandoverPreparationFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct HandoverPreparationFailure_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} void select_id_Cause() { set(id_Cause); type=2;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_Cause)) { type = 2; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_Cause() { set(ignore); type=2;} void select_id_CriticalityDiagnostics() { set(ignore); type=3;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } Cause& select_id_Cause() { return set(2); } Cause const* get_id_Cause() const { return get(2); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } bool is_unknown() const { return type == 5; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; case 2: v(select_id_Cause()); return true; case 3: v(select_id_CriticalityDiagnostics()); return true; case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_Cause() { set(mandatory); type=2;} void select_id_CriticalityDiagnostics() { set(optional); type=3;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* HandoverPreparationFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container {{HandoverPreparationFailure-IEs}}, ... } */ struct HandoverPreparationFailure : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "HandoverPreparationFailure";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* MobilityInformation ::= BIT STRING (SIZE(32)) */ struct MobilityInformation : asn::bstring<> { using constraint_t = asn::constraints>; static constexpr const char* name() {return "MobilityInformation";} using parent_t = asn::bstring<>; }; /* HandoverReport-IEs X2AP-PROTOCOL-IES ::= { { ID id-HandoverReportType CRITICALITY ignore TYPE HandoverReportType PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-SourceCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| { ID id-FailureCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE ECGI PRESENCE conditional} -- The IE shall be present if the Handover Report Type IE is set to “HO to Wrong Cell” -- | { ID id-TargetCellInUTRAN CRITICALITY ignore TYPE TargetCellInUTRAN PRESENCE conditional} -- The IE shall be present if the Handover Report Type IE is set to "InterRAT ping-pong" --| { ID id-SourceCellCRNTI CRITICALITY ignore TYPE CRNTI PRESENCE optional}| { ID id-MobilityInformation CRITICALITY ignore TYPE MobilityInformation PRESENCE optional}| { ID id-UE-RLF-Report-Container CRITICALITY ignore TYPE UE-RLF-Report-Container PRESENCE optional}| { ID id-UE-RLF-Report-Container-for-extended-bands CRITICALITY ignore TYPE UE-RLF-Report-Container-for-extended-bands PRESENCE optional}, ... } */ struct HandoverReport_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_HandoverReportType() { set(id_HandoverReportType); type=1;} void select_id_Cause() { set(id_Cause); type=2;} void select_id_SourceCellECGI() { set(id_SourceCellECGI); type=3;} void select_id_FailureCellECGI() { set(id_FailureCellECGI); type=4;} void select_id_Re_establishmentCellECGI() { set(id_Re_establishmentCellECGI); type=5;} void select_id_TargetCellInUTRAN() { set(id_TargetCellInUTRAN); type=6;} void select_id_SourceCellCRNTI() { set(id_SourceCellCRNTI); type=7;} void select_id_MobilityInformation() { set(id_MobilityInformation); type=8;} void select_id_UE_RLF_Report_Container() { set(id_UE_RLF_Report_Container); type=9;} void select_id_UE_RLF_Report_Container_for_extended_bands() { set(id_UE_RLF_Report_Container_for_extended_bands); type=10;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_HandoverReportType)) { type = 1; return true; } else if(equal(id_Cause)) { type = 2; return true; } else if(equal(id_SourceCellECGI)) { type = 3; return true; } else if(equal(id_FailureCellECGI)) { type = 4; return true; } else if(equal(id_Re_establishmentCellECGI)) { type = 5; return true; } else if(equal(id_TargetCellInUTRAN)) { type = 6; return true; } else if(equal(id_SourceCellCRNTI)) { type = 7; return true; } else if(equal(id_MobilityInformation)) { type = 8; return true; } else if(equal(id_UE_RLF_Report_Container)) { type = 9; return true; } else if(equal(id_UE_RLF_Report_Container_for_extended_bands)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_HandoverReportType);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_SourceCellECGI);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_FailureCellECGI);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_Re_establishmentCellECGI);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_TargetCellInUTRAN);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_SourceCellCRNTI);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_MobilityInformation);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container_for_extended_bands);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_HandoverReportType() { set(ignore); type=1;} void select_id_Cause() { set(ignore); type=2;} void select_id_SourceCellECGI() { set(ignore); type=3;} void select_id_FailureCellECGI() { set(ignore); type=4;} void select_id_Re_establishmentCellECGI() { set(ignore); type=5;} void select_id_TargetCellInUTRAN() { set(ignore); type=6;} void select_id_SourceCellCRNTI() { set(ignore); type=7;} void select_id_MobilityInformation() { set(ignore); type=8;} void select_id_UE_RLF_Report_Container() { set(ignore); type=9;} void select_id_UE_RLF_Report_Container_for_extended_bands() { set(ignore); type=10;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else if(equal(ignore)) { type = 8; return true; } else if(equal(ignore)) { type = 9; return true; } else if(equal(ignore)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} HandoverReportType& select_id_HandoverReportType() { return set(1); } HandoverReportType const* get_id_HandoverReportType() const { return get(1); } Cause& select_id_Cause() { return set(2); } Cause const* get_id_Cause() const { return get(2); } ECGI& select_id_SourceCellECGI() { return set(3); } ECGI const* get_id_SourceCellECGI() const { return get(3); } ECGI& select_id_FailureCellECGI() { return set(4); } ECGI const* get_id_FailureCellECGI() const { return get(4); } ECGI& select_id_Re_establishmentCellECGI() { return set(5); } ECGI const* get_id_Re_establishmentCellECGI() const { return get(5); } TargetCellInUTRAN& select_id_TargetCellInUTRAN() { return set(6); } TargetCellInUTRAN const* get_id_TargetCellInUTRAN() const { return get(6); } CRNTI& select_id_SourceCellCRNTI() { return set(7); } CRNTI const* get_id_SourceCellCRNTI() const { return get(7); } MobilityInformation& select_id_MobilityInformation() { return set(8); } MobilityInformation const* get_id_MobilityInformation() const { return get(8); } UE_RLF_Report_Container& select_id_UE_RLF_Report_Container() { return set(9); } UE_RLF_Report_Container const* get_id_UE_RLF_Report_Container() const { return get(9); } UE_RLF_Report_Container_for_extended_bands& select_id_UE_RLF_Report_Container_for_extended_bands() { return set(10); } UE_RLF_Report_Container_for_extended_bands const* get_id_UE_RLF_Report_Container_for_extended_bands() const { return get(10); } bool is_unknown() const { return type == 11; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_HandoverReportType()); return true; case 2: v(select_id_Cause()); return true; case 3: v(select_id_SourceCellECGI()); return true; case 4: v(select_id_FailureCellECGI()); return true; case 5: v(select_id_Re_establishmentCellECGI()); return true; case 6: v(select_id_TargetCellInUTRAN()); return true; case 7: v(select_id_SourceCellCRNTI()); return true; case 8: v(select_id_MobilityInformation()); return true; case 9: v(select_id_UE_RLF_Report_Container()); return true; case 10: v(select_id_UE_RLF_Report_Container_for_extended_bands()); return true; case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CRNTI)]; char dummy2[sizeof(Cause)]; char dummy3[sizeof(ECGI)]; char dummy4[sizeof(HandoverReportType)]; char dummy5[sizeof(MobilityInformation)]; char dummy6[sizeof(TargetCellInUTRAN)]; char dummy7[sizeof(UE_RLF_Report_Container)]; char dummy8[sizeof(UE_RLF_Report_Container_for_extended_bands)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_HandoverReportType() { set(mandatory); type=1;} void select_id_Cause() { set(mandatory); type=2;} void select_id_SourceCellECGI() { set(mandatory); type=3;} void select_id_FailureCellECGI() { set(mandatory); type=4;} void select_id_Re_establishmentCellECGI() { set(conditional); type=5;} void select_id_TargetCellInUTRAN() { set(conditional); type=6;} void select_id_SourceCellCRNTI() { set(optional); type=7;} void select_id_MobilityInformation() { set(optional); type=8;} void select_id_UE_RLF_Report_Container() { set(optional); type=9;} void select_id_UE_RLF_Report_Container_for_extended_bands() { set(optional); type=10;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(mandatory)) { type = 4; return true; } else if(equal(conditional)) { type = 5; return true; } else if(equal(conditional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(conditional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(conditional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* HandoverReport ::= SEQUENCE { protocolIEs ProtocolIE-Container {{HandoverReport-IEs}}, ... } */ struct HandoverReport : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "HandoverReport";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* UE-ContextInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-ManagementBasedMDTallowed CRITICALITY ignore EXTENSION ManagementBasedMDTallowed PRESENCE optional }| { ID id-ManagementBasedMDTPLMNList CRITICALITY ignore EXTENSION MDTPLMNList PRESENCE optional }| { ID id-UESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION UESidelinkAggregateMaximumBitRate PRESENCE optional}, ... } */ struct UE_ContextInformation_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ManagementBasedMDTallowed() { set(id_ManagementBasedMDTallowed); type=1;} void select_id_ManagementBasedMDTPLMNList() { set(id_ManagementBasedMDTPLMNList); type=2;} void select_id_UESidelinkAggregateMaximumBitRate() { set(id_UESidelinkAggregateMaximumBitRate); type=3;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ManagementBasedMDTallowed)) { type = 1; return true; } else if(equal(id_ManagementBasedMDTPLMNList)) { type = 2; return true; } else if(equal(id_UESidelinkAggregateMaximumBitRate)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ManagementBasedMDTallowed);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ManagementBasedMDTPLMNList);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_UESidelinkAggregateMaximumBitRate);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ManagementBasedMDTallowed() { set(ignore); type=1;} void select_id_ManagementBasedMDTPLMNList() { set(ignore); type=2;} void select_id_UESidelinkAggregateMaximumBitRate() { set(ignore); type=3;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} ManagementBasedMDTallowed& select_id_ManagementBasedMDTallowed() { return set(1); } ManagementBasedMDTallowed const* get_id_ManagementBasedMDTallowed() const { return get(1); } MDTPLMNList& select_id_ManagementBasedMDTPLMNList() { return set(2); } MDTPLMNList const* get_id_ManagementBasedMDTPLMNList() const { return get(2); } UESidelinkAggregateMaximumBitRate& select_id_UESidelinkAggregateMaximumBitRate() { return set(3); } UESidelinkAggregateMaximumBitRate const* get_id_UESidelinkAggregateMaximumBitRate() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ManagementBasedMDTallowed()); return true; case 2: v(select_id_ManagementBasedMDTPLMNList()); return true; case 3: v(select_id_UESidelinkAggregateMaximumBitRate()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(MDTPLMNList)]; char dummy2[sizeof(ManagementBasedMDTallowed)]; char dummy3[sizeof(UESidelinkAggregateMaximumBitRate)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ManagementBasedMDTallowed() { set(optional); type=1;} void select_id_ManagementBasedMDTPLMNList() { set(optional); type=2;} void select_id_UESidelinkAggregateMaximumBitRate() { set(optional); type=3;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* UE-ContextInformation ::= SEQUENCE { mME-UE-S1AP-ID UE-S1AP-ID, uESecurityCapabilities UESecurityCapabilities, aS-SecurityInformation AS-SecurityInformation, uEaggregateMaximumBitRate UEAggregateMaximumBitRate, subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, e-RABs-ToBeSetup-List E-RABs-ToBeSetup-List, rRC-Context RRC-Context, handoverRestrictionList HandoverRestrictionList OPTIONAL, locationReportingInformation LocationReportingInformation OPTIONAL, iE-Extensions ProtocolExtensionContainer { {UE-ContextInformation-ExtIEs} } OPTIONAL, ... } */ struct UE_ContextInformation : asn::sequence<10, 0, true, 4> { static constexpr const char* name() {return "UE-ContextInformation";} using parent_t = asn::sequence<10, 0, true, 4>; struct mME_UE_S1AP_ID_t : UE_S1AP_ID { static constexpr const char* name() {return "mME_UE_S1AP_ID_t";} using parent_t = UE_S1AP_ID; }; mME_UE_S1AP_ID_t& ref_mME_UE_S1AP_ID() {return mME_UE_S1AP_ID;} mME_UE_S1AP_ID_t const& ref_mME_UE_S1AP_ID() const {return mME_UE_S1AP_ID;} struct uESecurityCapabilities_t : UESecurityCapabilities { static constexpr const char* name() {return "uESecurityCapabilities_t";} using parent_t = UESecurityCapabilities; }; uESecurityCapabilities_t& ref_uESecurityCapabilities() {return uESecurityCapabilities;} uESecurityCapabilities_t const& ref_uESecurityCapabilities() const {return uESecurityCapabilities;} struct aS_SecurityInformation_t : AS_SecurityInformation { static constexpr const char* name() {return "aS_SecurityInformation_t";} using parent_t = AS_SecurityInformation; }; aS_SecurityInformation_t& ref_aS_SecurityInformation() {return aS_SecurityInformation;} aS_SecurityInformation_t const& ref_aS_SecurityInformation() const {return aS_SecurityInformation;} struct uEaggregateMaximumBitRate_t : UEAggregateMaximumBitRate { static constexpr const char* name() {return "uEaggregateMaximumBitRate_t";} using parent_t = UEAggregateMaximumBitRate; }; uEaggregateMaximumBitRate_t& ref_uEaggregateMaximumBitRate() {return uEaggregateMaximumBitRate;} uEaggregateMaximumBitRate_t const& ref_uEaggregateMaximumBitRate() const {return uEaggregateMaximumBitRate;} struct subscriberProfileIDforRFP_t : SubscriberProfileIDforRFP { static constexpr const char* name() {return "subscriberProfileIDforRFP_t";} using parent_t = SubscriberProfileIDforRFP; static constexpr bool optional = true; }; subscriberProfileIDforRFP_t& set_subscriberProfileIDforRFP() { subscriberProfileIDforRFP.setpresent(true); return subscriberProfileIDforRFP;} subscriberProfileIDforRFP_t const* get_subscriberProfileIDforRFP() const {return subscriberProfileIDforRFP.is_valid() ? &subscriberProfileIDforRFP : nullptr;} struct e_RABs_ToBeSetup_List_t : E_RABs_ToBeSetup_List { static constexpr const char* name() {return "e_RABs_ToBeSetup_List_t";} using parent_t = E_RABs_ToBeSetup_List; }; e_RABs_ToBeSetup_List_t& ref_e_RABs_ToBeSetup_List() {return e_RABs_ToBeSetup_List;} e_RABs_ToBeSetup_List_t const& ref_e_RABs_ToBeSetup_List() const {return e_RABs_ToBeSetup_List;} struct rRC_Context_t : RRC_Context { static constexpr const char* name() {return "rRC_Context_t";} using parent_t = RRC_Context; }; rRC_Context_t& ref_rRC_Context() {return rRC_Context;} rRC_Context_t const& ref_rRC_Context() const {return rRC_Context;} struct handoverRestrictionList_t : HandoverRestrictionList { static constexpr const char* name() {return "handoverRestrictionList_t";} using parent_t = HandoverRestrictionList; static constexpr bool optional = true; }; handoverRestrictionList_t& set_handoverRestrictionList() { handoverRestrictionList.setpresent(true); return handoverRestrictionList;} handoverRestrictionList_t const* get_handoverRestrictionList() const {return handoverRestrictionList.is_valid() ? &handoverRestrictionList : nullptr;} struct locationReportingInformation_t : LocationReportingInformation { static constexpr const char* name() {return "locationReportingInformation_t";} using parent_t = LocationReportingInformation; static constexpr bool optional = true; }; locationReportingInformation_t& set_locationReportingInformation() { locationReportingInformation.setpresent(true); return locationReportingInformation;} locationReportingInformation_t const* get_locationReportingInformation() const {return locationReportingInformation.is_valid() ? &locationReportingInformation : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(mME_UE_S1AP_ID); v(uESecurityCapabilities); v(aS_SecurityInformation); v(uEaggregateMaximumBitRate); v(subscriberProfileIDforRFP); v(e_RABs_ToBeSetup_List); v(rRC_Context); v(handoverRestrictionList); v(locationReportingInformation); v(iE_Extensions); }; template void encode(V& v) const { v(mME_UE_S1AP_ID); v(uESecurityCapabilities); v(aS_SecurityInformation); v(uEaggregateMaximumBitRate); v(subscriberProfileIDforRFP); v(e_RABs_ToBeSetup_List); v(rRC_Context); v(handoverRestrictionList); v(locationReportingInformation); v(iE_Extensions); }; void clear() { mME_UE_S1AP_ID.clear(); uESecurityCapabilities.clear(); aS_SecurityInformation.clear(); uEaggregateMaximumBitRate.clear(); subscriberProfileIDforRFP.clear(); e_RABs_ToBeSetup_List.clear(); rRC_Context.clear(); handoverRestrictionList.clear(); locationReportingInformation.clear(); iE_Extensions.clear(); }; private: mME_UE_S1AP_ID_t mME_UE_S1AP_ID; uESecurityCapabilities_t uESecurityCapabilities; aS_SecurityInformation_t aS_SecurityInformation; uEaggregateMaximumBitRate_t uEaggregateMaximumBitRate; subscriberProfileIDforRFP_t subscriberProfileIDforRFP; e_RABs_ToBeSetup_List_t e_RABs_ToBeSetup_List; rRC_Context_t rRC_Context; handoverRestrictionList_t handoverRestrictionList; locationReportingInformation_t locationReportingInformation; iE_Extensions_t iE_Extensions; }; /* UE-ContextReferenceAtSeNB-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct UE_ContextReferenceAtSeNB_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* UE-ContextReferenceAtSeNB ::= SEQUENCE { source-GlobalSeNB-ID GlobalENB-ID, seNB-UE-X2AP-ID UE-X2AP-ID, seNB-UE-X2AP-ID-Extension UE-X2AP-ID-Extension, iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtSeNB-ItemExtIEs} } OPTIONAL, ... } */ struct UE_ContextReferenceAtSeNB : asn::sequence<4, 0, true, 1> { static constexpr const char* name() {return "UE-ContextReferenceAtSeNB";} using parent_t = asn::sequence<4, 0, true, 1>; struct source_GlobalSeNB_ID_t : GlobalENB_ID { static constexpr const char* name() {return "source_GlobalSeNB_ID_t";} using parent_t = GlobalENB_ID; }; source_GlobalSeNB_ID_t& ref_source_GlobalSeNB_ID() {return source_GlobalSeNB_ID;} source_GlobalSeNB_ID_t const& ref_source_GlobalSeNB_ID() const {return source_GlobalSeNB_ID;} struct seNB_UE_X2AP_ID_t : UE_X2AP_ID { static constexpr const char* name() {return "seNB_UE_X2AP_ID_t";} using parent_t = UE_X2AP_ID; }; seNB_UE_X2AP_ID_t& ref_seNB_UE_X2AP_ID() {return seNB_UE_X2AP_ID;} seNB_UE_X2AP_ID_t const& ref_seNB_UE_X2AP_ID() const {return seNB_UE_X2AP_ID;} struct seNB_UE_X2AP_ID_Extension_t : UE_X2AP_ID_Extension { static constexpr const char* name() {return "seNB_UE_X2AP_ID_Extension_t";} using parent_t = UE_X2AP_ID_Extension; }; seNB_UE_X2AP_ID_Extension_t& ref_seNB_UE_X2AP_ID_Extension() {return seNB_UE_X2AP_ID_Extension;} seNB_UE_X2AP_ID_Extension_t const& ref_seNB_UE_X2AP_ID_Extension() const {return seNB_UE_X2AP_ID_Extension;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(source_GlobalSeNB_ID); v(seNB_UE_X2AP_ID); v(seNB_UE_X2AP_ID_Extension); v(iE_Extensions); }; template void encode(V& v) const { v(source_GlobalSeNB_ID); v(seNB_UE_X2AP_ID); v(seNB_UE_X2AP_ID_Extension); v(iE_Extensions); }; void clear() { source_GlobalSeNB_ID.clear(); seNB_UE_X2AP_ID.clear(); seNB_UE_X2AP_ID_Extension.clear(); iE_Extensions.clear(); }; private: source_GlobalSeNB_ID_t source_GlobalSeNB_ID; seNB_UE_X2AP_ID_t seNB_UE_X2AP_ID; seNB_UE_X2AP_ID_Extension_t seNB_UE_X2AP_ID_Extension; iE_Extensions_t iE_Extensions; }; /* UE-ContextReferenceAtWT-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct UE_ContextReferenceAtWT_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* UE-ContextReferenceAtWT ::= SEQUENCE { wTID WTID, wT-UE-XwAP-ID WT-UE-XwAP-ID, iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtWT-ItemExtIEs} } OPTIONAL, ... } */ struct UE_ContextReferenceAtWT : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "UE-ContextReferenceAtWT";} using parent_t = asn::sequence<3, 0, true, 1>; struct wTID_t : WTID { static constexpr const char* name() {return "wTID_t";} using parent_t = WTID; }; wTID_t& ref_wTID() {return wTID;} wTID_t const& ref_wTID() const {return wTID;} struct wT_UE_XwAP_ID_t : WT_UE_XwAP_ID { static constexpr const char* name() {return "wT_UE_XwAP_ID_t";} using parent_t = WT_UE_XwAP_ID; }; wT_UE_XwAP_ID_t& ref_wT_UE_XwAP_ID() {return wT_UE_XwAP_ID;} wT_UE_XwAP_ID_t const& ref_wT_UE_XwAP_ID() const {return wT_UE_XwAP_ID;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(wTID); v(wT_UE_XwAP_ID); v(iE_Extensions); }; template void encode(V& v) const { v(wTID); v(wT_UE_XwAP_ID); v(iE_Extensions); }; void clear() { wTID.clear(); wT_UE_XwAP_ID.clear(); iE_Extensions.clear(); }; private: wTID_t wTID; wT_UE_XwAP_ID_t wT_UE_XwAP_ID; iE_Extensions_t iE_Extensions; }; /* UE-ContextReferenceAtSgNB-ItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct UE_ContextReferenceAtSgNB_ItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* UE-ContextReferenceAtSgNB ::= SEQUENCE { source-GlobalSgNB-ID GlobalGNB-ID, sgNB-UE-X2AP-ID SgNB-UE-X2AP-ID, iE-Extensions ProtocolExtensionContainer { {UE-ContextReferenceAtSgNB-ItemExtIEs} } OPTIONAL, ... } */ struct UE_ContextReferenceAtSgNB : asn::sequence<3, 0, true, 1> { static constexpr const char* name() {return "UE-ContextReferenceAtSgNB";} using parent_t = asn::sequence<3, 0, true, 1>; struct source_GlobalSgNB_ID_t : GlobalGNB_ID { static constexpr const char* name() {return "source_GlobalSgNB_ID_t";} using parent_t = GlobalGNB_ID; }; source_GlobalSgNB_ID_t& ref_source_GlobalSgNB_ID() {return source_GlobalSgNB_ID;} source_GlobalSgNB_ID_t const& ref_source_GlobalSgNB_ID() const {return source_GlobalSgNB_ID;} struct sgNB_UE_X2AP_ID_t : SgNB_UE_X2AP_ID { static constexpr const char* name() {return "sgNB_UE_X2AP_ID_t";} using parent_t = SgNB_UE_X2AP_ID; }; sgNB_UE_X2AP_ID_t& ref_sgNB_UE_X2AP_ID() {return sgNB_UE_X2AP_ID;} sgNB_UE_X2AP_ID_t const& ref_sgNB_UE_X2AP_ID() const {return sgNB_UE_X2AP_ID;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(source_GlobalSgNB_ID); v(sgNB_UE_X2AP_ID); v(iE_Extensions); }; template void encode(V& v) const { v(source_GlobalSgNB_ID); v(sgNB_UE_X2AP_ID); v(iE_Extensions); }; void clear() { source_GlobalSgNB_ID.clear(); sgNB_UE_X2AP_ID.clear(); iE_Extensions.clear(); }; private: source_GlobalSgNB_ID_t source_GlobalSgNB_ID; sgNB_UE_X2AP_ID_t sgNB_UE_X2AP_ID; iE_Extensions_t iE_Extensions; }; /* HandoverRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-TargetCell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE mandatory}| { ID id-UE-ContextInformation CRITICALITY reject TYPE UE-ContextInformation PRESENCE mandatory}| { ID id-UE-HistoryInformation CRITICALITY ignore TYPE UE-HistoryInformation PRESENCE mandatory}| { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| { ID id-MobilityInformation CRITICALITY ignore TYPE MobilityInformation PRESENCE optional}| { ID id-Masked-IMEISV CRITICALITY ignore TYPE Masked-IMEISV PRESENCE optional}| { ID id-UE-HistoryInformationFromTheUE CRITICALITY ignore TYPE UE-HistoryInformationFromTheUE PRESENCE optional}| { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| { ID id-UE-ContextReferenceAtSeNB CRITICALITY ignore TYPE UE-ContextReferenceAtSeNB PRESENCE optional}| { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| { ID id-UE-ContextReferenceAtWT CRITICALITY ignore TYPE UE-ContextReferenceAtWT PRESENCE optional}| { ID id-NRUESecurityCapabilities CRITICALITY ignore TYPE NRUESecurityCapabilities PRESENCE optional}| { ID id-UE-ContextReferenceAtSgNB CRITICALITY ignore TYPE UE-ContextReferenceAtSgNB PRESENCE optional}| { ID id-AerialUEsubscriptionInformation CRITICALITY ignore TYPE AerialUEsubscriptionInformation PRESENCE optional}| { ID id-Subscription-Based-UE-DifferentiationInfo CRITICALITY ignore TYPE Subscription-Based-UE-DifferentiationInfo PRESENCE optional}, ... } */ struct HandoverRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 23; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} void select_id_Cause() { set(id_Cause); type=2;} void select_id_TargetCell_ID() { set(id_TargetCell_ID); type=3;} void select_id_GUMMEI_ID() { set(id_GUMMEI_ID); type=4;} void select_id_UE_ContextInformation() { set(id_UE_ContextInformation); type=5;} void select_id_UE_HistoryInformation() { set(id_UE_HistoryInformation); type=6;} void select_id_TraceActivation() { set(id_TraceActivation); type=7;} void select_id_SRVCCOperationPossible() { set(id_SRVCCOperationPossible); type=8;} void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=9;} void select_id_MobilityInformation() { set(id_MobilityInformation); type=10;} void select_id_Masked_IMEISV() { set(id_Masked_IMEISV); type=11;} void select_id_UE_HistoryInformationFromTheUE() { set(id_UE_HistoryInformationFromTheUE); type=12;} void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=13;} void select_id_ProSeAuthorized() { set(id_ProSeAuthorized); type=14;} void select_id_UE_ContextReferenceAtSeNB() { set(id_UE_ContextReferenceAtSeNB); type=15;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=16;} void select_id_V2XServicesAuthorized() { set(id_V2XServicesAuthorized); type=17;} void select_id_UE_ContextReferenceAtWT() { set(id_UE_ContextReferenceAtWT); type=18;} void select_id_NRUESecurityCapabilities() { set(id_NRUESecurityCapabilities); type=19;} void select_id_UE_ContextReferenceAtSgNB() { set(id_UE_ContextReferenceAtSgNB); type=20;} void select_id_AerialUEsubscriptionInformation() { set(id_AerialUEsubscriptionInformation); type=21;} void select_id_Subscription_Based_UE_DifferentiationInfo() { set(id_Subscription_Based_UE_DifferentiationInfo); type=22;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_Cause)) { type = 2; return true; } else if(equal(id_TargetCell_ID)) { type = 3; return true; } else if(equal(id_GUMMEI_ID)) { type = 4; return true; } else if(equal(id_UE_ContextInformation)) { type = 5; return true; } else if(equal(id_UE_HistoryInformation)) { type = 6; return true; } else if(equal(id_TraceActivation)) { type = 7; return true; } else if(equal(id_SRVCCOperationPossible)) { type = 8; return true; } else if(equal(id_CSGMembershipStatus)) { type = 9; return true; } else if(equal(id_MobilityInformation)) { type = 10; return true; } else if(equal(id_Masked_IMEISV)) { type = 11; return true; } else if(equal(id_UE_HistoryInformationFromTheUE)) { type = 12; return true; } else if(equal(id_ExpectedUEBehaviour)) { type = 13; return true; } else if(equal(id_ProSeAuthorized)) { type = 14; return true; } else if(equal(id_UE_ContextReferenceAtSeNB)) { type = 15; return true; } else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 16; return true; } else if(equal(id_V2XServicesAuthorized)) { type = 17; return true; } else if(equal(id_UE_ContextReferenceAtWT)) { type = 18; return true; } else if(equal(id_NRUESecurityCapabilities)) { type = 19; return true; } else if(equal(id_UE_ContextReferenceAtSgNB)) { type = 20; return true; } else if(equal(id_AerialUEsubscriptionInformation)) { type = 21; return true; } else if(equal(id_Subscription_Based_UE_DifferentiationInfo)) { type = 22; return true; } else { type = 23; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_Cause);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_TargetCell_ID);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_GUMMEI_ID);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextInformation);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_HistoryInformation);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_TraceActivation);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_SRVCCOperationPossible);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_MobilityInformation);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(id_Masked_IMEISV);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(id_UE_HistoryInformationFromTheUE);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; case 14: type = 14; if(v(ref_nested())) { return equal(id_ProSeAuthorized);} return false; case 15: type = 15; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtSeNB);} return false; case 16: type = 16; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; case 17: type = 17; if(v(ref_nested())) { return equal(id_V2XServicesAuthorized);} return false; case 18: type = 18; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtWT);} return false; case 19: type = 19; if(v(ref_nested())) { return equal(id_NRUESecurityCapabilities);} return false; case 20: type = 20; if(v(ref_nested())) { return equal(id_UE_ContextReferenceAtSgNB);} return false; case 21: type = 21; if(v(ref_nested())) { return equal(id_AerialUEsubscriptionInformation);} return false; case 22: type = 22; if(v(ref_nested())) { return equal(id_Subscription_Based_UE_DifferentiationInfo);} return false; case 23: type = 23; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 23; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_Cause() { set(ignore); type=2;} void select_id_TargetCell_ID() { set(reject); type=3;} void select_id_GUMMEI_ID() { set(reject); type=4;} void select_id_UE_ContextInformation() { set(reject); type=5;} void select_id_UE_HistoryInformation() { set(ignore); type=6;} void select_id_TraceActivation() { set(ignore); type=7;} void select_id_SRVCCOperationPossible() { set(ignore); type=8;} void select_id_CSGMembershipStatus() { set(reject); type=9;} void select_id_MobilityInformation() { set(ignore); type=10;} void select_id_Masked_IMEISV() { set(ignore); type=11;} void select_id_UE_HistoryInformationFromTheUE() { set(ignore); type=12;} void select_id_ExpectedUEBehaviour() { set(ignore); type=13;} void select_id_ProSeAuthorized() { set(ignore); type=14;} void select_id_UE_ContextReferenceAtSeNB() { set(ignore); type=15;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=16;} void select_id_V2XServicesAuthorized() { set(ignore); type=17;} void select_id_UE_ContextReferenceAtWT() { set(ignore); type=18;} void select_id_NRUESecurityCapabilities() { set(ignore); type=19;} void select_id_UE_ContextReferenceAtSgNB() { set(ignore); type=20;} void select_id_AerialUEsubscriptionInformation() { set(ignore); type=21;} void select_id_Subscription_Based_UE_DifferentiationInfo() { set(ignore); type=22;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else if(equal(ignore)) { type = 8; return true; } else if(equal(reject)) { type = 9; return true; } else if(equal(ignore)) { type = 10; return true; } else if(equal(ignore)) { type = 11; return true; } else if(equal(ignore)) { type = 12; return true; } else if(equal(ignore)) { type = 13; return true; } else if(equal(ignore)) { type = 14; return true; } else if(equal(ignore)) { type = 15; return true; } else if(equal(reject)) { type = 16; return true; } else if(equal(ignore)) { type = 17; return true; } else if(equal(ignore)) { type = 18; return true; } else if(equal(ignore)) { type = 19; return true; } else if(equal(ignore)) { type = 20; return true; } else if(equal(ignore)) { type = 21; return true; } else if(equal(ignore)) { type = 22; return true; } else { type = 23; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; case 17: type = 17; if(v(ref_nested())) { return equal(ignore);} return false; case 18: type = 18; if(v(ref_nested())) { return equal(ignore);} return false; case 19: type = 19; if(v(ref_nested())) { return equal(ignore);} return false; case 20: type = 20; if(v(ref_nested())) { return equal(ignore);} return false; case 21: type = 21; if(v(ref_nested())) { return equal(ignore);} return false; case 22: type = 22; if(v(ref_nested())) { return equal(ignore);} return false; case 23: type = 23; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } Cause& select_id_Cause() { return set(2); } Cause const* get_id_Cause() const { return get(2); } ECGI& select_id_TargetCell_ID() { return set(3); } ECGI const* get_id_TargetCell_ID() const { return get(3); } GUMMEI& select_id_GUMMEI_ID() { return set(4); } GUMMEI const* get_id_GUMMEI_ID() const { return get(4); } UE_ContextInformation& select_id_UE_ContextInformation() { return set(5); } UE_ContextInformation const* get_id_UE_ContextInformation() const { return get(5); } UE_HistoryInformation& select_id_UE_HistoryInformation() { return set(6); } UE_HistoryInformation const* get_id_UE_HistoryInformation() const { return get(6); } TraceActivation& select_id_TraceActivation() { return set(7); } TraceActivation const* get_id_TraceActivation() const { return get(7); } SRVCCOperationPossible& select_id_SRVCCOperationPossible() { return set(8); } SRVCCOperationPossible const* get_id_SRVCCOperationPossible() const { return get(8); } CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(9); } CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(9); } MobilityInformation& select_id_MobilityInformation() { return set(10); } MobilityInformation const* get_id_MobilityInformation() const { return get(10); } Masked_IMEISV& select_id_Masked_IMEISV() { return set(11); } Masked_IMEISV const* get_id_Masked_IMEISV() const { return get(11); } UE_HistoryInformationFromTheUE& select_id_UE_HistoryInformationFromTheUE() { return set(12); } UE_HistoryInformationFromTheUE const* get_id_UE_HistoryInformationFromTheUE() const { return get(12); } ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(13); } ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(13); } ProSeAuthorized& select_id_ProSeAuthorized() { return set(14); } ProSeAuthorized const* get_id_ProSeAuthorized() const { return get(14); } UE_ContextReferenceAtSeNB& select_id_UE_ContextReferenceAtSeNB() { return set(15); } UE_ContextReferenceAtSeNB const* get_id_UE_ContextReferenceAtSeNB() const { return get(15); } UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(16); } UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(16); } V2XServicesAuthorized& select_id_V2XServicesAuthorized() { return set(17); } V2XServicesAuthorized const* get_id_V2XServicesAuthorized() const { return get(17); } UE_ContextReferenceAtWT& select_id_UE_ContextReferenceAtWT() { return set(18); } UE_ContextReferenceAtWT const* get_id_UE_ContextReferenceAtWT() const { return get(18); } NRUESecurityCapabilities& select_id_NRUESecurityCapabilities() { return set(19); } NRUESecurityCapabilities const* get_id_NRUESecurityCapabilities() const { return get(19); } UE_ContextReferenceAtSgNB& select_id_UE_ContextReferenceAtSgNB() { return set(20); } UE_ContextReferenceAtSgNB const* get_id_UE_ContextReferenceAtSgNB() const { return get(20); } AerialUEsubscriptionInformation& select_id_AerialUEsubscriptionInformation() { return set(21); } AerialUEsubscriptionInformation const* get_id_AerialUEsubscriptionInformation() const { return get(21); } Subscription_Based_UE_DifferentiationInfo& select_id_Subscription_Based_UE_DifferentiationInfo() { return set(22); } Subscription_Based_UE_DifferentiationInfo const* get_id_Subscription_Based_UE_DifferentiationInfo() const { return get(22); } bool is_unknown() const { return type == 23; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; case 11: var.destroy(); break; case 12: var.destroy(); break; case 13: var.destroy(); break; case 14: var.destroy(); break; case 15: var.destroy(); break; case 16: var.destroy(); break; case 17: var.destroy(); break; case 18: var.destroy(); break; case 19: var.destroy(); break; case 20: var.destroy(); break; case 21: var.destroy(); break; case 22: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); v.template operator()(11); v.template operator()(12); v.template operator()(13); v.template operator()(14); v.template operator()(15); v.template operator()(16); v.template operator()(17); v.template operator()(18); v.template operator()(19); v.template operator()(20); v.template operator()(21); v.template operator()(22); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; case 2: v(select_id_Cause()); return true; case 3: v(select_id_TargetCell_ID()); return true; case 4: v(select_id_GUMMEI_ID()); return true; case 5: v(select_id_UE_ContextInformation()); return true; case 6: v(select_id_UE_HistoryInformation()); return true; case 7: v(select_id_TraceActivation()); return true; case 8: v(select_id_SRVCCOperationPossible()); return true; case 9: v(select_id_CSGMembershipStatus()); return true; case 10: v(select_id_MobilityInformation()); return true; case 11: v(select_id_Masked_IMEISV()); return true; case 12: v(select_id_UE_HistoryInformationFromTheUE()); return true; case 13: v(select_id_ExpectedUEBehaviour()); return true; case 14: v(select_id_ProSeAuthorized()); return true; case 15: v(select_id_UE_ContextReferenceAtSeNB()); return true; case 16: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; case 17: v(select_id_V2XServicesAuthorized()); return true; case 18: v(select_id_UE_ContextReferenceAtWT()); return true; case 19: v(select_id_NRUESecurityCapabilities()); return true; case 20: v(select_id_UE_ContextReferenceAtSgNB()); return true; case 21: v(select_id_AerialUEsubscriptionInformation()); return true; case 22: v(select_id_Subscription_Based_UE_DifferentiationInfo()); return true; case 23: if(type != 23) {clear(); asn::base::set();} type = 23; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; case 11: v(var.as()); return true; case 12: v(var.as()); return true; case 13: v(var.as()); return true; case 14: v(var.as()); return true; case 15: v(var.as()); return true; case 16: v(var.as()); return true; case 17: v(var.as()); return true; case 18: v(var.as()); return true; case 19: v(var.as()); return true; case 20: v(var.as()); return true; case 21: v(var.as()); return true; case 22: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(AerialUEsubscriptionInformation)]; char dummy2[sizeof(CSGMembershipStatus)]; char dummy3[sizeof(Cause)]; char dummy4[sizeof(ECGI)]; char dummy5[sizeof(ExpectedUEBehaviour)]; char dummy6[sizeof(GUMMEI)]; char dummy7[sizeof(Masked_IMEISV)]; char dummy8[sizeof(MobilityInformation)]; char dummy9[sizeof(NRUESecurityCapabilities)]; char dummy10[sizeof(ProSeAuthorized)]; char dummy11[sizeof(SRVCCOperationPossible)]; char dummy12[sizeof(Subscription_Based_UE_DifferentiationInfo)]; char dummy13[sizeof(TraceActivation)]; char dummy14[sizeof(UE_ContextInformation)]; char dummy15[sizeof(UE_ContextReferenceAtSeNB)]; char dummy16[sizeof(UE_ContextReferenceAtSgNB)]; char dummy17[sizeof(UE_ContextReferenceAtWT)]; char dummy18[sizeof(UE_HistoryInformation)]; char dummy19[sizeof(UE_HistoryInformationFromTheUE)]; char dummy20[sizeof(UE_X2AP_ID)]; char dummy21[sizeof(UE_X2AP_ID_Extension)]; char dummy22[sizeof(V2XServicesAuthorized)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 23; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_Cause() { set(mandatory); type=2;} void select_id_TargetCell_ID() { set(mandatory); type=3;} void select_id_GUMMEI_ID() { set(mandatory); type=4;} void select_id_UE_ContextInformation() { set(mandatory); type=5;} void select_id_UE_HistoryInformation() { set(mandatory); type=6;} void select_id_TraceActivation() { set(optional); type=7;} void select_id_SRVCCOperationPossible() { set(optional); type=8;} void select_id_CSGMembershipStatus() { set(optional); type=9;} void select_id_MobilityInformation() { set(optional); type=10;} void select_id_Masked_IMEISV() { set(optional); type=11;} void select_id_UE_HistoryInformationFromTheUE() { set(optional); type=12;} void select_id_ExpectedUEBehaviour() { set(optional); type=13;} void select_id_ProSeAuthorized() { set(optional); type=14;} void select_id_UE_ContextReferenceAtSeNB() { set(optional); type=15;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=16;} void select_id_V2XServicesAuthorized() { set(optional); type=17;} void select_id_UE_ContextReferenceAtWT() { set(optional); type=18;} void select_id_NRUESecurityCapabilities() { set(optional); type=19;} void select_id_UE_ContextReferenceAtSgNB() { set(optional); type=20;} void select_id_AerialUEsubscriptionInformation() { set(optional); type=21;} void select_id_Subscription_Based_UE_DifferentiationInfo() { set(optional); type=22;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(mandatory)) { type = 4; return true; } else if(equal(mandatory)) { type = 5; return true; } else if(equal(mandatory)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else if(equal(optional)) { type = 11; return true; } else if(equal(optional)) { type = 12; return true; } else if(equal(optional)) { type = 13; return true; } else if(equal(optional)) { type = 14; return true; } else if(equal(optional)) { type = 15; return true; } else if(equal(optional)) { type = 16; return true; } else if(equal(optional)) { type = 17; return true; } else if(equal(optional)) { type = 18; return true; } else if(equal(optional)) { type = 19; return true; } else if(equal(optional)) { type = 20; return true; } else if(equal(optional)) { type = 21; return true; } else if(equal(optional)) { type = 22; return true; } else { type = 23; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; case 16: type = 16; if(v(ref_nested())) { return equal(optional);} return false; case 17: type = 17; if(v(ref_nested())) { return equal(optional);} return false; case 18: type = 18; if(v(ref_nested())) { return equal(optional);} return false; case 19: type = 19; if(v(ref_nested())) { return equal(optional);} return false; case 20: type = 20; if(v(ref_nested())) { return equal(optional);} return false; case 21: type = 21; if(v(ref_nested())) { return equal(optional);} return false; case 22: type = 22; if(v(ref_nested())) { return equal(optional);} return false; case 23: type = 23; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* HandoverRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{HandoverRequest-IEs}}, ... } */ struct HandoverRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "HandoverRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* HandoverRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-E-RABs-Admitted-List CRITICALITY ignore TYPE E-RABs-Admitted-List PRESENCE mandatory}| { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| { ID id-TargeteNBtoSource-eNBTransparentContainer CRITICALITY ignore TYPE TargeteNBtoSource-eNBTransparentContainer PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-WT-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}, ... } */ struct HandoverRequestAcknowledge_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 12; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} void select_id_E_RABs_Admitted_List() { set(id_E_RABs_Admitted_List); type=3;} void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(id_TargeteNBtoSource_eNBTransparentContainer); type=5;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=7;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=8;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=9;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=10;} void select_id_WT_UE_ContextKeptIndicator() { set(id_WT_UE_ContextKeptIndicator); type=11;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_E_RABs_Admitted_List)) { type = 3; return true; } else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } else if(equal(id_TargeteNBtoSource_eNBTransparentContainer)) { type = 5; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } else if(equal(id_UE_ContextKeptIndicator)) { type = 7; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 8; return true; } else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 9; return true; } else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 10; return true; } else if(equal(id_WT_UE_ContextKeptIndicator)) { type = 11; return true; } else { type = 12; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_List);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_TargeteNBtoSource_eNBTransparentContainer);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(id_WT_UE_ContextKeptIndicator);} return false; case 12: type = 12; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 12; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_E_RABs_Admitted_List() { set(ignore); type=3;} void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(ignore); type=5;} void select_id_CriticalityDiagnostics() { set(ignore); type=6;} void select_id_UE_ContextKeptIndicator() { set(ignore); type=7;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=8;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=10;} void select_id_WT_UE_ContextKeptIndicator() { set(ignore); type=11;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else if(equal(ignore)) { type = 8; return true; } else if(equal(ignore)) { type = 9; return true; } else if(equal(reject)) { type = 10; return true; } else if(equal(ignore)) { type = 11; return true; } else { type = 12; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; case 12: type = 12; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } E_RABs_Admitted_List& select_id_E_RABs_Admitted_List() { return set(3); } E_RABs_Admitted_List const* get_id_E_RABs_Admitted_List() const { return get(3); } E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } TargeteNBtoSource_eNBTransparentContainer& select_id_TargeteNBtoSource_eNBTransparentContainer() { return set(5); } TargeteNBtoSource_eNBTransparentContainer const* get_id_TargeteNBtoSource_eNBTransparentContainer() const { return get(5); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(7); } UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(7); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(8); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(8); } UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(9); } UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(9); } UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(10); } UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(10); } UE_ContextKeptIndicator& select_id_WT_UE_ContextKeptIndicator() { return set(11); } UE_ContextKeptIndicator const* get_id_WT_UE_ContextKeptIndicator() const { return get(11); } bool is_unknown() const { return type == 12; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; case 11: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); v.template operator()(11); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; case 3: v(select_id_E_RABs_Admitted_List()); return true; case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; case 5: v(select_id_TargeteNBtoSource_eNBTransparentContainer()); return true; case 6: v(select_id_CriticalityDiagnostics()); return true; case 7: v(select_id_UE_ContextKeptIndicator()); return true; case 8: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 9: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; case 10: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; case 11: v(select_id_WT_UE_ContextKeptIndicator()); return true; case 12: if(type != 12) {clear(); asn::base::set();} type = 12; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; case 11: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(E_RAB_List)]; char dummy3[sizeof(E_RABs_Admitted_List)]; char dummy4[sizeof(TargeteNBtoSource_eNBTransparentContainer)]; char dummy5[sizeof(UE_ContextKeptIndicator)]; char dummy6[sizeof(UE_X2AP_ID)]; char dummy7[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 12; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_E_RABs_Admitted_List() { set(mandatory); type=3;} void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} void select_id_TargeteNBtoSource_eNBTransparentContainer() { set(mandatory); type=5;} void select_id_CriticalityDiagnostics() { set(optional); type=6;} void select_id_UE_ContextKeptIndicator() { set(optional); type=7;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=8;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=9;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=10;} void select_id_WT_UE_ContextKeptIndicator() { set(optional); type=11;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(mandatory)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else if(equal(optional)) { type = 11; return true; } else { type = 12; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; case 12: type = 12; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* HandoverRequestAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container {{HandoverRequestAcknowledge-IEs}}, ... } */ struct HandoverRequestAcknowledge : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "HandoverRequestAcknowledge";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* LoadInformation-IEs X2AP-PROTOCOL-IES ::= { { ID id-CellInformation CRITICALITY ignore TYPE CellInformation-List PRESENCE mandatory} , ... } */ struct LoadInformation_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_CellInformation() { set(id_CellInformation); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_CellInformation)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_CellInformation);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_CellInformation() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} CellInformation_List& select_id_CellInformation() { return set(1); } CellInformation_List const* get_id_CellInformation() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_CellInformation()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CellInformation_List)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_CellInformation() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* LoadInformation ::= SEQUENCE { protocolIEs ProtocolIE-Container {{LoadInformation-IEs}}, ... } */ struct LoadInformation : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "LoadInformation";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* MeasurementInitiationResult-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct MeasurementInitiationResult_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* MeasurementInitiationResult-Item ::= SEQUENCE { cell-ID ECGI, measurementFailureCause-List MeasurementFailureCause-List OPTIONAL, iE-Extensions ProtocolExtensionContainer { {MeasurementInitiationResult-Item-ExtIEs} } OPTIONAL, ... } */ struct MeasurementInitiationResult_Item : asn::sequence<3, 0, true, 2> { static constexpr const char* name() {return "MeasurementInitiationResult-Item";} using parent_t = asn::sequence<3, 0, true, 2>; struct cell_ID_t : ECGI { static constexpr const char* name() {return "cell_ID_t";} using parent_t = ECGI; }; cell_ID_t& ref_cell_ID() {return cell_ID;} cell_ID_t const& ref_cell_ID() const {return cell_ID;} struct measurementFailureCause_List_t : MeasurementFailureCause_List { static constexpr const char* name() {return "measurementFailureCause_List_t";} using parent_t = MeasurementFailureCause_List; static constexpr bool optional = true; }; measurementFailureCause_List_t& set_measurementFailureCause_List() { measurementFailureCause_List.setpresent(true); return measurementFailureCause_List;} measurementFailureCause_List_t const* get_measurementFailureCause_List() const {return measurementFailureCause_List.is_valid() ? &measurementFailureCause_List : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(cell_ID); v(measurementFailureCause_List); v(iE_Extensions); }; template void encode(V& v) const { v(cell_ID); v(measurementFailureCause_List); v(iE_Extensions); }; void clear() { cell_ID.clear(); measurementFailureCause_List.clear(); iE_Extensions.clear(); }; private: cell_ID_t cell_ID; measurementFailureCause_List_t measurementFailureCause_List; iE_Extensions_t iE_Extensions; }; /* MeasurementInitiationResult-ItemIEs X2AP-PROTOCOL-IES ::= { { ID id-MeasurementInitiationResult-Item CRITICALITY ignore TYPE MeasurementInitiationResult-Item PRESENCE mandatory} } */ struct MeasurementInitiationResult_ItemIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_MeasurementInitiationResult_Item() { set(id_MeasurementInitiationResult_Item); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeasurementInitiationResult_Item)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeasurementInitiationResult_Item);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_MeasurementInitiationResult_Item() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} MeasurementInitiationResult_Item& select_id_MeasurementInitiationResult_Item() { return set(1); } MeasurementInitiationResult_Item const* get_id_MeasurementInitiationResult_Item() const { return get(1); } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeasurementInitiationResult_Item()); return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(MeasurementInitiationResult_Item)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} void clear() {type = 0;} void select_id_MeasurementInitiationResult_Item() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* MeasurementInitiationResult-List ::= SEQUENCE (SIZE (1..maxCellineNB)) OF ProtocolIE-Single-Container { {MeasurementInitiationResult-ItemIEs} } */ struct MeasurementInitiationResult_List_elm : ProtocolIE_Single_Container { static constexpr const char* name() {return "MeasurementInitiationResult_List_elm";} using parent_t = ProtocolIE_Single_Container; }; struct MeasurementInitiationResult_List : asn::sequenceof { static constexpr const char* name() {return "MeasurementInitiationResult-List";} using parent_t = asn::sequenceof; using constraint_t = asn::constraints>; }; /* MobilityChangeAcknowledge-IEs X2AP-PROTOCOL-IES ::= { { ID id-ENB1-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| { ID id-ENB2-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, ... } */ struct MobilityChangeAcknowledge_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ENB1_Cell_ID() { set(reject); type=1;} void select_id_ENB2_Cell_ID() { set(reject); type=2;} void select_id_CriticalityDiagnostics() { set(ignore); type=3;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} ECGI& select_id_ENB1_Cell_ID() { return set(1); } ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } ECGI& select_id_ENB2_Cell_ID() { return set(2); } ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ENB1_Cell_ID()); return true; case 2: v(select_id_ENB2_Cell_ID()); return true; case 3: v(select_id_CriticalityDiagnostics()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(ECGI)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} void select_id_CriticalityDiagnostics() { set(optional); type=3;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* MobilityChangeAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container {{MobilityChangeAcknowledge-IEs}}, ... } */ struct MobilityChangeAcknowledge : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "MobilityChangeAcknowledge";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* MobilityChangeFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-ENB1-Cell-ID CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| { ID id-ENB2-Cell-ID CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-ENB2-Mobility-Parameters-Modification-Range CRITICALITY ignore TYPE MobilityParametersModificationRange PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, ... } */ struct MobilityChangeFailure_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(id_ENB2_Mobility_Parameters_Modification_Range); type=4;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_ENB2_Mobility_Parameters_Modification_Range)) { type = 4; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_ENB2_Mobility_Parameters_Modification_Range);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_ENB1_Cell_ID() { set(ignore); type=1;} void select_id_ENB2_Cell_ID() { set(ignore); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(ignore); type=4;} void select_id_CriticalityDiagnostics() { set(ignore); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} ECGI& select_id_ENB1_Cell_ID() { return set(1); } ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } ECGI& select_id_ENB2_Cell_ID() { return set(2); } ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } MobilityParametersModificationRange& select_id_ENB2_Mobility_Parameters_Modification_Range() { return set(4); } MobilityParametersModificationRange const* get_id_ENB2_Mobility_Parameters_Modification_Range() const { return get(4); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ENB1_Cell_ID()); return true; case 2: v(select_id_ENB2_Cell_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_ENB2_Mobility_Parameters_Modification_Range()); return true; case 5: v(select_id_CriticalityDiagnostics()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(ECGI)]; char dummy4[sizeof(MobilityParametersModificationRange)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_ENB2_Mobility_Parameters_Modification_Range() { set(optional); type=4;} void select_id_CriticalityDiagnostics() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* MobilityChangeFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container {{MobilityChangeFailure-IEs}}, ... } */ struct MobilityChangeFailure : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "MobilityChangeFailure";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* MobilityChangeRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-ENB1-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| { ID id-ENB2-Cell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}| { ID id-ENB1-Mobility-Parameters CRITICALITY ignore TYPE MobilityParametersInformation PRESENCE optional}| { ID id-ENB2-Proposed-Mobility-Parameters CRITICALITY reject TYPE MobilityParametersInformation PRESENCE mandatory}| { ID id-Cause CRITICALITY reject TYPE Cause PRESENCE mandatory}, ... } */ struct MobilityChangeRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_ENB1_Cell_ID() { set(id_ENB1_Cell_ID); type=1;} void select_id_ENB2_Cell_ID() { set(id_ENB2_Cell_ID); type=2;} void select_id_ENB1_Mobility_Parameters() { set(id_ENB1_Mobility_Parameters); type=3;} void select_id_ENB2_Proposed_Mobility_Parameters() { set(id_ENB2_Proposed_Mobility_Parameters); type=4;} void select_id_Cause() { set(id_Cause); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ENB1_Cell_ID)) { type = 1; return true; } else if(equal(id_ENB2_Cell_ID)) { type = 2; return true; } else if(equal(id_ENB1_Mobility_Parameters)) { type = 3; return true; } else if(equal(id_ENB2_Proposed_Mobility_Parameters)) { type = 4; return true; } else if(equal(id_Cause)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Cell_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Cell_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_ENB1_Mobility_Parameters);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_ENB2_Proposed_Mobility_Parameters);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_Cause);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_ENB1_Cell_ID() { set(reject); type=1;} void select_id_ENB2_Cell_ID() { set(reject); type=2;} void select_id_ENB1_Mobility_Parameters() { set(ignore); type=3;} void select_id_ENB2_Proposed_Mobility_Parameters() { set(reject); type=4;} void select_id_Cause() { set(reject); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} ECGI& select_id_ENB1_Cell_ID() { return set(1); } ECGI const* get_id_ENB1_Cell_ID() const { return get(1); } ECGI& select_id_ENB2_Cell_ID() { return set(2); } ECGI const* get_id_ENB2_Cell_ID() const { return get(2); } MobilityParametersInformation& select_id_ENB1_Mobility_Parameters() { return set(3); } MobilityParametersInformation const* get_id_ENB1_Mobility_Parameters() const { return get(3); } MobilityParametersInformation& select_id_ENB2_Proposed_Mobility_Parameters() { return set(4); } MobilityParametersInformation const* get_id_ENB2_Proposed_Mobility_Parameters() const { return get(4); } Cause& select_id_Cause() { return set(5); } Cause const* get_id_Cause() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ENB1_Cell_ID()); return true; case 2: v(select_id_ENB2_Cell_ID()); return true; case 3: v(select_id_ENB1_Mobility_Parameters()); return true; case 4: v(select_id_ENB2_Proposed_Mobility_Parameters()); return true; case 5: v(select_id_Cause()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(ECGI)]; char dummy3[sizeof(MobilityParametersInformation)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_ENB1_Cell_ID() { set(mandatory); type=1;} void select_id_ENB2_Cell_ID() { set(mandatory); type=2;} void select_id_ENB1_Mobility_Parameters() { set(optional); type=3;} void select_id_ENB2_Proposed_Mobility_Parameters() { set(mandatory); type=4;} void select_id_Cause() { set(mandatory); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(mandatory)) { type = 4; return true; } else if(equal(mandatory)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* MobilityChangeRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{MobilityChangeRequest-IEs}}, ... } */ struct MobilityChangeRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "MobilityChangeRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* PartialSuccessIndicator ::= ENUMERATED { partial-success-allowed, ... } */ struct PartialSuccessIndicator : asn::enumerated<1, 0, true> { static constexpr const char* name() {return "PartialSuccessIndicator";} using parent_t = asn::enumerated<1, 0, true>; typedef enum { partial_success_allowed } index_t; }; /* PrivateMessage-IEs X2AP-PRIVATE-IES ::= { ... } */ struct PrivateMessage_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PRIVATE_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PRIVATE_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PRIVATE_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* PrivateMessage ::= SEQUENCE { privateIEs PrivateIE-Container {{PrivateMessage-IEs}}, ... } */ struct PrivateMessage : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "PrivateMessage";} using parent_t = asn::sequence<1, 0, true, 0>; struct privateIEs_t : PrivateIE_Container { static constexpr const char* name() {return "privateIEs_t";} using parent_t = PrivateIE_Container; }; privateIEs_t& ref_privateIEs() {return privateIEs;} privateIEs_t const& ref_privateIEs() const {return privateIEs;} template void decode(V& v) { v(privateIEs); }; template void encode(V& v) const { v(privateIEs); }; void clear() { privateIEs.clear(); }; private: privateIEs_t privateIEs; }; /* RLFIndication-IEs X2AP-PROTOCOL-IES ::= { { ID id-FailureCellPCI CRITICALITY ignore TYPE PCI PRESENCE mandatory}| { ID id-Re-establishmentCellECGI CRITICALITY ignore TYPE ECGI PRESENCE mandatory}| { ID id-FailureCellCRNTI CRITICALITY ignore TYPE CRNTI PRESENCE mandatory}| { ID id-ShortMAC-I CRITICALITY ignore TYPE ShortMAC-I PRESENCE optional}| { ID id-UE-RLF-Report-Container CRITICALITY ignore TYPE UE-RLF-Report-Container PRESENCE optional}| { ID id-RRCConnSetupIndicator CRITICALITY reject TYPE RRCConnSetupIndicator PRESENCE optional}| { ID id-RRCConnReestabIndicator CRITICALITY ignore TYPE RRCConnReestabIndicator PRESENCE optional}| { ID id-UE-RLF-Report-Container-for-extended-bands CRITICALITY ignore TYPE UE-RLF-Report-Container-for-extended-bands PRESENCE optional}, ... } */ struct RLFIndication_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 9; } void clear() {type = 0;} void select_id_FailureCellPCI() { set(id_FailureCellPCI); type=1;} void select_id_Re_establishmentCellECGI() { set(id_Re_establishmentCellECGI); type=2;} void select_id_FailureCellCRNTI() { set(id_FailureCellCRNTI); type=3;} void select_id_ShortMAC_I() { set(id_ShortMAC_I); type=4;} void select_id_UE_RLF_Report_Container() { set(id_UE_RLF_Report_Container); type=5;} void select_id_RRCConnSetupIndicator() { set(id_RRCConnSetupIndicator); type=6;} void select_id_RRCConnReestabIndicator() { set(id_RRCConnReestabIndicator); type=7;} void select_id_UE_RLF_Report_Container_for_extended_bands() { set(id_UE_RLF_Report_Container_for_extended_bands); type=8;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_FailureCellPCI)) { type = 1; return true; } else if(equal(id_Re_establishmentCellECGI)) { type = 2; return true; } else if(equal(id_FailureCellCRNTI)) { type = 3; return true; } else if(equal(id_ShortMAC_I)) { type = 4; return true; } else if(equal(id_UE_RLF_Report_Container)) { type = 5; return true; } else if(equal(id_RRCConnSetupIndicator)) { type = 6; return true; } else if(equal(id_RRCConnReestabIndicator)) { type = 7; return true; } else if(equal(id_UE_RLF_Report_Container_for_extended_bands)) { type = 8; return true; } else { type = 9; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_FailureCellPCI);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_Re_establishmentCellECGI);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_FailureCellCRNTI);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_ShortMAC_I);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_RRCConnSetupIndicator);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_RRCConnReestabIndicator);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_UE_RLF_Report_Container_for_extended_bands);} return false; case 9: type = 9; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 9; } void clear() {type = 0;} void select_id_FailureCellPCI() { set(ignore); type=1;} void select_id_Re_establishmentCellECGI() { set(ignore); type=2;} void select_id_FailureCellCRNTI() { set(ignore); type=3;} void select_id_ShortMAC_I() { set(ignore); type=4;} void select_id_UE_RLF_Report_Container() { set(ignore); type=5;} void select_id_RRCConnSetupIndicator() { set(reject); type=6;} void select_id_RRCConnReestabIndicator() { set(ignore); type=7;} void select_id_UE_RLF_Report_Container_for_extended_bands() { set(ignore); type=8;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(reject)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else if(equal(ignore)) { type = 8; return true; } else { type = 9; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; case 9: type = 9; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} PCI& select_id_FailureCellPCI() { return set(1); } PCI const* get_id_FailureCellPCI() const { return get(1); } ECGI& select_id_Re_establishmentCellECGI() { return set(2); } ECGI const* get_id_Re_establishmentCellECGI() const { return get(2); } CRNTI& select_id_FailureCellCRNTI() { return set(3); } CRNTI const* get_id_FailureCellCRNTI() const { return get(3); } ShortMAC_I& select_id_ShortMAC_I() { return set(4); } ShortMAC_I const* get_id_ShortMAC_I() const { return get(4); } UE_RLF_Report_Container& select_id_UE_RLF_Report_Container() { return set(5); } UE_RLF_Report_Container const* get_id_UE_RLF_Report_Container() const { return get(5); } RRCConnSetupIndicator& select_id_RRCConnSetupIndicator() { return set(6); } RRCConnSetupIndicator const* get_id_RRCConnSetupIndicator() const { return get(6); } RRCConnReestabIndicator& select_id_RRCConnReestabIndicator() { return set(7); } RRCConnReestabIndicator const* get_id_RRCConnReestabIndicator() const { return get(7); } UE_RLF_Report_Container_for_extended_bands& select_id_UE_RLF_Report_Container_for_extended_bands() { return set(8); } UE_RLF_Report_Container_for_extended_bands const* get_id_UE_RLF_Report_Container_for_extended_bands() const { return get(8); } bool is_unknown() const { return type == 9; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_FailureCellPCI()); return true; case 2: v(select_id_Re_establishmentCellECGI()); return true; case 3: v(select_id_FailureCellCRNTI()); return true; case 4: v(select_id_ShortMAC_I()); return true; case 5: v(select_id_UE_RLF_Report_Container()); return true; case 6: v(select_id_RRCConnSetupIndicator()); return true; case 7: v(select_id_RRCConnReestabIndicator()); return true; case 8: v(select_id_UE_RLF_Report_Container_for_extended_bands()); return true; case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CRNTI)]; char dummy2[sizeof(ECGI)]; char dummy3[sizeof(PCI)]; char dummy4[sizeof(RRCConnReestabIndicator)]; char dummy5[sizeof(RRCConnSetupIndicator)]; char dummy6[sizeof(ShortMAC_I)]; char dummy7[sizeof(UE_RLF_Report_Container)]; char dummy8[sizeof(UE_RLF_Report_Container_for_extended_bands)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 9; } void clear() {type = 0;} void select_id_FailureCellPCI() { set(mandatory); type=1;} void select_id_Re_establishmentCellECGI() { set(mandatory); type=2;} void select_id_FailureCellCRNTI() { set(mandatory); type=3;} void select_id_ShortMAC_I() { set(optional); type=4;} void select_id_UE_RLF_Report_Container() { set(optional); type=5;} void select_id_RRCConnSetupIndicator() { set(optional); type=6;} void select_id_RRCConnReestabIndicator() { set(optional); type=7;} void select_id_UE_RLF_Report_Container_for_extended_bands() { set(optional); type=8;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else { type = 9; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* RLFIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container {{RLFIndication-IEs}}, ... } */ struct RLFIndication : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "RLFIndication";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* RNL-Header-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct RNL_Header_Item_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* RNL-Header ::= SEQUENCE { source-GlobalENB-ID GlobalENB-ID, target-GlobalENB-ID GlobalENB-ID OPTIONAL, iE-Extensions ProtocolExtensionContainer { {RNL-Header-Item-ExtIEs} } OPTIONAL, ... } */ struct RNL_Header : asn::sequence<3, 0, true, 2> { static constexpr const char* name() {return "RNL-Header";} using parent_t = asn::sequence<3, 0, true, 2>; struct source_GlobalENB_ID_t : GlobalENB_ID { static constexpr const char* name() {return "source_GlobalENB_ID_t";} using parent_t = GlobalENB_ID; }; source_GlobalENB_ID_t& ref_source_GlobalENB_ID() {return source_GlobalENB_ID;} source_GlobalENB_ID_t const& ref_source_GlobalENB_ID() const {return source_GlobalENB_ID;} struct target_GlobalENB_ID_t : GlobalENB_ID { static constexpr const char* name() {return "target_GlobalENB_ID_t";} using parent_t = GlobalENB_ID; static constexpr bool optional = true; }; target_GlobalENB_ID_t& set_target_GlobalENB_ID() { target_GlobalENB_ID.setpresent(true); return target_GlobalENB_ID;} target_GlobalENB_ID_t const* get_target_GlobalENB_ID() const {return target_GlobalENB_ID.is_valid() ? &target_GlobalENB_ID : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(source_GlobalENB_ID); v(target_GlobalENB_ID); v(iE_Extensions); }; template void encode(V& v) const { v(source_GlobalENB_ID); v(target_GlobalENB_ID); v(iE_Extensions); }; void clear() { source_GlobalENB_ID.clear(); target_GlobalENB_ID.clear(); iE_Extensions.clear(); }; private: source_GlobalENB_ID_t source_GlobalENB_ID; target_GlobalENB_ID_t target_GlobalENB_ID; iE_Extensions_t iE_Extensions; }; /* RRCTransfer-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-SplitSRB CRITICALITY reject TYPE SplitSRB PRESENCE optional}| { ID id-UENRMeasurement CRITICALITY reject TYPE UENRMeasurement PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct RRCTransfer_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_SplitSRB() { set(id_SplitSRB); type=3;} void select_id_UENRMeasurement() { set(id_UENRMeasurement); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_SplitSRB)) { type = 3; return true; } else if(equal(id_UENRMeasurement)) { type = 4; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_SplitSRB);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_UENRMeasurement);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_SplitSRB() { set(reject); type=3;} void select_id_UENRMeasurement() { set(reject); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } SplitSRB& select_id_SplitSRB() { return set(3); } SplitSRB const* get_id_SplitSRB() const { return get(3); } UENRMeasurement& select_id_UENRMeasurement() { return set(4); } UENRMeasurement const* get_id_UENRMeasurement() const { return get(4); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_SplitSRB()); return true; case 4: v(select_id_UENRMeasurement()); return true; case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(SgNB_UE_X2AP_ID)]; char dummy2[sizeof(SplitSRB)]; char dummy3[sizeof(UENRMeasurement)]; char dummy4[sizeof(UE_X2AP_ID)]; char dummy5[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_SplitSRB() { set(optional); type=3;} void select_id_UENRMeasurement() { set(optional); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* RRCTransfer ::= SEQUENCE { protocolIEs ProtocolIE-Container {{RRCTransfer-IEs}}, ... } */ struct RRCTransfer : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "RRCTransfer";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ReportingPeriodicity ::= ENUMERATED { one-thousand-ms, two-thousand-ms, five-thousand-ms, ten-thousand-ms, ... } */ struct ReportingPeriodicity : asn::enumerated<4, 0, true> { static constexpr const char* name() {return "ReportingPeriodicity";} using parent_t = asn::enumerated<4, 0, true>; typedef enum { one_thousand_ms ,two_thousand_ms ,five_thousand_ms ,ten_thousand_ms } index_t; }; /* ResetRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}, ... } */ struct ResetRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_Cause() { set(id_Cause); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Cause)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_Cause() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} Cause& select_id_Cause() { return set(1); } Cause const* get_id_Cause() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Cause()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_Cause() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ResetRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ResetRequest-IEs}}, ... } */ struct ResetRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ResetRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ResetResponse-IEs X2AP-PROTOCOL-IES ::= { { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } */ struct ResetResponse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_CriticalityDiagnostics)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_CriticalityDiagnostics() { set(ignore); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(1); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_CriticalityDiagnostics()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_CriticalityDiagnostics() { set(optional); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ResetResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ResetResponse-IEs}}, ... } */ struct ResetResponse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ResetResponse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ResourceStatusFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-CompleteFailureCauseInformation-List CRITICALITY ignore TYPE CompleteFailureCauseInformation-List PRESENCE optional}, ... } */ struct ResourceStatusFailure_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_CompleteFailureCauseInformation_List() { set(id_CompleteFailureCauseInformation_List); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_CompleteFailureCauseInformation_List)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_CompleteFailureCauseInformation_List);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_ENB1_Measurement_ID() { set(reject); type=1;} void select_id_ENB2_Measurement_ID() { set(reject); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_CompleteFailureCauseInformation_List() { set(ignore); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } CompleteFailureCauseInformation_List& select_id_CompleteFailureCauseInformation_List() { return set(5); } CompleteFailureCauseInformation_List const* get_id_CompleteFailureCauseInformation_List() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ENB1_Measurement_ID()); return true; case 2: v(select_id_ENB2_Measurement_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_CompleteFailureCauseInformation_List()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CompleteFailureCauseInformation_List)]; char dummy3[sizeof(CriticalityDiagnostics)]; char dummy4[sizeof(Measurement_ID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_CompleteFailureCauseInformation_List() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ResourceStatusFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ResourceStatusFailure-IEs}}, ... } */ struct ResourceStatusFailure : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ResourceStatusFailure";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ResourceStatusRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| { ID id-ENB2-Measurement-ID CRITICALITY ignore TYPE Measurement-ID PRESENCE conditional}|-- The IE shall be present if the Registration Request IE is set to “Stop”, “Partial stop” or to “Add”-- { ID id-Registration-Request CRITICALITY reject TYPE Registration-Request PRESENCE mandatory}| { ID id-ReportCharacteristics CRITICALITY reject TYPE ReportCharacteristics PRESENCE optional}| { ID id-CellToReport CRITICALITY ignore TYPE CellToReport-List PRESENCE mandatory}| { ID id-ReportingPeriodicity CRITICALITY ignore TYPE ReportingPeriodicity PRESENCE optional}| { ID id-PartialSuccessIndicator CRITICALITY ignore TYPE PartialSuccessIndicator PRESENCE optional}| { ID id-ReportingPeriodicityRSRPMR CRITICALITY ignore TYPE ReportingPeriodicityRSRPMR PRESENCE optional}| { ID id-ReportingPeriodicityCSIR CRITICALITY ignore TYPE ReportingPeriodicityCSIR PRESENCE optional}, ... } */ struct ResourceStatusRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 10; } void clear() {type = 0;} void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} void select_id_Registration_Request() { set(id_Registration_Request); type=3;} void select_id_ReportCharacteristics() { set(id_ReportCharacteristics); type=4;} void select_id_CellToReport() { set(id_CellToReport); type=5;} void select_id_ReportingPeriodicity() { set(id_ReportingPeriodicity); type=6;} void select_id_PartialSuccessIndicator() { set(id_PartialSuccessIndicator); type=7;} void select_id_ReportingPeriodicityRSRPMR() { set(id_ReportingPeriodicityRSRPMR); type=8;} void select_id_ReportingPeriodicityCSIR() { set(id_ReportingPeriodicityCSIR); type=9;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } else if(equal(id_Registration_Request)) { type = 3; return true; } else if(equal(id_ReportCharacteristics)) { type = 4; return true; } else if(equal(id_CellToReport)) { type = 5; return true; } else if(equal(id_ReportingPeriodicity)) { type = 6; return true; } else if(equal(id_PartialSuccessIndicator)) { type = 7; return true; } else if(equal(id_ReportingPeriodicityRSRPMR)) { type = 8; return true; } else if(equal(id_ReportingPeriodicityCSIR)) { type = 9; return true; } else { type = 10; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Registration_Request);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_ReportCharacteristics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_CellToReport);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_ReportingPeriodicity);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_PartialSuccessIndicator);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_ReportingPeriodicityRSRPMR);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_ReportingPeriodicityCSIR);} return false; case 10: type = 10; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 10; } void clear() {type = 0;} void select_id_ENB1_Measurement_ID() { set(reject); type=1;} void select_id_ENB2_Measurement_ID() { set(ignore); type=2;} void select_id_Registration_Request() { set(reject); type=3;} void select_id_ReportCharacteristics() { set(reject); type=4;} void select_id_CellToReport() { set(ignore); type=5;} void select_id_ReportingPeriodicity() { set(ignore); type=6;} void select_id_PartialSuccessIndicator() { set(ignore); type=7;} void select_id_ReportingPeriodicityRSRPMR() { set(ignore); type=8;} void select_id_ReportingPeriodicityCSIR() { set(ignore); type=9;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else if(equal(ignore)) { type = 8; return true; } else if(equal(ignore)) { type = 9; return true; } else { type = 10; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; case 10: type = 10; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } Registration_Request& select_id_Registration_Request() { return set(3); } Registration_Request const* get_id_Registration_Request() const { return get(3); } ReportCharacteristics& select_id_ReportCharacteristics() { return set(4); } ReportCharacteristics const* get_id_ReportCharacteristics() const { return get(4); } CellToReport_List& select_id_CellToReport() { return set(5); } CellToReport_List const* get_id_CellToReport() const { return get(5); } ReportingPeriodicity& select_id_ReportingPeriodicity() { return set(6); } ReportingPeriodicity const* get_id_ReportingPeriodicity() const { return get(6); } PartialSuccessIndicator& select_id_PartialSuccessIndicator() { return set(7); } PartialSuccessIndicator const* get_id_PartialSuccessIndicator() const { return get(7); } ReportingPeriodicityRSRPMR& select_id_ReportingPeriodicityRSRPMR() { return set(8); } ReportingPeriodicityRSRPMR const* get_id_ReportingPeriodicityRSRPMR() const { return get(8); } ReportingPeriodicityCSIR& select_id_ReportingPeriodicityCSIR() { return set(9); } ReportingPeriodicityCSIR const* get_id_ReportingPeriodicityCSIR() const { return get(9); } bool is_unknown() const { return type == 10; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ENB1_Measurement_ID()); return true; case 2: v(select_id_ENB2_Measurement_ID()); return true; case 3: v(select_id_Registration_Request()); return true; case 4: v(select_id_ReportCharacteristics()); return true; case 5: v(select_id_CellToReport()); return true; case 6: v(select_id_ReportingPeriodicity()); return true; case 7: v(select_id_PartialSuccessIndicator()); return true; case 8: v(select_id_ReportingPeriodicityRSRPMR()); return true; case 9: v(select_id_ReportingPeriodicityCSIR()); return true; case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CellToReport_List)]; char dummy2[sizeof(Measurement_ID)]; char dummy3[sizeof(PartialSuccessIndicator)]; char dummy4[sizeof(Registration_Request)]; char dummy5[sizeof(ReportCharacteristics)]; char dummy6[sizeof(ReportingPeriodicity)]; char dummy7[sizeof(ReportingPeriodicityCSIR)]; char dummy8[sizeof(ReportingPeriodicityRSRPMR)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 10; } void clear() {type = 0;} void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} void select_id_ENB2_Measurement_ID() { set(conditional); type=2;} void select_id_Registration_Request() { set(mandatory); type=3;} void select_id_ReportCharacteristics() { set(optional); type=4;} void select_id_CellToReport() { set(mandatory); type=5;} void select_id_ReportingPeriodicity() { set(optional); type=6;} void select_id_PartialSuccessIndicator() { set(optional); type=7;} void select_id_ReportingPeriodicityRSRPMR() { set(optional); type=8;} void select_id_ReportingPeriodicityCSIR() { set(optional); type=9;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(conditional)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(mandatory)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else { type = 10; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ResourceStatusRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ResourceStatusRequest-IEs}}, ... } */ struct ResourceStatusRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ResourceStatusRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ResourceStatusResponse-IEs X2AP-PROTOCOL-IES ::= { { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeasurementInitiationResult-List CRITICALITY ignore TYPE MeasurementInitiationResult-List PRESENCE optional}, ... } */ struct ResourceStatusResponse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} void select_id_MeasurementInitiationResult_List() { set(id_MeasurementInitiationResult_List); type=4;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } else if(equal(id_MeasurementInitiationResult_List)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_MeasurementInitiationResult_List);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_ENB1_Measurement_ID() { set(reject); type=1;} void select_id_ENB2_Measurement_ID() { set(reject); type=2;} void select_id_CriticalityDiagnostics() { set(ignore); type=3;} void select_id_MeasurementInitiationResult_List() { set(ignore); type=4;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } MeasurementInitiationResult_List& select_id_MeasurementInitiationResult_List() { return set(4); } MeasurementInitiationResult_List const* get_id_MeasurementInitiationResult_List() const { return get(4); } bool is_unknown() const { return type == 5; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ENB1_Measurement_ID()); return true; case 2: v(select_id_ENB2_Measurement_ID()); return true; case 3: v(select_id_CriticalityDiagnostics()); return true; case 4: v(select_id_MeasurementInitiationResult_List()); return true; case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(MeasurementInitiationResult_List)]; char dummy3[sizeof(Measurement_ID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} void select_id_CriticalityDiagnostics() { set(optional); type=3;} void select_id_MeasurementInitiationResult_List() { set(optional); type=4;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ResourceStatusResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ResourceStatusResponse-IEs}}, ... } */ struct ResourceStatusResponse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ResourceStatusResponse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ResourceStatusUpdate-IEs X2AP-PROTOCOL-IES ::= { { ID id-ENB1-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| { ID id-ENB2-Measurement-ID CRITICALITY reject TYPE Measurement-ID PRESENCE mandatory}| { ID id-CellMeasurementResult CRITICALITY ignore TYPE CellMeasurementResult-List PRESENCE mandatory}, ... } */ struct ResourceStatusUpdate_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ENB1_Measurement_ID() { set(id_ENB1_Measurement_ID); type=1;} void select_id_ENB2_Measurement_ID() { set(id_ENB2_Measurement_ID); type=2;} void select_id_CellMeasurementResult() { set(id_CellMeasurementResult); type=3;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_ENB1_Measurement_ID)) { type = 1; return true; } else if(equal(id_ENB2_Measurement_ID)) { type = 2; return true; } else if(equal(id_CellMeasurementResult)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_ENB1_Measurement_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ENB2_Measurement_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_CellMeasurementResult);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ENB1_Measurement_ID() { set(reject); type=1;} void select_id_ENB2_Measurement_ID() { set(reject); type=2;} void select_id_CellMeasurementResult() { set(ignore); type=3;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} Measurement_ID& select_id_ENB1_Measurement_ID() { return set(1); } Measurement_ID const* get_id_ENB1_Measurement_ID() const { return get(1); } Measurement_ID& select_id_ENB2_Measurement_ID() { return set(2); } Measurement_ID const* get_id_ENB2_Measurement_ID() const { return get(2); } CellMeasurementResult_List& select_id_CellMeasurementResult() { return set(3); } CellMeasurementResult_List const* get_id_CellMeasurementResult() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_ENB1_Measurement_ID()); return true; case 2: v(select_id_ENB2_Measurement_ID()); return true; case 3: v(select_id_CellMeasurementResult()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CellMeasurementResult_List)]; char dummy2[sizeof(Measurement_ID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_ENB1_Measurement_ID() { set(mandatory); type=1;} void select_id_ENB2_Measurement_ID() { set(mandatory); type=2;} void select_id_CellMeasurementResult() { set(mandatory); type=3;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ResourceStatusUpdate ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ResourceStatusUpdate-IEs}}, ... } */ struct ResourceStatusUpdate : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "ResourceStatusUpdate";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* ResponseInformationSeNBReconfComp-SuccessItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct ResponseInformationSeNBReconfComp_SuccessItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ResponseInformationSeNBReconfComp-SuccessItem ::= SEQUENCE { meNBtoSeNBContainer MeNBtoSeNBContainer OPTIONAL, iE-Extensions ProtocolExtensionContainer { {ResponseInformationSeNBReconfComp-SuccessItemExtIEs} } OPTIONAL, ... } */ struct ResponseInformationSeNBReconfComp_SuccessItem : asn::sequence<2, 0, true, 2> { static constexpr const char* name() {return "ResponseInformationSeNBReconfComp-SuccessItem";} using parent_t = asn::sequence<2, 0, true, 2>; struct meNBtoSeNBContainer_t : MeNBtoSeNBContainer { static constexpr const char* name() {return "meNBtoSeNBContainer_t";} using parent_t = MeNBtoSeNBContainer; static constexpr bool optional = true; }; meNBtoSeNBContainer_t& set_meNBtoSeNBContainer() { meNBtoSeNBContainer.setpresent(true); return meNBtoSeNBContainer;} meNBtoSeNBContainer_t const* get_meNBtoSeNBContainer() const {return meNBtoSeNBContainer.is_valid() ? &meNBtoSeNBContainer : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(meNBtoSeNBContainer); v(iE_Extensions); }; template void encode(V& v) const { v(meNBtoSeNBContainer); v(iE_Extensions); }; void clear() { meNBtoSeNBContainer.clear(); iE_Extensions.clear(); }; private: meNBtoSeNBContainer_t meNBtoSeNBContainer; iE_Extensions_t iE_Extensions; }; /* ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct ResponseInformationSeNBReconfComp_RejectByMeNBItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ResponseInformationSeNBReconfComp-RejectByMeNBItem ::= SEQUENCE { cause Cause, meNBtoSeNBContainer MeNBtoSeNBContainer OPTIONAL, iE-Extensions ProtocolExtensionContainer { {ResponseInformationSeNBReconfComp-RejectByMeNBItemExtIEs} } OPTIONAL, ... } */ struct ResponseInformationSeNBReconfComp_RejectByMeNBItem : asn::sequence<3, 0, true, 2> { static constexpr const char* name() {return "ResponseInformationSeNBReconfComp-RejectByMeNBItem";} using parent_t = asn::sequence<3, 0, true, 2>; struct cause_t : Cause { static constexpr const char* name() {return "cause_t";} using parent_t = Cause; }; cause_t& ref_cause() {return cause;} cause_t const& ref_cause() const {return cause;} struct meNBtoSeNBContainer_t : MeNBtoSeNBContainer { static constexpr const char* name() {return "meNBtoSeNBContainer_t";} using parent_t = MeNBtoSeNBContainer; static constexpr bool optional = true; }; meNBtoSeNBContainer_t& set_meNBtoSeNBContainer() { meNBtoSeNBContainer.setpresent(true); return meNBtoSeNBContainer;} meNBtoSeNBContainer_t const* get_meNBtoSeNBContainer() const {return meNBtoSeNBContainer.is_valid() ? &meNBtoSeNBContainer : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(cause); v(meNBtoSeNBContainer); v(iE_Extensions); }; template void encode(V& v) const { v(cause); v(meNBtoSeNBContainer); v(iE_Extensions); }; void clear() { cause.clear(); meNBtoSeNBContainer.clear(); iE_Extensions.clear(); }; private: cause_t cause; meNBtoSeNBContainer_t meNBtoSeNBContainer; iE_Extensions_t iE_Extensions; }; /* ResponseInformationSeNBReconfComp ::= CHOICE { success ResponseInformationSeNBReconfComp-SuccessItem, reject-by-MeNB ResponseInformationSeNBReconfComp-RejectByMeNBItem, ... } */ struct ResponseInformationSeNBReconfComp : asn::choice<2, 0, true> { static constexpr const char* name() {return "ResponseInformationSeNBReconfComp";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~ResponseInformationSeNBReconfComp() {clear();} struct success_t : ResponseInformationSeNBReconfComp_SuccessItem { static constexpr const char* name() {return "success_t";} using parent_t = ResponseInformationSeNBReconfComp_SuccessItem; }; struct reject_by_MeNB_t : ResponseInformationSeNBReconfComp_RejectByMeNBItem { static constexpr const char* name() {return "reject_by_MeNB_t";} using parent_t = ResponseInformationSeNBReconfComp_RejectByMeNBItem; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } success_t& select_success() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} success_t const* get_success() const { if(get_index() == 1) { return &var.as();} return nullptr; } reject_by_MeNB_t& select_reject_by_MeNB() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} reject_by_MeNB_t const* get_reject_by_MeNB() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(success_t)]; char dummy2[sizeof(reject_by_MeNB_t)]; }; asn::variant var; index_type index {0}; }; /* ResponseInformationSgNBReconfComp-SuccessItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct ResponseInformationSgNBReconfComp_SuccessItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ResponseInformationSgNBReconfComp-SuccessItem ::= SEQUENCE { meNBtoSgNBContainer MeNBtoSgNBContainer OPTIONAL, iE-Extensions ProtocolExtensionContainer { {ResponseInformationSgNBReconfComp-SuccessItemExtIEs} } OPTIONAL, ... } */ struct ResponseInformationSgNBReconfComp_SuccessItem : asn::sequence<2, 0, true, 2> { static constexpr const char* name() {return "ResponseInformationSgNBReconfComp-SuccessItem";} using parent_t = asn::sequence<2, 0, true, 2>; struct meNBtoSgNBContainer_t : MeNBtoSgNBContainer { static constexpr const char* name() {return "meNBtoSgNBContainer_t";} using parent_t = MeNBtoSgNBContainer; static constexpr bool optional = true; }; meNBtoSgNBContainer_t& set_meNBtoSgNBContainer() { meNBtoSgNBContainer.setpresent(true); return meNBtoSgNBContainer;} meNBtoSgNBContainer_t const* get_meNBtoSgNBContainer() const {return meNBtoSgNBContainer.is_valid() ? &meNBtoSgNBContainer : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(meNBtoSgNBContainer); v(iE_Extensions); }; template void encode(V& v) const { v(meNBtoSgNBContainer); v(iE_Extensions); }; void clear() { meNBtoSgNBContainer.clear(); iE_Extensions.clear(); }; private: meNBtoSgNBContainer_t meNBtoSgNBContainer; iE_Extensions_t iE_Extensions; }; /* ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct ResponseInformationSgNBReconfComp_RejectByMeNBItemExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* ResponseInformationSgNBReconfComp-RejectByMeNBItem ::= SEQUENCE { cause Cause, iE-Extensions ProtocolExtensionContainer { {ResponseInformationSgNBReconfComp-RejectByMeNBItemExtIEs} } OPTIONAL, ... } */ struct ResponseInformationSgNBReconfComp_RejectByMeNBItem : asn::sequence<2, 0, true, 1> { static constexpr const char* name() {return "ResponseInformationSgNBReconfComp-RejectByMeNBItem";} using parent_t = asn::sequence<2, 0, true, 1>; struct cause_t : Cause { static constexpr const char* name() {return "cause_t";} using parent_t = Cause; }; cause_t& ref_cause() {return cause;} cause_t const& ref_cause() const {return cause;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(cause); v(iE_Extensions); }; template void encode(V& v) const { v(cause); v(iE_Extensions); }; void clear() { cause.clear(); iE_Extensions.clear(); }; private: cause_t cause; iE_Extensions_t iE_Extensions; }; /* ResponseInformationSgNBReconfComp ::= CHOICE { success-SgNBReconfComp ResponseInformationSgNBReconfComp-SuccessItem, reject-by-MeNB-SgNBReconfComp ResponseInformationSgNBReconfComp-RejectByMeNBItem, ... } */ struct ResponseInformationSgNBReconfComp : asn::choice<2, 0, true> { static constexpr const char* name() {return "ResponseInformationSgNBReconfComp";} using parent_t = asn::choice<2, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 3;} void set_unknown() { set_index(3); } ~ResponseInformationSgNBReconfComp() {clear();} struct success_SgNBReconfComp_t : ResponseInformationSgNBReconfComp_SuccessItem { static constexpr const char* name() {return "success_SgNBReconfComp_t";} using parent_t = ResponseInformationSgNBReconfComp_SuccessItem; }; struct reject_by_MeNB_SgNBReconfComp_t : ResponseInformationSgNBReconfComp_RejectByMeNBItem { static constexpr const char* name() {return "reject_by_MeNB_SgNBReconfComp_t";} using parent_t = ResponseInformationSgNBReconfComp_RejectByMeNBItem; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } success_SgNBReconfComp_t& select_success_SgNBReconfComp() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} success_SgNBReconfComp_t const* get_success_SgNBReconfComp() const { if(get_index() == 1) { return &var.as();} return nullptr; } reject_by_MeNB_SgNBReconfComp_t& select_reject_by_MeNB_SgNBReconfComp() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} reject_by_MeNB_SgNBReconfComp_t const* get_reject_by_MeNB_SgNBReconfComp() const { if(get_index() == 2) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(success_SgNBReconfComp_t)]; char dummy2[sizeof(reject_by_MeNB_SgNBReconfComp_t)]; }; asn::variant var; index_type index {0}; }; /* RetrieveUEContextFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, ... } */ struct RetrieveUEContextFailure_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(2); } UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } bool is_unknown() const { return type == 5; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; case 2: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* RetrieveUEContextFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ RetrieveUEContextFailure-IEs}}, ... } */ struct RetrieveUEContextFailure : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "RetrieveUEContextFailure";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* RetrieveUEContextRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-resumeID CRITICALITY reject TYPE ResumeID PRESENCE mandatory}| { ID id-ShortMAC-I CRITICALITY reject TYPE ShortMAC-I PRESENCE mandatory}| { ID id-NewEUTRANCellIdentifier CRITICALITY reject TYPE EUTRANCellIdentifier PRESENCE mandatory}| {ID id-FailureCellCRNTI CRITICALITY reject TYPE CRNTI PRESENCE optional}| {ID id-FailureCellPCI CRITICALITY reject TYPE PCI PRESENCE optional}, ... } */ struct RetrieveUEContextRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=2;} void select_id_resumeID() { set(id_resumeID); type=3;} void select_id_ShortMAC_I() { set(id_ShortMAC_I); type=4;} void select_id_NewEUTRANCellIdentifier() { set(id_NewEUTRANCellIdentifier); type=5;} void select_id_FailureCellCRNTI() { set(id_FailureCellCRNTI); type=6;} void select_id_FailureCellPCI() { set(id_FailureCellPCI); type=7;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 2; return true; } else if(equal(id_resumeID)) { type = 3; return true; } else if(equal(id_ShortMAC_I)) { type = 4; return true; } else if(equal(id_NewEUTRANCellIdentifier)) { type = 5; return true; } else if(equal(id_FailureCellCRNTI)) { type = 6; return true; } else if(equal(id_FailureCellPCI)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_resumeID);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_ShortMAC_I);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_NewEUTRANCellIdentifier);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_FailureCellCRNTI);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_FailureCellPCI);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=2;} void select_id_resumeID() { set(reject); type=3;} void select_id_ShortMAC_I() { set(reject); type=4;} void select_id_NewEUTRANCellIdentifier() { set(reject); type=5;} void select_id_FailureCellCRNTI() { set(reject); type=6;} void select_id_FailureCellPCI() { set(reject); type=7;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else if(equal(reject)) { type = 6; return true; } else if(equal(reject)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(2); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(2); } ResumeID& select_id_resumeID() { return set(3); } ResumeID const* get_id_resumeID() const { return get(3); } ShortMAC_I& select_id_ShortMAC_I() { return set(4); } ShortMAC_I const* get_id_ShortMAC_I() const { return get(4); } EUTRANCellIdentifier& select_id_NewEUTRANCellIdentifier() { return set(5); } EUTRANCellIdentifier const* get_id_NewEUTRANCellIdentifier() const { return get(5); } CRNTI& select_id_FailureCellCRNTI() { return set(6); } CRNTI const* get_id_FailureCellCRNTI() const { return get(6); } PCI& select_id_FailureCellPCI() { return set(7); } PCI const* get_id_FailureCellPCI() const { return get(7); } bool is_unknown() const { return type == 8; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 3: v(select_id_resumeID()); return true; case 4: v(select_id_ShortMAC_I()); return true; case 5: v(select_id_NewEUTRANCellIdentifier()); return true; case 6: v(select_id_FailureCellCRNTI()); return true; case 7: v(select_id_FailureCellPCI()); return true; case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CRNTI)]; char dummy2[sizeof(EUTRANCellIdentifier)]; char dummy3[sizeof(PCI)]; char dummy4[sizeof(ResumeID)]; char dummy5[sizeof(ShortMAC_I)]; char dummy6[sizeof(UE_X2AP_ID)]; char dummy7[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=2;} void select_id_resumeID() { set(mandatory); type=3;} void select_id_ShortMAC_I() { set(mandatory); type=4;} void select_id_NewEUTRANCellIdentifier() { set(mandatory); type=5;} void select_id_FailureCellCRNTI() { set(optional); type=6;} void select_id_FailureCellPCI() { set(optional); type=7;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(mandatory)) { type = 4; return true; } else if(equal(mandatory)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* RetrieveUEContextRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ RetrieveUEContextRequest-IEs}}, ... } */ struct RetrieveUEContextRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "RetrieveUEContextRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* UE-ContextInformationRetrieve-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-UESidelinkAggregateMaximumBitRate CRITICALITY ignore EXTENSION UESidelinkAggregateMaximumBitRate PRESENCE optional}, ... } */ struct UE_ContextInformationRetrieve_ExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_UESidelinkAggregateMaximumBitRate() { set(id_UESidelinkAggregateMaximumBitRate); type=1;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_UESidelinkAggregateMaximumBitRate)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_UESidelinkAggregateMaximumBitRate);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_UESidelinkAggregateMaximumBitRate() { set(ignore); type=1;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} UESidelinkAggregateMaximumBitRate& select_id_UESidelinkAggregateMaximumBitRate() { return set(1); } UESidelinkAggregateMaximumBitRate const* get_id_UESidelinkAggregateMaximumBitRate() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_UESidelinkAggregateMaximumBitRate()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(UESidelinkAggregateMaximumBitRate)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_UESidelinkAggregateMaximumBitRate() { set(optional); type=1;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* UE-ContextInformationRetrieve ::= SEQUENCE { mME-UE-S1AP-ID UE-S1AP-ID, uESecurityCapabilities UESecurityCapabilities, aS-SecurityInformation AS-SecurityInformation, uEaggregateMaximumBitRate UEAggregateMaximumBitRate, subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, e-RABs-ToBeSetup-ListRetrieve E-RABs-ToBeSetup-ListRetrieve, rRC-Context RRC-Context, handoverRestrictionList HandoverRestrictionList OPTIONAL, locationReportingInformation LocationReportingInformation OPTIONAL, managBasedMDTallowed ManagementBasedMDTallowed OPTIONAL, managBasedMDTPLMNList MDTPLMNList OPTIONAL, iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationRetrieve-ExtIEs} } OPTIONAL, ... } */ struct UE_ContextInformationRetrieve : asn::sequence<12, 0, true, 6> { static constexpr const char* name() {return "UE-ContextInformationRetrieve";} using parent_t = asn::sequence<12, 0, true, 6>; struct mME_UE_S1AP_ID_t : UE_S1AP_ID { static constexpr const char* name() {return "mME_UE_S1AP_ID_t";} using parent_t = UE_S1AP_ID; }; mME_UE_S1AP_ID_t& ref_mME_UE_S1AP_ID() {return mME_UE_S1AP_ID;} mME_UE_S1AP_ID_t const& ref_mME_UE_S1AP_ID() const {return mME_UE_S1AP_ID;} struct uESecurityCapabilities_t : UESecurityCapabilities { static constexpr const char* name() {return "uESecurityCapabilities_t";} using parent_t = UESecurityCapabilities; }; uESecurityCapabilities_t& ref_uESecurityCapabilities() {return uESecurityCapabilities;} uESecurityCapabilities_t const& ref_uESecurityCapabilities() const {return uESecurityCapabilities;} struct aS_SecurityInformation_t : AS_SecurityInformation { static constexpr const char* name() {return "aS_SecurityInformation_t";} using parent_t = AS_SecurityInformation; }; aS_SecurityInformation_t& ref_aS_SecurityInformation() {return aS_SecurityInformation;} aS_SecurityInformation_t const& ref_aS_SecurityInformation() const {return aS_SecurityInformation;} struct uEaggregateMaximumBitRate_t : UEAggregateMaximumBitRate { static constexpr const char* name() {return "uEaggregateMaximumBitRate_t";} using parent_t = UEAggregateMaximumBitRate; }; uEaggregateMaximumBitRate_t& ref_uEaggregateMaximumBitRate() {return uEaggregateMaximumBitRate;} uEaggregateMaximumBitRate_t const& ref_uEaggregateMaximumBitRate() const {return uEaggregateMaximumBitRate;} struct subscriberProfileIDforRFP_t : SubscriberProfileIDforRFP { static constexpr const char* name() {return "subscriberProfileIDforRFP_t";} using parent_t = SubscriberProfileIDforRFP; static constexpr bool optional = true; }; subscriberProfileIDforRFP_t& set_subscriberProfileIDforRFP() { subscriberProfileIDforRFP.setpresent(true); return subscriberProfileIDforRFP;} subscriberProfileIDforRFP_t const* get_subscriberProfileIDforRFP() const {return subscriberProfileIDforRFP.is_valid() ? &subscriberProfileIDforRFP : nullptr;} struct e_RABs_ToBeSetup_ListRetrieve_t : E_RABs_ToBeSetup_ListRetrieve { static constexpr const char* name() {return "e_RABs_ToBeSetup_ListRetrieve_t";} using parent_t = E_RABs_ToBeSetup_ListRetrieve; }; e_RABs_ToBeSetup_ListRetrieve_t& ref_e_RABs_ToBeSetup_ListRetrieve() {return e_RABs_ToBeSetup_ListRetrieve;} e_RABs_ToBeSetup_ListRetrieve_t const& ref_e_RABs_ToBeSetup_ListRetrieve() const {return e_RABs_ToBeSetup_ListRetrieve;} struct rRC_Context_t : RRC_Context { static constexpr const char* name() {return "rRC_Context_t";} using parent_t = RRC_Context; }; rRC_Context_t& ref_rRC_Context() {return rRC_Context;} rRC_Context_t const& ref_rRC_Context() const {return rRC_Context;} struct handoverRestrictionList_t : HandoverRestrictionList { static constexpr const char* name() {return "handoverRestrictionList_t";} using parent_t = HandoverRestrictionList; static constexpr bool optional = true; }; handoverRestrictionList_t& set_handoverRestrictionList() { handoverRestrictionList.setpresent(true); return handoverRestrictionList;} handoverRestrictionList_t const* get_handoverRestrictionList() const {return handoverRestrictionList.is_valid() ? &handoverRestrictionList : nullptr;} struct locationReportingInformation_t : LocationReportingInformation { static constexpr const char* name() {return "locationReportingInformation_t";} using parent_t = LocationReportingInformation; static constexpr bool optional = true; }; locationReportingInformation_t& set_locationReportingInformation() { locationReportingInformation.setpresent(true); return locationReportingInformation;} locationReportingInformation_t const* get_locationReportingInformation() const {return locationReportingInformation.is_valid() ? &locationReportingInformation : nullptr;} struct managBasedMDTallowed_t : ManagementBasedMDTallowed { static constexpr const char* name() {return "managBasedMDTallowed_t";} using parent_t = ManagementBasedMDTallowed; static constexpr bool optional = true; }; managBasedMDTallowed_t& set_managBasedMDTallowed() { managBasedMDTallowed.setpresent(true); return managBasedMDTallowed;} managBasedMDTallowed_t const* get_managBasedMDTallowed() const {return managBasedMDTallowed.is_valid() ? &managBasedMDTallowed : nullptr;} struct managBasedMDTPLMNList_t : MDTPLMNList { static constexpr const char* name() {return "managBasedMDTPLMNList_t";} using parent_t = MDTPLMNList; static constexpr bool optional = true; }; managBasedMDTPLMNList_t& set_managBasedMDTPLMNList() { managBasedMDTPLMNList.setpresent(true); return managBasedMDTPLMNList;} managBasedMDTPLMNList_t const* get_managBasedMDTPLMNList() const {return managBasedMDTPLMNList.is_valid() ? &managBasedMDTPLMNList : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(mME_UE_S1AP_ID); v(uESecurityCapabilities); v(aS_SecurityInformation); v(uEaggregateMaximumBitRate); v(subscriberProfileIDforRFP); v(e_RABs_ToBeSetup_ListRetrieve); v(rRC_Context); v(handoverRestrictionList); v(locationReportingInformation); v(managBasedMDTallowed); v(managBasedMDTPLMNList); v(iE_Extensions); }; template void encode(V& v) const { v(mME_UE_S1AP_ID); v(uESecurityCapabilities); v(aS_SecurityInformation); v(uEaggregateMaximumBitRate); v(subscriberProfileIDforRFP); v(e_RABs_ToBeSetup_ListRetrieve); v(rRC_Context); v(handoverRestrictionList); v(locationReportingInformation); v(managBasedMDTallowed); v(managBasedMDTPLMNList); v(iE_Extensions); }; void clear() { mME_UE_S1AP_ID.clear(); uESecurityCapabilities.clear(); aS_SecurityInformation.clear(); uEaggregateMaximumBitRate.clear(); subscriberProfileIDforRFP.clear(); e_RABs_ToBeSetup_ListRetrieve.clear(); rRC_Context.clear(); handoverRestrictionList.clear(); locationReportingInformation.clear(); managBasedMDTallowed.clear(); managBasedMDTPLMNList.clear(); iE_Extensions.clear(); }; private: mME_UE_S1AP_ID_t mME_UE_S1AP_ID; uESecurityCapabilities_t uESecurityCapabilities; aS_SecurityInformation_t aS_SecurityInformation; uEaggregateMaximumBitRate_t uEaggregateMaximumBitRate; subscriberProfileIDforRFP_t subscriberProfileIDforRFP; e_RABs_ToBeSetup_ListRetrieve_t e_RABs_ToBeSetup_ListRetrieve; rRC_Context_t rRC_Context; handoverRestrictionList_t handoverRestrictionList; locationReportingInformation_t locationReportingInformation; managBasedMDTallowed_t managBasedMDTallowed; managBasedMDTPLMNList_t managBasedMDTPLMNList; iE_Extensions_t iE_Extensions; }; /* RetrieveUEContextResponse-IEs X2AP-PROTOCOL-IES ::= { { ID id-New-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-Old-eNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE mandatory}| { ID id-UE-ContextInformationRetrieve CRITICALITY reject TYPE UE-ContextInformationRetrieve PRESENCE mandatory}| { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| { ID id-Masked-IMEISV CRITICALITY ignore TYPE Masked-IMEISV PRESENCE optional}| { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| { ID id-AerialUEsubscriptionInformation CRITICALITY ignore TYPE AerialUEsubscriptionInformation PRESENCE optional}| { ID id-Subscription-Based-UE-DifferentiationInfo CRITICALITY ignore TYPE Subscription-Based-UE-DifferentiationInfo PRESENCE optional}, ... } */ struct RetrieveUEContextResponse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 16; } void clear() {type = 0;} void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=1;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=2;} void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=3;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} void select_id_GUMMEI_ID() { set(id_GUMMEI_ID); type=5;} void select_id_UE_ContextInformationRetrieve() { set(id_UE_ContextInformationRetrieve); type=6;} void select_id_TraceActivation() { set(id_TraceActivation); type=7;} void select_id_SRVCCOperationPossible() { set(id_SRVCCOperationPossible); type=8;} void select_id_Masked_IMEISV() { set(id_Masked_IMEISV); type=9;} void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=10;} void select_id_ProSeAuthorized() { set(id_ProSeAuthorized); type=11;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=12;} void select_id_V2XServicesAuthorized() { set(id_V2XServicesAuthorized); type=13;} void select_id_AerialUEsubscriptionInformation() { set(id_AerialUEsubscriptionInformation); type=14;} void select_id_Subscription_Based_UE_DifferentiationInfo() { set(id_Subscription_Based_UE_DifferentiationInfo); type=15;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_New_eNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 2; return true; } else if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 3; return true; } else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else if(equal(id_GUMMEI_ID)) { type = 5; return true; } else if(equal(id_UE_ContextInformationRetrieve)) { type = 6; return true; } else if(equal(id_TraceActivation)) { type = 7; return true; } else if(equal(id_SRVCCOperationPossible)) { type = 8; return true; } else if(equal(id_Masked_IMEISV)) { type = 9; return true; } else if(equal(id_ExpectedUEBehaviour)) { type = 10; return true; } else if(equal(id_ProSeAuthorized)) { type = 11; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 12; return true; } else if(equal(id_V2XServicesAuthorized)) { type = 13; return true; } else if(equal(id_AerialUEsubscriptionInformation)) { type = 14; return true; } else if(equal(id_Subscription_Based_UE_DifferentiationInfo)) { type = 15; return true; } else { type = 16; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_GUMMEI_ID);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_ContextInformationRetrieve);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_TraceActivation);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_SRVCCOperationPossible);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_Masked_IMEISV);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(id_ProSeAuthorized);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(id_V2XServicesAuthorized);} return false; case 14: type = 14; if(v(ref_nested())) { return equal(id_AerialUEsubscriptionInformation);} return false; case 15: type = 15; if(v(ref_nested())) { return equal(id_Subscription_Based_UE_DifferentiationInfo);} return false; case 16: type = 16; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 16; } void clear() {type = 0;} void select_id_New_eNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(ignore); type=2;} void select_id_Old_eNB_UE_X2AP_ID() { set(ignore); type=3;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} void select_id_GUMMEI_ID() { set(reject); type=5;} void select_id_UE_ContextInformationRetrieve() { set(reject); type=6;} void select_id_TraceActivation() { set(ignore); type=7;} void select_id_SRVCCOperationPossible() { set(ignore); type=8;} void select_id_Masked_IMEISV() { set(ignore); type=9;} void select_id_ExpectedUEBehaviour() { set(ignore); type=10;} void select_id_ProSeAuthorized() { set(ignore); type=11;} void select_id_CriticalityDiagnostics() { set(ignore); type=12;} void select_id_V2XServicesAuthorized() { set(ignore); type=13;} void select_id_AerialUEsubscriptionInformation() { set(ignore); type=14;} void select_id_Subscription_Based_UE_DifferentiationInfo() { set(ignore); type=15;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else if(equal(reject)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else if(equal(ignore)) { type = 8; return true; } else if(equal(ignore)) { type = 9; return true; } else if(equal(ignore)) { type = 10; return true; } else if(equal(ignore)) { type = 11; return true; } else if(equal(ignore)) { type = 12; return true; } else if(equal(ignore)) { type = 13; return true; } else if(equal(ignore)) { type = 14; return true; } else if(equal(ignore)) { type = 15; return true; } else { type = 16; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; case 14: type = 14; if(v(ref_nested())) { return equal(ignore);} return false; case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; case 16: type = 16; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(2); } UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(2); } UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(3); } UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(3); } UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } GUMMEI& select_id_GUMMEI_ID() { return set(5); } GUMMEI const* get_id_GUMMEI_ID() const { return get(5); } UE_ContextInformationRetrieve& select_id_UE_ContextInformationRetrieve() { return set(6); } UE_ContextInformationRetrieve const* get_id_UE_ContextInformationRetrieve() const { return get(6); } TraceActivation& select_id_TraceActivation() { return set(7); } TraceActivation const* get_id_TraceActivation() const { return get(7); } SRVCCOperationPossible& select_id_SRVCCOperationPossible() { return set(8); } SRVCCOperationPossible const* get_id_SRVCCOperationPossible() const { return get(8); } Masked_IMEISV& select_id_Masked_IMEISV() { return set(9); } Masked_IMEISV const* get_id_Masked_IMEISV() const { return get(9); } ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(10); } ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(10); } ProSeAuthorized& select_id_ProSeAuthorized() { return set(11); } ProSeAuthorized const* get_id_ProSeAuthorized() const { return get(11); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(12); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(12); } V2XServicesAuthorized& select_id_V2XServicesAuthorized() { return set(13); } V2XServicesAuthorized const* get_id_V2XServicesAuthorized() const { return get(13); } AerialUEsubscriptionInformation& select_id_AerialUEsubscriptionInformation() { return set(14); } AerialUEsubscriptionInformation const* get_id_AerialUEsubscriptionInformation() const { return get(14); } Subscription_Based_UE_DifferentiationInfo& select_id_Subscription_Based_UE_DifferentiationInfo() { return set(15); } Subscription_Based_UE_DifferentiationInfo const* get_id_Subscription_Based_UE_DifferentiationInfo() const { return get(15); } bool is_unknown() const { return type == 16; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; case 11: var.destroy(); break; case 12: var.destroy(); break; case 13: var.destroy(); break; case 14: var.destroy(); break; case 15: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); v.template operator()(11); v.template operator()(12); v.template operator()(13); v.template operator()(14); v.template operator()(15); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_New_eNB_UE_X2AP_ID()); return true; case 2: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; case 3: v(select_id_Old_eNB_UE_X2AP_ID()); return true; case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; case 5: v(select_id_GUMMEI_ID()); return true; case 6: v(select_id_UE_ContextInformationRetrieve()); return true; case 7: v(select_id_TraceActivation()); return true; case 8: v(select_id_SRVCCOperationPossible()); return true; case 9: v(select_id_Masked_IMEISV()); return true; case 10: v(select_id_ExpectedUEBehaviour()); return true; case 11: v(select_id_ProSeAuthorized()); return true; case 12: v(select_id_CriticalityDiagnostics()); return true; case 13: v(select_id_V2XServicesAuthorized()); return true; case 14: v(select_id_AerialUEsubscriptionInformation()); return true; case 15: v(select_id_Subscription_Based_UE_DifferentiationInfo()); return true; case 16: if(type != 16) {clear(); asn::base::set();} type = 16; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; case 11: v(var.as()); return true; case 12: v(var.as()); return true; case 13: v(var.as()); return true; case 14: v(var.as()); return true; case 15: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(AerialUEsubscriptionInformation)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(ExpectedUEBehaviour)]; char dummy4[sizeof(GUMMEI)]; char dummy5[sizeof(Masked_IMEISV)]; char dummy6[sizeof(ProSeAuthorized)]; char dummy7[sizeof(SRVCCOperationPossible)]; char dummy8[sizeof(Subscription_Based_UE_DifferentiationInfo)]; char dummy9[sizeof(TraceActivation)]; char dummy10[sizeof(UE_ContextInformationRetrieve)]; char dummy11[sizeof(UE_X2AP_ID)]; char dummy12[sizeof(UE_X2AP_ID_Extension)]; char dummy13[sizeof(V2XServicesAuthorized)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 16; } void clear() {type = 0;} void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=2;} void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=3;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} void select_id_GUMMEI_ID() { set(mandatory); type=5;} void select_id_UE_ContextInformationRetrieve() { set(mandatory); type=6;} void select_id_TraceActivation() { set(optional); type=7;} void select_id_SRVCCOperationPossible() { set(optional); type=8;} void select_id_Masked_IMEISV() { set(optional); type=9;} void select_id_ExpectedUEBehaviour() { set(optional); type=10;} void select_id_ProSeAuthorized() { set(optional); type=11;} void select_id_CriticalityDiagnostics() { set(optional); type=12;} void select_id_V2XServicesAuthorized() { set(optional); type=13;} void select_id_AerialUEsubscriptionInformation() { set(optional); type=14;} void select_id_Subscription_Based_UE_DifferentiationInfo() { set(optional); type=15;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(mandatory)) { type = 5; return true; } else if(equal(mandatory)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else if(equal(optional)) { type = 11; return true; } else if(equal(optional)) { type = 12; return true; } else if(equal(optional)) { type = 13; return true; } else if(equal(optional)) { type = 14; return true; } else if(equal(optional)) { type = 15; return true; } else { type = 16; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; case 16: type = 16; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* RetrieveUEContextResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ RetrieveUEContextResponse-IEs}}, ... } */ struct RetrieveUEContextResponse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "RetrieveUEContextResponse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SNStatusTransfer-IEs X2AP-PROTOCOL-IES ::= { { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-E-RABs-SubjectToStatusTransfer-List CRITICALITY ignore TYPE E-RABs-SubjectToStatusTransfer-List PRESENCE mandatory}| { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, ... } */ struct SNStatusTransfer_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} void select_id_E_RABs_SubjectToStatusTransfer_List() { set(id_E_RABs_SubjectToStatusTransfer_List); type=3;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=4;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=5;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=6;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_E_RABs_SubjectToStatusTransfer_List)) { type = 3; return true; } else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToStatusTransfer_List);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_E_RABs_SubjectToStatusTransfer_List() { set(ignore); type=3;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=5;} void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=6;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } E_RABs_SubjectToStatusTransfer_List& select_id_E_RABs_SubjectToStatusTransfer_List() { return set(3); } E_RABs_SubjectToStatusTransfer_List const* get_id_E_RABs_SubjectToStatusTransfer_List() const { return get(3); } UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(4); } UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(5); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(6); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(6); } bool is_unknown() const { return type == 7; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; case 3: v(select_id_E_RABs_SubjectToStatusTransfer_List()); return true; case 4: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; case 5: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; case 6: v(select_id_SgNB_UE_X2AP_ID()); return true; case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_SubjectToStatusTransfer_List)]; char dummy2[sizeof(SgNB_UE_X2AP_ID)]; char dummy3[sizeof(UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_E_RABs_SubjectToStatusTransfer_List() { set(mandatory); type=3;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=5;} void select_id_SgNB_UE_X2AP_ID() { set(optional); type=6;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SNStatusTransfer ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SNStatusTransfer-IEs}}, ... } */ struct SNStatusTransfer : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SNStatusTransfer";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBAdditionRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-UE-SecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE conditional}| -- This IE shall be present if the Bearer Option IE is set to the value “SCG bearer” -- { ID id-SeNBSecurityKey CRITICALITY reject TYPE SeNBSecurityKey PRESENCE conditional}| -- This IE shall be present if the Bearer Option IE is set to the value “SCG bearer” -- { ID id-SeNBUEAggregateMaximumBitRate CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE mandatory}| { ID id-ServingPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| { ID id-E-RABs-ToBeAdded-List CRITICALITY reject TYPE E-RABs-ToBeAdded-List PRESENCE mandatory}| { ID id-MeNBtoSeNBContainer CRITICALITY reject TYPE MeNBtoSeNBContainer PRESENCE mandatory}| { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SeNBAdditionRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 13; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_UE_SecurityCapabilities() { set(id_UE_SecurityCapabilities); type=2;} void select_id_SeNBSecurityKey() { set(id_SeNBSecurityKey); type=3;} void select_id_SeNBUEAggregateMaximumBitRate() { set(id_SeNBUEAggregateMaximumBitRate); type=4;} void select_id_ServingPLMN() { set(id_ServingPLMN); type=5;} void select_id_E_RABs_ToBeAdded_List() { set(id_E_RABs_ToBeAdded_List); type=6;} void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=7;} void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=8;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=9;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=11;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=12;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_UE_SecurityCapabilities)) { type = 2; return true; } else if(equal(id_SeNBSecurityKey)) { type = 3; return true; } else if(equal(id_SeNBUEAggregateMaximumBitRate)) { type = 4; return true; } else if(equal(id_ServingPLMN)) { type = 5; return true; } else if(equal(id_E_RABs_ToBeAdded_List)) { type = 6; return true; } else if(equal(id_MeNBtoSeNBContainer)) { type = 7; return true; } else if(equal(id_CSGMembershipStatus)) { type = 8; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 9; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } else if(equal(id_ExpectedUEBehaviour)) { type = 11; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 12; return true; } else { type = 13; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_UE_SecurityCapabilities);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_SeNBSecurityKey);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_SeNBUEAggregateMaximumBitRate);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_ServingPLMN);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_List);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 13: type = 13; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 13; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_UE_SecurityCapabilities() { set(reject); type=2;} void select_id_SeNBSecurityKey() { set(reject); type=3;} void select_id_SeNBUEAggregateMaximumBitRate() { set(reject); type=4;} void select_id_ServingPLMN() { set(ignore); type=5;} void select_id_E_RABs_ToBeAdded_List() { set(reject); type=6;} void select_id_MeNBtoSeNBContainer() { set(reject); type=7;} void select_id_CSGMembershipStatus() { set(reject); type=8;} void select_id_SeNB_UE_X2AP_ID() { set(reject); type=9;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} void select_id_ExpectedUEBehaviour() { set(ignore); type=11;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=12;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(reject)) { type = 6; return true; } else if(equal(reject)) { type = 7; return true; } else if(equal(reject)) { type = 8; return true; } else if(equal(reject)) { type = 9; return true; } else if(equal(reject)) { type = 10; return true; } else if(equal(ignore)) { type = 11; return true; } else if(equal(reject)) { type = 12; return true; } else { type = 13; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; case 13: type = 13; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UESecurityCapabilities& select_id_UE_SecurityCapabilities() { return set(2); } UESecurityCapabilities const* get_id_UE_SecurityCapabilities() const { return get(2); } SeNBSecurityKey& select_id_SeNBSecurityKey() { return set(3); } SeNBSecurityKey const* get_id_SeNBSecurityKey() const { return get(3); } UEAggregateMaximumBitRate& select_id_SeNBUEAggregateMaximumBitRate() { return set(4); } UEAggregateMaximumBitRate const* get_id_SeNBUEAggregateMaximumBitRate() const { return get(4); } PLMN_Identity& select_id_ServingPLMN() { return set(5); } PLMN_Identity const* get_id_ServingPLMN() const { return get(5); } E_RABs_ToBeAdded_List& select_id_E_RABs_ToBeAdded_List() { return set(6); } E_RABs_ToBeAdded_List const* get_id_E_RABs_ToBeAdded_List() const { return get(6); } MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(7); } MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(7); } CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(8); } CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(8); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(9); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(9); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(11); } ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(11); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(12); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(12); } bool is_unknown() const { return type == 13; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; case 11: var.destroy(); break; case 12: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); v.template operator()(11); v.template operator()(12); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_UE_SecurityCapabilities()); return true; case 3: v(select_id_SeNBSecurityKey()); return true; case 4: v(select_id_SeNBUEAggregateMaximumBitRate()); return true; case 5: v(select_id_ServingPLMN()); return true; case 6: v(select_id_E_RABs_ToBeAdded_List()); return true; case 7: v(select_id_MeNBtoSeNBContainer()); return true; case 8: v(select_id_CSGMembershipStatus()); return true; case 9: v(select_id_SeNB_UE_X2AP_ID()); return true; case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 11: v(select_id_ExpectedUEBehaviour()); return true; case 12: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 13: if(type != 13) {clear(); asn::base::set();} type = 13; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; case 11: v(var.as()); return true; case 12: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CSGMembershipStatus)]; char dummy2[sizeof(E_RABs_ToBeAdded_List)]; char dummy3[sizeof(ExpectedUEBehaviour)]; char dummy4[sizeof(MeNBtoSeNBContainer)]; char dummy5[sizeof(PLMN_Identity)]; char dummy6[sizeof(SeNBSecurityKey)]; char dummy7[sizeof(UEAggregateMaximumBitRate)]; char dummy8[sizeof(UESecurityCapabilities)]; char dummy9[sizeof(UE_X2AP_ID)]; char dummy10[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 13; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_UE_SecurityCapabilities() { set(conditional); type=2;} void select_id_SeNBSecurityKey() { set(conditional); type=3;} void select_id_SeNBUEAggregateMaximumBitRate() { set(mandatory); type=4;} void select_id_ServingPLMN() { set(optional); type=5;} void select_id_E_RABs_ToBeAdded_List() { set(mandatory); type=6;} void select_id_MeNBtoSeNBContainer() { set(mandatory); type=7;} void select_id_CSGMembershipStatus() { set(optional); type=8;} void select_id_SeNB_UE_X2AP_ID() { set(optional); type=9;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} void select_id_ExpectedUEBehaviour() { set(optional); type=11;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=12;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(conditional)) { type = 2; return true; } else if(equal(conditional)) { type = 3; return true; } else if(equal(mandatory)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(mandatory)) { type = 6; return true; } else if(equal(mandatory)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else if(equal(optional)) { type = 11; return true; } else if(equal(optional)) { type = 12; return true; } else { type = 13; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(conditional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(mandatory);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; case 13: type = 13; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBAdditionRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBAdditionRequest-IEs}}, ... } */ struct SeNBAdditionRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBAdditionRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBAdditionRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-E-RABs-Admitted-ToBeAdded-List CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-List PRESENCE mandatory}| { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| { ID id-SeNBtoMeNBContainer CRITICALITY reject TYPE SeNBtoMeNBContainer PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| { ID id-SIPTO-L-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}, ... } */ struct SeNBAdditionRequestAcknowledge_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 12; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_E_RABs_Admitted_ToBeAdded_List() { set(id_E_RABs_Admitted_ToBeAdded_List); type=3;} void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=5;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} void select_id_GW_TransportLayerAddress() { set(id_GW_TransportLayerAddress); type=7;} void select_id_SIPTO_L_GW_TransportLayerAddress() { set(id_SIPTO_L_GW_TransportLayerAddress); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} void select_id_Tunnel_Information_for_BBF() { set(id_Tunnel_Information_for_BBF); type=11;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_E_RABs_Admitted_ToBeAdded_List)) { type = 3; return true; } else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } else if(equal(id_SeNBtoMeNBContainer)) { type = 5; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } else if(equal(id_GW_TransportLayerAddress)) { type = 7; return true; } else if(equal(id_SIPTO_L_GW_TransportLayerAddress)) { type = 8; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } else if(equal(id_Tunnel_Information_for_BBF)) { type = 11; return true; } else { type = 12; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_List);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_GW_TransportLayerAddress);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_SIPTO_L_GW_TransportLayerAddress);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(id_Tunnel_Information_for_BBF);} return false; case 12: type = 12; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 12; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_E_RABs_Admitted_ToBeAdded_List() { set(ignore); type=3;} void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} void select_id_SeNBtoMeNBContainer() { set(reject); type=5;} void select_id_CriticalityDiagnostics() { set(ignore); type=6;} void select_id_GW_TransportLayerAddress() { set(ignore); type=7;} void select_id_SIPTO_L_GW_TransportLayerAddress() { set(ignore); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} void select_id_Tunnel_Information_for_BBF() { set(ignore); type=11;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else if(equal(ignore)) { type = 8; return true; } else if(equal(reject)) { type = 9; return true; } else if(equal(reject)) { type = 10; return true; } else if(equal(ignore)) { type = 11; return true; } else { type = 12; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; case 12: type = 12; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } E_RABs_Admitted_ToBeAdded_List& select_id_E_RABs_Admitted_ToBeAdded_List() { return set(3); } E_RABs_Admitted_ToBeAdded_List const* get_id_E_RABs_Admitted_ToBeAdded_List() const { return get(3); } E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(5); } SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(5); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } TransportLayerAddress& select_id_GW_TransportLayerAddress() { return set(7); } TransportLayerAddress const* get_id_GW_TransportLayerAddress() const { return get(7); } TransportLayerAddress& select_id_SIPTO_L_GW_TransportLayerAddress() { return set(8); } TransportLayerAddress const* get_id_SIPTO_L_GW_TransportLayerAddress() const { return get(8); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } TunnelInformation& select_id_Tunnel_Information_for_BBF() { return set(11); } TunnelInformation const* get_id_Tunnel_Information_for_BBF() const { return get(11); } bool is_unknown() const { return type == 12; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; case 11: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); v.template operator()(11); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_E_RABs_Admitted_ToBeAdded_List()); return true; case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; case 5: v(select_id_SeNBtoMeNBContainer()); return true; case 6: v(select_id_CriticalityDiagnostics()); return true; case 7: v(select_id_GW_TransportLayerAddress()); return true; case 8: v(select_id_SIPTO_L_GW_TransportLayerAddress()); return true; case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 11: v(select_id_Tunnel_Information_for_BBF()); return true; case 12: if(type != 12) {clear(); asn::base::set();} type = 12; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; case 11: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(E_RAB_List)]; char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_List)]; char dummy4[sizeof(SeNBtoMeNBContainer)]; char dummy5[sizeof(TransportLayerAddress)]; char dummy6[sizeof(TunnelInformation)]; char dummy7[sizeof(UE_X2AP_ID)]; char dummy8[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 12; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_E_RABs_Admitted_ToBeAdded_List() { set(mandatory); type=3;} void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} void select_id_SeNBtoMeNBContainer() { set(mandatory); type=5;} void select_id_CriticalityDiagnostics() { set(optional); type=6;} void select_id_GW_TransportLayerAddress() { set(optional); type=7;} void select_id_SIPTO_L_GW_TransportLayerAddress() { set(optional); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} void select_id_Tunnel_Information_for_BBF() { set(optional); type=11;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(mandatory)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else if(equal(optional)) { type = 11; return true; } else { type = 12; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; case 12: type = 12; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBAdditionRequestAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBAdditionRequestAcknowledge-IEs}}, ... } */ struct SeNBAdditionRequestAcknowledge : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBAdditionRequestAcknowledge";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBAdditionRequestReject-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SeNBAdditionRequestReject_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else if(equal(reject)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } bool is_unknown() const { return type == 7; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBAdditionRequestReject ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBAdditionRequestReject-IEs}}, ... } */ struct SeNBAdditionRequestReject : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBAdditionRequestReject";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBCounterCheckRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-E-RABs-SubjectToCounterCheck-List CRITICALITY ignore TYPE E-RABs-SubjectToCounterCheck-List PRESENCE mandatory}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SeNBCounterCheckRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_E_RABs_SubjectToCounterCheck_List() { set(id_E_RABs_SubjectToCounterCheck_List); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_E_RABs_SubjectToCounterCheck_List)) { type = 3; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToCounterCheck_List);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_E_RABs_SubjectToCounterCheck_List() { set(ignore); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } E_RABs_SubjectToCounterCheck_List& select_id_E_RABs_SubjectToCounterCheck_List() { return set(3); } E_RABs_SubjectToCounterCheck_List const* get_id_E_RABs_SubjectToCounterCheck_List() const { return get(3); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_E_RABs_SubjectToCounterCheck_List()); return true; case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_SubjectToCounterCheck_List)]; char dummy2[sizeof(UE_X2AP_ID)]; char dummy3[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_E_RABs_SubjectToCounterCheck_List() { set(mandatory); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBCounterCheckRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBCounterCheckRequest-IEs}}, ... } */ struct SeNBCounterCheckRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBCounterCheckRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBModificationConfirm-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SeNBModificationConfirm_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_MeNBtoSeNBContainer)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_MeNBtoSeNBContainer() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(3); } MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } bool is_unknown() const { return type == 7; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_MeNBtoSeNBContainer()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(MeNBtoSeNBContainer)]; char dummy3[sizeof(UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_MeNBtoSeNBContainer() { set(optional); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBModificationConfirm ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBModificationConfirm-IEs}}, ... } */ struct SeNBModificationConfirm : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBModificationConfirm";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBModificationRefuse-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SeNBModificationRefuse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=4;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=7;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_MeNBtoSeNBContainer)) { type = 4; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_MeNBtoSeNBContainer() { set(ignore); type=4;} void select_id_CriticalityDiagnostics() { set(ignore); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=7;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(4); } MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(4); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(7); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(7); } bool is_unknown() const { return type == 8; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_MeNBtoSeNBContainer()); return true; case 5: v(select_id_CriticalityDiagnostics()); return true; case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 7: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(MeNBtoSeNBContainer)]; char dummy4[sizeof(UE_X2AP_ID)]; char dummy5[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_MeNBtoSeNBContainer() { set(optional); type=4;} void select_id_CriticalityDiagnostics() { set(optional); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBModificationRefuse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBModificationRefuse-IEs}}, ... } */ struct SeNBModificationRefuse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBModificationRefuse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* UE-ContextInformationSeNBModReqExtIEs X2AP-PROTOCOL-EXTENSION ::= { ... } */ struct UE_ContextInformationSeNBModReqExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() { type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; return false; } private: size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 1; } void clear() {type = 0;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; { type = 1; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* UE-ContextInformationSeNBModReq ::= SEQUENCE { uE-SecurityCapabilities UESecurityCapabilities OPTIONAL, seNB-SecurityKey SeNBSecurityKey OPTIONAL, seNBUEAggregateMaximumBitRate UEAggregateMaximumBitRate OPTIONAL, e-RABs-ToBeAdded E-RABs-ToBeAdded-List-ModReq OPTIONAL, e-RABs-ToBeModified E-RABs-ToBeModified-List-ModReq OPTIONAL, e-RABs-ToBeReleased E-RABs-ToBeReleased-List-ModReq OPTIONAL, iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationSeNBModReqExtIEs} } OPTIONAL, ... } */ struct UE_ContextInformationSeNBModReq : asn::sequence<7, 0, true, 7> { static constexpr const char* name() {return "UE-ContextInformationSeNBModReq";} using parent_t = asn::sequence<7, 0, true, 7>; struct uE_SecurityCapabilities_t : UESecurityCapabilities { static constexpr const char* name() {return "uE_SecurityCapabilities_t";} using parent_t = UESecurityCapabilities; static constexpr bool optional = true; }; uE_SecurityCapabilities_t& set_uE_SecurityCapabilities() { uE_SecurityCapabilities.setpresent(true); return uE_SecurityCapabilities;} uE_SecurityCapabilities_t const* get_uE_SecurityCapabilities() const {return uE_SecurityCapabilities.is_valid() ? &uE_SecurityCapabilities : nullptr;} struct seNB_SecurityKey_t : SeNBSecurityKey { static constexpr const char* name() {return "seNB_SecurityKey_t";} using parent_t = SeNBSecurityKey; static constexpr bool optional = true; }; seNB_SecurityKey_t& set_seNB_SecurityKey() { seNB_SecurityKey.setpresent(true); return seNB_SecurityKey;} seNB_SecurityKey_t const* get_seNB_SecurityKey() const {return seNB_SecurityKey.is_valid() ? &seNB_SecurityKey : nullptr;} struct seNBUEAggregateMaximumBitRate_t : UEAggregateMaximumBitRate { static constexpr const char* name() {return "seNBUEAggregateMaximumBitRate_t";} using parent_t = UEAggregateMaximumBitRate; static constexpr bool optional = true; }; seNBUEAggregateMaximumBitRate_t& set_seNBUEAggregateMaximumBitRate() { seNBUEAggregateMaximumBitRate.setpresent(true); return seNBUEAggregateMaximumBitRate;} seNBUEAggregateMaximumBitRate_t const* get_seNBUEAggregateMaximumBitRate() const {return seNBUEAggregateMaximumBitRate.is_valid() ? &seNBUEAggregateMaximumBitRate : nullptr;} struct e_RABs_ToBeAdded_t : E_RABs_ToBeAdded_List_ModReq { static constexpr const char* name() {return "e_RABs_ToBeAdded_t";} using parent_t = E_RABs_ToBeAdded_List_ModReq; static constexpr bool optional = true; }; e_RABs_ToBeAdded_t& set_e_RABs_ToBeAdded() { e_RABs_ToBeAdded.setpresent(true); return e_RABs_ToBeAdded;} e_RABs_ToBeAdded_t const* get_e_RABs_ToBeAdded() const {return e_RABs_ToBeAdded.is_valid() ? &e_RABs_ToBeAdded : nullptr;} struct e_RABs_ToBeModified_t : E_RABs_ToBeModified_List_ModReq { static constexpr const char* name() {return "e_RABs_ToBeModified_t";} using parent_t = E_RABs_ToBeModified_List_ModReq; static constexpr bool optional = true; }; e_RABs_ToBeModified_t& set_e_RABs_ToBeModified() { e_RABs_ToBeModified.setpresent(true); return e_RABs_ToBeModified;} e_RABs_ToBeModified_t const* get_e_RABs_ToBeModified() const {return e_RABs_ToBeModified.is_valid() ? &e_RABs_ToBeModified : nullptr;} struct e_RABs_ToBeReleased_t : E_RABs_ToBeReleased_List_ModReq { static constexpr const char* name() {return "e_RABs_ToBeReleased_t";} using parent_t = E_RABs_ToBeReleased_List_ModReq; static constexpr bool optional = true; }; e_RABs_ToBeReleased_t& set_e_RABs_ToBeReleased() { e_RABs_ToBeReleased.setpresent(true); return e_RABs_ToBeReleased;} e_RABs_ToBeReleased_t const* get_e_RABs_ToBeReleased() const {return e_RABs_ToBeReleased.is_valid() ? &e_RABs_ToBeReleased : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(uE_SecurityCapabilities); v(seNB_SecurityKey); v(seNBUEAggregateMaximumBitRate); v(e_RABs_ToBeAdded); v(e_RABs_ToBeModified); v(e_RABs_ToBeReleased); v(iE_Extensions); }; template void encode(V& v) const { v(uE_SecurityCapabilities); v(seNB_SecurityKey); v(seNBUEAggregateMaximumBitRate); v(e_RABs_ToBeAdded); v(e_RABs_ToBeModified); v(e_RABs_ToBeReleased); v(iE_Extensions); }; void clear() { uE_SecurityCapabilities.clear(); seNB_SecurityKey.clear(); seNBUEAggregateMaximumBitRate.clear(); e_RABs_ToBeAdded.clear(); e_RABs_ToBeModified.clear(); e_RABs_ToBeReleased.clear(); iE_Extensions.clear(); }; private: uE_SecurityCapabilities_t uE_SecurityCapabilities; seNB_SecurityKey_t seNB_SecurityKey; seNBUEAggregateMaximumBitRate_t seNBUEAggregateMaximumBitRate; e_RABs_ToBeAdded_t e_RABs_ToBeAdded; e_RABs_ToBeModified_t e_RABs_ToBeModified; e_RABs_ToBeReleased_t e_RABs_ToBeReleased; iE_Extensions_t iE_Extensions; }; /* SeNBModificationRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-SCGChangeIndication CRITICALITY ignore TYPE SCGChangeIndication PRESENCE optional}| { ID id-ServingPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| { ID id-UE-ContextInformationSeNBModReq CRITICALITY reject TYPE UE-ContextInformationSeNBModReq PRESENCE optional}| { ID id-MeNBtoSeNBContainer CRITICALITY ignore TYPE MeNBtoSeNBContainer PRESENCE optional}| { ID id-CSGMembershipStatus CRITICALITY reject TYPE CSGMembershipStatus PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SeNBModificationRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_SCGChangeIndication() { set(id_SCGChangeIndication); type=4;} void select_id_ServingPLMN() { set(id_ServingPLMN); type=5;} void select_id_UE_ContextInformationSeNBModReq() { set(id_UE_ContextInformationSeNBModReq); type=6;} void select_id_MeNBtoSeNBContainer() { set(id_MeNBtoSeNBContainer); type=7;} void select_id_CSGMembershipStatus() { set(id_CSGMembershipStatus); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_SCGChangeIndication)) { type = 4; return true; } else if(equal(id_ServingPLMN)) { type = 5; return true; } else if(equal(id_UE_ContextInformationSeNBModReq)) { type = 6; return true; } else if(equal(id_MeNBtoSeNBContainer)) { type = 7; return true; } else if(equal(id_CSGMembershipStatus)) { type = 8; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_SCGChangeIndication);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_ServingPLMN);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_UE_ContextInformationSeNBModReq);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSeNBContainer);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_CSGMembershipStatus);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_SCGChangeIndication() { set(ignore); type=4;} void select_id_ServingPLMN() { set(ignore); type=5;} void select_id_UE_ContextInformationSeNBModReq() { set(reject); type=6;} void select_id_MeNBtoSeNBContainer() { set(ignore); type=7;} void select_id_CSGMembershipStatus() { set(reject); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=10;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(reject)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else if(equal(reject)) { type = 8; return true; } else if(equal(reject)) { type = 9; return true; } else if(equal(reject)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } SCGChangeIndication& select_id_SCGChangeIndication() { return set(4); } SCGChangeIndication const* get_id_SCGChangeIndication() const { return get(4); } PLMN_Identity& select_id_ServingPLMN() { return set(5); } PLMN_Identity const* get_id_ServingPLMN() const { return get(5); } UE_ContextInformationSeNBModReq& select_id_UE_ContextInformationSeNBModReq() { return set(6); } UE_ContextInformationSeNBModReq const* get_id_UE_ContextInformationSeNBModReq() const { return get(6); } MeNBtoSeNBContainer& select_id_MeNBtoSeNBContainer() { return set(7); } MeNBtoSeNBContainer const* get_id_MeNBtoSeNBContainer() const { return get(7); } CSGMembershipStatus& select_id_CSGMembershipStatus() { return set(8); } CSGMembershipStatus const* get_id_CSGMembershipStatus() const { return get(8); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } bool is_unknown() const { return type == 11; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_SCGChangeIndication()); return true; case 5: v(select_id_ServingPLMN()); return true; case 6: v(select_id_UE_ContextInformationSeNBModReq()); return true; case 7: v(select_id_MeNBtoSeNBContainer()); return true; case 8: v(select_id_CSGMembershipStatus()); return true; case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CSGMembershipStatus)]; char dummy2[sizeof(Cause)]; char dummy3[sizeof(MeNBtoSeNBContainer)]; char dummy4[sizeof(PLMN_Identity)]; char dummy5[sizeof(SCGChangeIndication)]; char dummy6[sizeof(UE_ContextInformationSeNBModReq)]; char dummy7[sizeof(UE_X2AP_ID)]; char dummy8[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_SCGChangeIndication() { set(optional); type=4;} void select_id_ServingPLMN() { set(optional); type=5;} void select_id_UE_ContextInformationSeNBModReq() { set(optional); type=6;} void select_id_MeNBtoSeNBContainer() { set(optional); type=7;} void select_id_CSGMembershipStatus() { set(optional); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBModificationRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ SeNBModificationRequest-IEs}}, ... } */ struct SeNBModificationRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBModificationRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBModificationRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-E-RABs-Admitted-ToBeAdded-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-ModAckList PRESENCE optional}| { ID id-E-RABs-Admitted-ToBeModified-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-ModAckList PRESENCE optional}| { ID id-E-RABs-Admitted-ToBeReleased-ModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-ModAckList PRESENCE optional}| { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| { ID id-SeNBtoMeNBContainer CRITICALITY ignore TYPE SeNBtoMeNBContainer PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SeNBModificationRequestAcknowledge_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(id_E_RABs_Admitted_ToBeAdded_ModAckList); type=3;} void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(id_E_RABs_Admitted_ToBeModified_ModAckList); type=4;} void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(id_E_RABs_Admitted_ToBeReleased_ModAckList); type=5;} void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=6;} void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=7;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=10;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_E_RABs_Admitted_ToBeAdded_ModAckList)) { type = 3; return true; } else if(equal(id_E_RABs_Admitted_ToBeModified_ModAckList)) { type = 4; return true; } else if(equal(id_E_RABs_Admitted_ToBeReleased_ModAckList)) { type = 5; return true; } else if(equal(id_E_RABs_NotAdmitted_List)) { type = 6; return true; } else if(equal(id_SeNBtoMeNBContainer)) { type = 7; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 8; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_ModAckList);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_ModAckList);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_ModAckList);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(ignore); type=3;} void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(ignore); type=4;} void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(ignore); type=5;} void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=6;} void select_id_SeNBtoMeNBContainer() { set(ignore); type=7;} void select_id_CriticalityDiagnostics() { set(ignore); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=10;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else if(equal(ignore)) { type = 8; return true; } else if(equal(ignore)) { type = 9; return true; } else if(equal(ignore)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } E_RABs_Admitted_ToBeAdded_ModAckList& select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { return set(3); } E_RABs_Admitted_ToBeAdded_ModAckList const* get_id_E_RABs_Admitted_ToBeAdded_ModAckList() const { return get(3); } E_RABs_Admitted_ToBeModified_ModAckList& select_id_E_RABs_Admitted_ToBeModified_ModAckList() { return set(4); } E_RABs_Admitted_ToBeModified_ModAckList const* get_id_E_RABs_Admitted_ToBeModified_ModAckList() const { return get(4); } E_RABs_Admitted_ToBeReleased_ModAckList& select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { return set(5); } E_RABs_Admitted_ToBeReleased_ModAckList const* get_id_E_RABs_Admitted_ToBeReleased_ModAckList() const { return get(5); } E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(6); } E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(6); } SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(7); } SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(7); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(8); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(8); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(10); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(10); } bool is_unknown() const { return type == 11; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_E_RABs_Admitted_ToBeAdded_ModAckList()); return true; case 4: v(select_id_E_RABs_Admitted_ToBeModified_ModAckList()); return true; case 5: v(select_id_E_RABs_Admitted_ToBeReleased_ModAckList()); return true; case 6: v(select_id_E_RABs_NotAdmitted_List()); return true; case 7: v(select_id_SeNBtoMeNBContainer()); return true; case 8: v(select_id_CriticalityDiagnostics()); return true; case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 10: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(E_RAB_List)]; char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_ModAckList)]; char dummy4[sizeof(E_RABs_Admitted_ToBeModified_ModAckList)]; char dummy5[sizeof(E_RABs_Admitted_ToBeReleased_ModAckList)]; char dummy6[sizeof(SeNBtoMeNBContainer)]; char dummy7[sizeof(UE_X2AP_ID)]; char dummy8[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_E_RABs_Admitted_ToBeAdded_ModAckList() { set(optional); type=3;} void select_id_E_RABs_Admitted_ToBeModified_ModAckList() { set(optional); type=4;} void select_id_E_RABs_Admitted_ToBeReleased_ModAckList() { set(optional); type=5;} void select_id_E_RABs_NotAdmitted_List() { set(optional); type=6;} void select_id_SeNBtoMeNBContainer() { set(optional); type=7;} void select_id_CriticalityDiagnostics() { set(optional); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=10;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBModificationRequestAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBModificationRequestAcknowledge-IEs}}, ... } */ struct SeNBModificationRequestAcknowledge : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBModificationRequestAcknowledge";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBModificationRequestReject-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SeNBModificationRequestReject_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } bool is_unknown() const { return type == 7; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBModificationRequestReject ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBModificationRequestReject-IEs}}, ... } */ struct SeNBModificationRequestReject : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBModificationRequestReject";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBModificationRequired-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-SCGChangeIndication CRITICALITY ignore TYPE SCGChangeIndication PRESENCE optional}| { ID id-E-RABs-ToBeReleased-ModReqd CRITICALITY ignore TYPE E-RABs-ToBeReleased-ModReqd PRESENCE optional}| { ID id-SeNBtoMeNBContainer CRITICALITY ignore TYPE SeNBtoMeNBContainer PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SeNBModificationRequired_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 9; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_SCGChangeIndication() { set(id_SCGChangeIndication); type=4;} void select_id_E_RABs_ToBeReleased_ModReqd() { set(id_E_RABs_ToBeReleased_ModReqd); type=5;} void select_id_SeNBtoMeNBContainer() { set(id_SeNBtoMeNBContainer); type=6;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=8;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_SCGChangeIndication)) { type = 4; return true; } else if(equal(id_E_RABs_ToBeReleased_ModReqd)) { type = 5; return true; } else if(equal(id_SeNBtoMeNBContainer)) { type = 6; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 8; return true; } else { type = 9; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_SCGChangeIndication);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_ModReqd);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNBtoMeNBContainer);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 9: type = 9; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 9; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_SCGChangeIndication() { set(ignore); type=4;} void select_id_E_RABs_ToBeReleased_ModReqd() { set(ignore); type=5;} void select_id_SeNBtoMeNBContainer() { set(ignore); type=6;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=8;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(reject)) { type = 7; return true; } else if(equal(reject)) { type = 8; return true; } else { type = 9; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; case 9: type = 9; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } SCGChangeIndication& select_id_SCGChangeIndication() { return set(4); } SCGChangeIndication const* get_id_SCGChangeIndication() const { return get(4); } E_RABs_ToBeReleased_ModReqd& select_id_E_RABs_ToBeReleased_ModReqd() { return set(5); } E_RABs_ToBeReleased_ModReqd const* get_id_E_RABs_ToBeReleased_ModReqd() const { return get(5); } SeNBtoMeNBContainer& select_id_SeNBtoMeNBContainer() { return set(6); } SeNBtoMeNBContainer const* get_id_SeNBtoMeNBContainer() const { return get(6); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(8); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(8); } bool is_unknown() const { return type == 9; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_SCGChangeIndication()); return true; case 5: v(select_id_E_RABs_ToBeReleased_ModReqd()); return true; case 6: v(select_id_SeNBtoMeNBContainer()); return true; case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 8: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(E_RABs_ToBeReleased_ModReqd)]; char dummy3[sizeof(SCGChangeIndication)]; char dummy4[sizeof(SeNBtoMeNBContainer)]; char dummy5[sizeof(UE_X2AP_ID)]; char dummy6[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 9; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_SCGChangeIndication() { set(optional); type=4;} void select_id_E_RABs_ToBeReleased_ModReqd() { set(optional); type=5;} void select_id_SeNBtoMeNBContainer() { set(optional); type=6;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=8;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else { type = 9; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBModificationRequired ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBModificationRequired-IEs}}, ... } */ struct SeNBModificationRequired : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBModificationRequired";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBReconfigurationComplete-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-ResponseInformationSeNBReconfComp CRITICALITY ignore TYPE ResponseInformationSeNBReconfComp PRESENCE mandatory}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SeNBReconfigurationComplete_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_ResponseInformationSeNBReconfComp() { set(id_ResponseInformationSeNBReconfComp); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_ResponseInformationSeNBReconfComp)) { type = 3; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_ResponseInformationSeNBReconfComp);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_ResponseInformationSeNBReconfComp() { set(ignore); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } ResponseInformationSeNBReconfComp& select_id_ResponseInformationSeNBReconfComp() { return set(3); } ResponseInformationSeNBReconfComp const* get_id_ResponseInformationSeNBReconfComp() const { return get(3); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_ResponseInformationSeNBReconfComp()); return true; case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ResponseInformationSeNBReconfComp)]; char dummy2[sizeof(UE_X2AP_ID)]; char dummy3[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_ResponseInformationSeNBReconfComp() { set(mandatory); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBReconfigurationComplete ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBReconfigurationComplete-IEs}}, ... } */ struct SeNBReconfigurationComplete : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBReconfigurationComplete";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBReleaseConfirm-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-E-RABs-ToBeReleased-List-RelConf CRITICALITY ignore TYPE E-RABs-ToBeReleased-List-RelConf PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SeNBReleaseConfirm_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_E_RABs_ToBeReleased_List_RelConf() { set(id_E_RABs_ToBeReleased_List_RelConf); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=6;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_E_RABs_ToBeReleased_List_RelConf)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_List_RelConf);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_E_RABs_ToBeReleased_List_RelConf() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } E_RABs_ToBeReleased_List_RelConf& select_id_E_RABs_ToBeReleased_List_RelConf() { return set(3); } E_RABs_ToBeReleased_List_RelConf const* get_id_E_RABs_ToBeReleased_List_RelConf() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(6); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(6); } bool is_unknown() const { return type == 7; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_E_RABs_ToBeReleased_List_RelConf()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 6: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(E_RABs_ToBeReleased_List_RelConf)]; char dummy3[sizeof(UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_E_RABs_ToBeReleased_List_RelConf() { set(optional); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBReleaseConfirm ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBReleaseConfirm-IEs}}, ... } */ struct SeNBReleaseConfirm : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBReleaseConfirm";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBReleaseRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE optional}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional}| { ID id-E-RABs-ToBeReleased-List-RelReq CRITICALITY ignore TYPE E-RABs-ToBeReleased-List-RelReq PRESENCE optional}| { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-MakeBeforeBreakIndicator CRITICALITY ignore TYPE MakeBeforeBreakIndicator PRESENCE optional}, ... } */ struct SeNBReleaseRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 9; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_E_RABs_ToBeReleased_List_RelReq() { set(id_E_RABs_ToBeReleased_List_RelReq); type=4;} void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=7;} void select_id_MakeBeforeBreakIndicator() { set(id_MakeBeforeBreakIndicator); type=8;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_E_RABs_ToBeReleased_List_RelReq)) { type = 4; return true; } else if(equal(id_UE_ContextKeptIndicator)) { type = 5; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } else if(equal(id_MakeBeforeBreakIndicator)) { type = 8; return true; } else { type = 9; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_List_RelReq);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_MakeBeforeBreakIndicator);} return false; case 9: type = 9; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 9; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_E_RABs_ToBeReleased_List_RelReq() { set(ignore); type=4;} void select_id_UE_ContextKeptIndicator() { set(ignore); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} void select_id_MakeBeforeBreakIndicator() { set(ignore); type=8;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(reject)) { type = 6; return true; } else if(equal(reject)) { type = 7; return true; } else if(equal(ignore)) { type = 8; return true; } else { type = 9; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; case 9: type = 9; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } E_RABs_ToBeReleased_List_RelReq& select_id_E_RABs_ToBeReleased_List_RelReq() { return set(4); } E_RABs_ToBeReleased_List_RelReq const* get_id_E_RABs_ToBeReleased_List_RelReq() const { return get(4); } UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(5); } UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(5); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(7); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(7); } MakeBeforeBreakIndicator& select_id_MakeBeforeBreakIndicator() { return set(8); } MakeBeforeBreakIndicator const* get_id_MakeBeforeBreakIndicator() const { return get(8); } bool is_unknown() const { return type == 9; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_E_RABs_ToBeReleased_List_RelReq()); return true; case 5: v(select_id_UE_ContextKeptIndicator()); return true; case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 7: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 8: v(select_id_MakeBeforeBreakIndicator()); return true; case 9: if(type != 9) {clear(); asn::base::set();} type = 9; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(E_RABs_ToBeReleased_List_RelReq)]; char dummy3[sizeof(MakeBeforeBreakIndicator)]; char dummy4[sizeof(UE_ContextKeptIndicator)]; char dummy5[sizeof(UE_X2AP_ID)]; char dummy6[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 9; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(optional); type=2;} void select_id_Cause() { set(optional); type=3;} void select_id_E_RABs_ToBeReleased_List_RelReq() { set(optional); type=4;} void select_id_UE_ContextKeptIndicator() { set(optional); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} void select_id_MakeBeforeBreakIndicator() { set(optional); type=8;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else { type = 9; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBReleaseRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBReleaseRequest-IEs}}, ... } */ struct SeNBReleaseRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBReleaseRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SeNBReleaseRequired-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SeNBReleaseRequired_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(id_SeNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(id_SeNB_UE_X2AP_ID_Extension); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SeNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else if(equal(id_SeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_SeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_SeNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_SeNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } UE_X2AP_ID_Extension& select_id_SeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_SeNB_UE_X2AP_ID_Extension() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SeNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 5: v(select_id_SeNB_UE_X2AP_ID_Extension()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(UE_X2AP_ID)]; char dummy3[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SeNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} void select_id_SeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SeNBReleaseRequired ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SeNBReleaseRequired-IEs}}, ... } */ struct SeNBReleaseRequired : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SeNBReleaseRequired";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SecondaryRATDataUsageReport-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-SecondaryRATUsageReportList CRITICALITY reject TYPE SecondaryRATUsageReportList PRESENCE mandatory}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SecondaryRATDataUsageReport_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_SecondaryRATUsageReportList() { set(id_SecondaryRATUsageReportList); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_SecondaryRATUsageReportList)) { type = 3; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_SecondaryRATUsageReportList);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_SecondaryRATUsageReportList() { set(reject); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } SecondaryRATUsageReportList& select_id_SecondaryRATUsageReportList() { return set(3); } SecondaryRATUsageReportList const* get_id_SecondaryRATUsageReportList() const { return get(3); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } bool is_unknown() const { return type == 5; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_SecondaryRATUsageReportList()); return true; case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(SecondaryRATUsageReportList)]; char dummy2[sizeof(SgNB_UE_X2AP_ID)]; char dummy3[sizeof(UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_SecondaryRATUsageReportList() { set(mandatory); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SecondaryRATDataUsageReport ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SecondaryRATDataUsageReport-IEs}}, ... } */ struct SecondaryRATDataUsageReport : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SecondaryRATDataUsageReport";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBActivityNotification-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-UEContextLevelUserPlaneActivity CRITICALITY ignore TYPE UserPlaneTrafficActivityReport PRESENCE optional}| { ID id-ERABActivityNotifyItemList CRITICALITY ignore TYPE ERABActivityNotifyItemList PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SgNBActivityNotification_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_UEContextLevelUserPlaneActivity() { set(id_UEContextLevelUserPlaneActivity); type=3;} void select_id_ERABActivityNotifyItemList() { set(id_ERABActivityNotifyItemList); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_UEContextLevelUserPlaneActivity)) { type = 3; return true; } else if(equal(id_ERABActivityNotifyItemList)) { type = 4; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_UEContextLevelUserPlaneActivity);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_ERABActivityNotifyItemList);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_UEContextLevelUserPlaneActivity() { set(ignore); type=3;} void select_id_ERABActivityNotifyItemList() { set(ignore); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } UserPlaneTrafficActivityReport& select_id_UEContextLevelUserPlaneActivity() { return set(3); } UserPlaneTrafficActivityReport const* get_id_UEContextLevelUserPlaneActivity() const { return get(3); } ERABActivityNotifyItemList& select_id_ERABActivityNotifyItemList() { return set(4); } ERABActivityNotifyItemList const* get_id_ERABActivityNotifyItemList() const { return get(4); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_UEContextLevelUserPlaneActivity()); return true; case 4: v(select_id_ERABActivityNotifyItemList()); return true; case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ERABActivityNotifyItemList)]; char dummy2[sizeof(SgNB_UE_X2AP_ID)]; char dummy3[sizeof(UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID_Extension)]; char dummy5[sizeof(UserPlaneTrafficActivityReport)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_UEContextLevelUserPlaneActivity() { set(optional); type=3;} void select_id_ERABActivityNotifyItemList() { set(optional); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBActivityNotification ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBActivityNotification-IEs}}, ... } */ struct SgNBActivityNotification : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBActivityNotification";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBAdditionRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-NRUESecurityCapabilities CRITICALITY reject TYPE NRUESecurityCapabilities PRESENCE mandatory}| { ID id-SgNBSecurityKey CRITICALITY reject TYPE SgNBSecurityKey PRESENCE mandatory}| { ID id-SgNBUEAggregateMaximumBitRate CRITICALITY reject TYPE UEAggregateMaximumBitRate PRESENCE mandatory}| { ID id-SelectedPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| { ID id-E-RABs-ToBeAdded-SgNBAddReqList CRITICALITY reject TYPE E-RABs-ToBeAdded-SgNBAddReqList PRESENCE mandatory}| { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-RequestedSplitSRBs CRITICALITY reject TYPE SplitSRBs PRESENCE optional}| { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}| { ID id-SGNB-Addition-Trigger-Ind CRITICALITY reject TYPE SGNB-Addition-Trigger-Ind PRESENCE optional}| { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE SubscriberProfileIDforRFP PRESENCE optional}| { ID id-MeNBCell-ID CRITICALITY reject TYPE ECGI PRESENCE mandatory}, ... } */ struct SgNBAdditionRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 17; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_NRUESecurityCapabilities() { set(id_NRUESecurityCapabilities); type=2;} void select_id_SgNBSecurityKey() { set(id_SgNBSecurityKey); type=3;} void select_id_SgNBUEAggregateMaximumBitRate() { set(id_SgNBUEAggregateMaximumBitRate); type=4;} void select_id_SelectedPLMN() { set(id_SelectedPLMN); type=5;} void select_id_HandoverRestrictionList() { set(id_HandoverRestrictionList); type=6;} void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(id_E_RABs_ToBeAdded_SgNBAddReqList); type=7;} void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=8;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=9;} void select_id_ExpectedUEBehaviour() { set(id_ExpectedUEBehaviour); type=10;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=11;} void select_id_RequestedSplitSRBs() { set(id_RequestedSplitSRBs); type=12;} void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=13;} void select_id_SGNB_Addition_Trigger_Ind() { set(id_SGNB_Addition_Trigger_Ind); type=14;} void select_id_SubscriberProfileIDforRFP() { set(id_SubscriberProfileIDforRFP); type=15;} void select_id_MeNBCell_ID() { set(id_MeNBCell_ID); type=16;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_NRUESecurityCapabilities)) { type = 2; return true; } else if(equal(id_SgNBSecurityKey)) { type = 3; return true; } else if(equal(id_SgNBUEAggregateMaximumBitRate)) { type = 4; return true; } else if(equal(id_SelectedPLMN)) { type = 5; return true; } else if(equal(id_HandoverRestrictionList)) { type = 6; return true; } else if(equal(id_E_RABs_ToBeAdded_SgNBAddReqList)) { type = 7; return true; } else if(equal(id_MeNBtoSgNBContainer)) { type = 8; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 9; return true; } else if(equal(id_ExpectedUEBehaviour)) { type = 10; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 11; return true; } else if(equal(id_RequestedSplitSRBs)) { type = 12; return true; } else if(equal(id_MeNBResourceCoordinationInformation)) { type = 13; return true; } else if(equal(id_SGNB_Addition_Trigger_Ind)) { type = 14; return true; } else if(equal(id_SubscriberProfileIDforRFP)) { type = 15; return true; } else if(equal(id_MeNBCell_ID)) { type = 16; return true; } else { type = 17; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_NRUESecurityCapabilities);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_SgNBSecurityKey);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_SgNBUEAggregateMaximumBitRate);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_SelectedPLMN);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_HandoverRestrictionList);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_E_RABs_ToBeAdded_SgNBAddReqList);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_ExpectedUEBehaviour);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(id_RequestedSplitSRBs);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; case 14: type = 14; if(v(ref_nested())) { return equal(id_SGNB_Addition_Trigger_Ind);} return false; case 15: type = 15; if(v(ref_nested())) { return equal(id_SubscriberProfileIDforRFP);} return false; case 16: type = 16; if(v(ref_nested())) { return equal(id_MeNBCell_ID);} return false; case 17: type = 17; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 17; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_NRUESecurityCapabilities() { set(reject); type=2;} void select_id_SgNBSecurityKey() { set(reject); type=3;} void select_id_SgNBUEAggregateMaximumBitRate() { set(reject); type=4;} void select_id_SelectedPLMN() { set(ignore); type=5;} void select_id_HandoverRestrictionList() { set(ignore); type=6;} void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(reject); type=7;} void select_id_MeNBtoSgNBContainer() { set(reject); type=8;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=9;} void select_id_ExpectedUEBehaviour() { set(ignore); type=10;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=11;} void select_id_RequestedSplitSRBs() { set(reject); type=12;} void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=13;} void select_id_SGNB_Addition_Trigger_Ind() { set(reject); type=14;} void select_id_SubscriberProfileIDforRFP() { set(ignore); type=15;} void select_id_MeNBCell_ID() { set(reject); type=16;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(reject)) { type = 7; return true; } else if(equal(reject)) { type = 8; return true; } else if(equal(reject)) { type = 9; return true; } else if(equal(ignore)) { type = 10; return true; } else if(equal(reject)) { type = 11; return true; } else if(equal(reject)) { type = 12; return true; } else if(equal(ignore)) { type = 13; return true; } else if(equal(reject)) { type = 14; return true; } else if(equal(ignore)) { type = 15; return true; } else if(equal(reject)) { type = 16; return true; } else { type = 17; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(reject);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(ignore);} return false; case 14: type = 14; if(v(ref_nested())) { return equal(reject);} return false; case 15: type = 15; if(v(ref_nested())) { return equal(ignore);} return false; case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; case 17: type = 17; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } NRUESecurityCapabilities& select_id_NRUESecurityCapabilities() { return set(2); } NRUESecurityCapabilities const* get_id_NRUESecurityCapabilities() const { return get(2); } SgNBSecurityKey& select_id_SgNBSecurityKey() { return set(3); } SgNBSecurityKey const* get_id_SgNBSecurityKey() const { return get(3); } UEAggregateMaximumBitRate& select_id_SgNBUEAggregateMaximumBitRate() { return set(4); } UEAggregateMaximumBitRate const* get_id_SgNBUEAggregateMaximumBitRate() const { return get(4); } PLMN_Identity& select_id_SelectedPLMN() { return set(5); } PLMN_Identity const* get_id_SelectedPLMN() const { return get(5); } HandoverRestrictionList& select_id_HandoverRestrictionList() { return set(6); } HandoverRestrictionList const* get_id_HandoverRestrictionList() const { return get(6); } E_RABs_ToBeAdded_SgNBAddReqList& select_id_E_RABs_ToBeAdded_SgNBAddReqList() { return set(7); } E_RABs_ToBeAdded_SgNBAddReqList const* get_id_E_RABs_ToBeAdded_SgNBAddReqList() const { return get(7); } MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(8); } MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(8); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(9); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(9); } ExpectedUEBehaviour& select_id_ExpectedUEBehaviour() { return set(10); } ExpectedUEBehaviour const* get_id_ExpectedUEBehaviour() const { return get(10); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(11); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(11); } SplitSRBs& select_id_RequestedSplitSRBs() { return set(12); } SplitSRBs const* get_id_RequestedSplitSRBs() const { return get(12); } MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(13); } MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(13); } SGNB_Addition_Trigger_Ind& select_id_SGNB_Addition_Trigger_Ind() { return set(14); } SGNB_Addition_Trigger_Ind const* get_id_SGNB_Addition_Trigger_Ind() const { return get(14); } SubscriberProfileIDforRFP& select_id_SubscriberProfileIDforRFP() { return set(15); } SubscriberProfileIDforRFP const* get_id_SubscriberProfileIDforRFP() const { return get(15); } ECGI& select_id_MeNBCell_ID() { return set(16); } ECGI const* get_id_MeNBCell_ID() const { return get(16); } bool is_unknown() const { return type == 17; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; case 11: var.destroy(); break; case 12: var.destroy(); break; case 13: var.destroy(); break; case 14: var.destroy(); break; case 15: var.destroy(); break; case 16: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); v.template operator()(11); v.template operator()(12); v.template operator()(13); v.template operator()(14); v.template operator()(15); v.template operator()(16); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_NRUESecurityCapabilities()); return true; case 3: v(select_id_SgNBSecurityKey()); return true; case 4: v(select_id_SgNBUEAggregateMaximumBitRate()); return true; case 5: v(select_id_SelectedPLMN()); return true; case 6: v(select_id_HandoverRestrictionList()); return true; case 7: v(select_id_E_RABs_ToBeAdded_SgNBAddReqList()); return true; case 8: v(select_id_MeNBtoSgNBContainer()); return true; case 9: v(select_id_SgNB_UE_X2AP_ID()); return true; case 10: v(select_id_ExpectedUEBehaviour()); return true; case 11: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 12: v(select_id_RequestedSplitSRBs()); return true; case 13: v(select_id_MeNBResourceCoordinationInformation()); return true; case 14: v(select_id_SGNB_Addition_Trigger_Ind()); return true; case 15: v(select_id_SubscriberProfileIDforRFP()); return true; case 16: v(select_id_MeNBCell_ID()); return true; case 17: if(type != 17) {clear(); asn::base::set();} type = 17; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; case 11: v(var.as()); return true; case 12: v(var.as()); return true; case 13: v(var.as()); return true; case 14: v(var.as()); return true; case 15: v(var.as()); return true; case 16: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ECGI)]; char dummy2[sizeof(E_RABs_ToBeAdded_SgNBAddReqList)]; char dummy3[sizeof(ExpectedUEBehaviour)]; char dummy4[sizeof(HandoverRestrictionList)]; char dummy5[sizeof(MeNBResourceCoordinationInformation)]; char dummy6[sizeof(MeNBtoSgNBContainer)]; char dummy7[sizeof(NRUESecurityCapabilities)]; char dummy8[sizeof(PLMN_Identity)]; char dummy9[sizeof(SGNB_Addition_Trigger_Ind)]; char dummy10[sizeof(SgNBSecurityKey)]; char dummy11[sizeof(SgNB_UE_X2AP_ID)]; char dummy12[sizeof(SplitSRBs)]; char dummy13[sizeof(SubscriberProfileIDforRFP)]; char dummy14[sizeof(UEAggregateMaximumBitRate)]; char dummy15[sizeof(UE_X2AP_ID)]; char dummy16[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 17; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_NRUESecurityCapabilities() { set(mandatory); type=2;} void select_id_SgNBSecurityKey() { set(mandatory); type=3;} void select_id_SgNBUEAggregateMaximumBitRate() { set(mandatory); type=4;} void select_id_SelectedPLMN() { set(optional); type=5;} void select_id_HandoverRestrictionList() { set(optional); type=6;} void select_id_E_RABs_ToBeAdded_SgNBAddReqList() { set(mandatory); type=7;} void select_id_MeNBtoSgNBContainer() { set(mandatory); type=8;} void select_id_SgNB_UE_X2AP_ID() { set(optional); type=9;} void select_id_ExpectedUEBehaviour() { set(optional); type=10;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=11;} void select_id_RequestedSplitSRBs() { set(optional); type=12;} void select_id_MeNBResourceCoordinationInformation() { set(optional); type=13;} void select_id_SGNB_Addition_Trigger_Ind() { set(optional); type=14;} void select_id_SubscriberProfileIDforRFP() { set(optional); type=15;} void select_id_MeNBCell_ID() { set(mandatory); type=16;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(mandatory)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(mandatory)) { type = 7; return true; } else if(equal(mandatory)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else if(equal(optional)) { type = 11; return true; } else if(equal(optional)) { type = 12; return true; } else if(equal(optional)) { type = 13; return true; } else if(equal(optional)) { type = 14; return true; } else if(equal(optional)) { type = 15; return true; } else if(equal(mandatory)) { type = 16; return true; } else { type = 17; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(mandatory);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(mandatory);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; case 14: type = 14; if(v(ref_nested())) { return equal(optional);} return false; case 15: type = 15; if(v(ref_nested())) { return equal(optional);} return false; case 16: type = 16; if(v(ref_nested())) { return equal(mandatory);} return false; case 17: type = 17; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBAdditionRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBAdditionRequest-IEs}}, ... } */ struct SgNBAdditionRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBAdditionRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBAdditionRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBAddReqAckList PRESENCE mandatory}| { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| { ID id-SgNBtoMeNBContainer CRITICALITY reject TYPE SgNBtoMeNBContainer PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-AdmittedSplitSRBs CRITICALITY reject TYPE SplitSRBs PRESENCE optional}| { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, ... } */ struct SgNBAdditionRequestAcknowledge_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList); type=3;} void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=4;} void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=5;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=6;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} void select_id_AdmittedSplitSRBs() { set(id_AdmittedSplitSRBs); type=8;} void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=9;} void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=10;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList)) { type = 3; return true; } else if(equal(id_E_RABs_NotAdmitted_List)) { type = 4; return true; } else if(equal(id_SgNBtoMeNBContainer)) { type = 5; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 6; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } else if(equal(id_AdmittedSplitSRBs)) { type = 8; return true; } else if(equal(id_SgNBResourceCoordinationInformation)) { type = 9; return true; } else if(equal(id_RRCConfigIndication)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBs);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(ignore); type=3;} void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=4;} void select_id_SgNBtoMeNBContainer() { set(reject); type=5;} void select_id_CriticalityDiagnostics() { set(ignore); type=6;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} void select_id_AdmittedSplitSRBs() { set(reject); type=8;} void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=9;} void select_id_RRCConfigIndication() { set(reject); type=10;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(reject)) { type = 7; return true; } else if(equal(reject)) { type = 8; return true; } else if(equal(ignore)) { type = 9; return true; } else if(equal(reject)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList& select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { return set(3); } E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList const* get_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() const { return get(3); } E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(4); } E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(4); } SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(5); } SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(5); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(6); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(6); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } SplitSRBs& select_id_AdmittedSplitSRBs() { return set(8); } SplitSRBs const* get_id_AdmittedSplitSRBs() const { return get(8); } SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(9); } SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(9); } RRC_Config_Ind& select_id_RRCConfigIndication() { return set(10); } RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(10); } bool is_unknown() const { return type == 11; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList()); return true; case 4: v(select_id_E_RABs_NotAdmitted_List()); return true; case 5: v(select_id_SgNBtoMeNBContainer()); return true; case 6: v(select_id_CriticalityDiagnostics()); return true; case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 8: v(select_id_AdmittedSplitSRBs()); return true; case 9: v(select_id_SgNBResourceCoordinationInformation()); return true; case 10: v(select_id_RRCConfigIndication()); return true; case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(E_RAB_List)]; char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList)]; char dummy4[sizeof(RRC_Config_Ind)]; char dummy5[sizeof(SgNBResourceCoordinationInformation)]; char dummy6[sizeof(SgNB_UE_X2AP_ID)]; char dummy7[sizeof(SgNBtoMeNBContainer)]; char dummy8[sizeof(SplitSRBs)]; char dummy9[sizeof(UE_X2AP_ID)]; char dummy10[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList() { set(mandatory); type=3;} void select_id_E_RABs_NotAdmitted_List() { set(optional); type=4;} void select_id_SgNBtoMeNBContainer() { set(mandatory); type=5;} void select_id_CriticalityDiagnostics() { set(optional); type=6;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} void select_id_AdmittedSplitSRBs() { set(optional); type=8;} void select_id_SgNBResourceCoordinationInformation() { set(optional); type=9;} void select_id_RRCConfigIndication() { set(optional); type=10;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(mandatory)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(mandatory);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBAdditionRequestAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBAdditionRequestAcknowledge-IEs}}, ... } */ struct SgNBAdditionRequestAcknowledge : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBAdditionRequestAcknowledge";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBAdditionRequestReject-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SgNBAdditionRequestReject_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(SgNB_UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID)]; char dummy5[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(optional); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBAdditionRequestReject ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBAdditionRequestReject-IEs}}, ... } */ struct SgNBAdditionRequestReject : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBAdditionRequestReject";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBChangeConfirm-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-E-RABs-ToBeReleased-SgNBChaConfList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBChaConfList PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SgNBChangeConfirm_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(id_E_RABs_ToBeReleased_SgNBChaConfList); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_E_RABs_ToBeReleased_SgNBChaConfList)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBChaConfList);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } E_RABs_ToBeReleased_SgNBChaConfList& select_id_E_RABs_ToBeReleased_SgNBChaConfList() { return set(3); } E_RABs_ToBeReleased_SgNBChaConfList const* get_id_E_RABs_ToBeReleased_SgNBChaConfList() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_E_RABs_ToBeReleased_SgNBChaConfList()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(E_RABs_ToBeReleased_SgNBChaConfList)]; char dummy3[sizeof(SgNB_UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID)]; char dummy5[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_E_RABs_ToBeReleased_SgNBChaConfList() { set(optional); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBChangeConfirm ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBChangeConfirm-IEs}}, ... } */ struct SgNBChangeConfirm : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBChangeConfirm";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBChangeRefuse-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SgNBChangeRefuse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(SgNB_UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID)]; char dummy5[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBChangeRefuse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBChangeRefuse-IEs}}, ... } */ struct SgNBChangeRefuse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBChangeRefuse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBChangeRequired-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-Target-SgNB-ID CRITICALITY reject TYPE GlobalGNB-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-SgNBtoMeNBContainer CRITICALITY reject TYPE SgNBtoMeNBContainer PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SgNBChangeRequired_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_Target_SgNB_ID() { set(id_Target_SgNB_ID); type=3;} void select_id_Cause() { set(id_Cause); type=4;} void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Target_SgNB_ID)) { type = 3; return true; } else if(equal(id_Cause)) { type = 4; return true; } else if(equal(id_SgNBtoMeNBContainer)) { type = 5; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Target_SgNB_ID);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_Cause);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_Target_SgNB_ID() { set(reject); type=3;} void select_id_Cause() { set(ignore); type=4;} void select_id_SgNBtoMeNBContainer() { set(reject); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else if(equal(reject)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } GlobalGNB_ID& select_id_Target_SgNB_ID() { return set(3); } GlobalGNB_ID const* get_id_Target_SgNB_ID() const { return get(3); } Cause& select_id_Cause() { return set(4); } Cause const* get_id_Cause() const { return get(4); } SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(5); } SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(5); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } bool is_unknown() const { return type == 7; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_Target_SgNB_ID()); return true; case 4: v(select_id_Cause()); return true; case 5: v(select_id_SgNBtoMeNBContainer()); return true; case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(GlobalGNB_ID)]; char dummy3[sizeof(SgNB_UE_X2AP_ID)]; char dummy4[sizeof(SgNBtoMeNBContainer)]; char dummy5[sizeof(UE_X2AP_ID)]; char dummy6[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Target_SgNB_ID() { set(mandatory); type=3;} void select_id_Cause() { set(mandatory); type=4;} void select_id_SgNBtoMeNBContainer() { set(optional); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(mandatory)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(mandatory);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBChangeRequired ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBChangeRequired-IEs}}, ... } */ struct SgNBChangeRequired : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBChangeRequired";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBCounterCheckRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-E-RABs-SubjectToSgNBCounterCheck-List CRITICALITY ignore TYPE E-RABs-SubjectToSgNBCounterCheck-List PRESENCE mandatory}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SgNBCounterCheckRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(id_E_RABs_SubjectToSgNBCounterCheck_List); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_E_RABs_SubjectToSgNBCounterCheck_List)) { type = 3; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_SubjectToSgNBCounterCheck_List);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(ignore); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=4;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } E_RABs_SubjectToSgNBCounterCheck_List& select_id_E_RABs_SubjectToSgNBCounterCheck_List() { return set(3); } E_RABs_SubjectToSgNBCounterCheck_List const* get_id_E_RABs_SubjectToSgNBCounterCheck_List() const { return get(3); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } bool is_unknown() const { return type == 5; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_E_RABs_SubjectToSgNBCounterCheck_List()); return true; case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(E_RABs_SubjectToSgNBCounterCheck_List)]; char dummy2[sizeof(SgNB_UE_X2AP_ID)]; char dummy3[sizeof(UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_E_RABs_SubjectToSgNBCounterCheck_List() { set(mandatory); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBCounterCheckRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBCounterCheckRequest-IEs}}, ... } */ struct SgNBCounterCheckRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBCounterCheckRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBModificationConfirm-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-E-RABs-AdmittedToBeModified-SgNBModConfList CRITICALITY ignore TYPE E-RABs-AdmittedToBeModified-SgNBModConfList PRESENCE optional}| { ID id-MeNBtoSgNBContainer CRITICALITY ignore TYPE MeNBtoSgNBContainer PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}, ... } */ struct SgNBModificationConfirm_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(id_E_RABs_AdmittedToBeModified_SgNBModConfList); type=3;} void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=4;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=7;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_E_RABs_AdmittedToBeModified_SgNBModConfList)) { type = 3; return true; } else if(equal(id_MeNBtoSgNBContainer)) { type = 4; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } else if(equal(id_MeNBResourceCoordinationInformation)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_AdmittedToBeModified_SgNBModConfList);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(ignore); type=3;} void select_id_MeNBtoSgNBContainer() { set(ignore); type=4;} void select_id_CriticalityDiagnostics() { set(ignore); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=7;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } E_RABs_AdmittedToBeModified_SgNBModConfList& select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { return set(3); } E_RABs_AdmittedToBeModified_SgNBModConfList const* get_id_E_RABs_AdmittedToBeModified_SgNBModConfList() const { return get(3); } MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(4); } MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(4); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(7); } MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(7); } bool is_unknown() const { return type == 8; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_E_RABs_AdmittedToBeModified_SgNBModConfList()); return true; case 4: v(select_id_MeNBtoSgNBContainer()); return true; case 5: v(select_id_CriticalityDiagnostics()); return true; case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 7: v(select_id_MeNBResourceCoordinationInformation()); return true; case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(E_RABs_AdmittedToBeModified_SgNBModConfList)]; char dummy3[sizeof(MeNBResourceCoordinationInformation)]; char dummy4[sizeof(MeNBtoSgNBContainer)]; char dummy5[sizeof(SgNB_UE_X2AP_ID)]; char dummy6[sizeof(UE_X2AP_ID)]; char dummy7[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_E_RABs_AdmittedToBeModified_SgNBModConfList() { set(optional); type=3;} void select_id_MeNBtoSgNBContainer() { set(optional); type=4;} void select_id_CriticalityDiagnostics() { set(optional); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} void select_id_MeNBResourceCoordinationInformation() { set(optional); type=7;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBModificationConfirm ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBModificationConfirm-IEs}}, ... } */ struct SgNBModificationConfirm : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBModificationConfirm";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBModificationRefuse-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-MeNBtoSgNBContainer CRITICALITY ignore TYPE MeNBtoSgNBContainer PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SgNBModificationRefuse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=4;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_MeNBtoSgNBContainer)) { type = 4; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 5; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_MeNBtoSgNBContainer() { set(ignore); type=4;} void select_id_CriticalityDiagnostics() { set(ignore); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=6;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(4); } MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(4); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(5); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(5); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } bool is_unknown() const { return type == 7; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_MeNBtoSgNBContainer()); return true; case 5: v(select_id_CriticalityDiagnostics()); return true; case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(MeNBtoSgNBContainer)]; char dummy4[sizeof(SgNB_UE_X2AP_ID)]; char dummy5[sizeof(UE_X2AP_ID)]; char dummy6[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_MeNBtoSgNBContainer() { set(optional); type=4;} void select_id_CriticalityDiagnostics() { set(optional); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBModificationRefuse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBModificationRefuse-IEs}}, ... } */ struct SgNBModificationRefuse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBModificationRefuse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* UE-ContextInformationSgNBModReqExtIEs X2AP-PROTOCOL-EXTENSION ::= { { ID id-SubscriberProfileIDforRFP CRITICALITY ignore EXTENSION SubscriberProfileIDforRFP PRESENCE optional}, ... } */ struct UE_ContextInformationSgNBModReqExtIEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_SubscriberProfileIDforRFP() { set(id_SubscriberProfileIDforRFP); type=1;} X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_SubscriberProfileIDforRFP)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_SubscriberProfileIDforRFP);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_SubscriberProfileIDforRFP() { set(ignore); type=1;} X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Extension_t : asn::typefield { ~Extension_t() {clear();} size_t get_index() const {return type;} SubscriberProfileIDforRFP& select_id_SubscriberProfileIDforRFP() { return set(1); } SubscriberProfileIDforRFP const* get_id_SubscriberProfileIDforRFP() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_SubscriberProfileIDforRFP()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(SubscriberProfileIDforRFP)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_SubscriberProfileIDforRFP() { set(optional); type=1;} X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(optional)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* UE-ContextInformation-SgNBModReq ::= SEQUENCE { nRUE-SecurityCapabilities NRUESecurityCapabilities OPTIONAL, sgNB-SecurityKey SgNBSecurityKey OPTIONAL, sgNBUEAggregateMaximumBitRate UEAggregateMaximumBitRate OPTIONAL, e-RABs-ToBeAdded E-RABs-ToBeAdded-SgNBModReq-List OPTIONAL, e-RABs-ToBeModified E-RABs-ToBeModified-SgNBModReq-List OPTIONAL, e-RABs-ToBeReleased E-RABs-ToBeReleased-SgNBModReq-List OPTIONAL, iE-Extensions ProtocolExtensionContainer { {UE-ContextInformationSgNBModReqExtIEs} } OPTIONAL, ... } */ struct UE_ContextInformation_SgNBModReq : asn::sequence<7, 0, true, 7> { static constexpr const char* name() {return "UE-ContextInformation-SgNBModReq";} using parent_t = asn::sequence<7, 0, true, 7>; struct nRUE_SecurityCapabilities_t : NRUESecurityCapabilities { static constexpr const char* name() {return "nRUE_SecurityCapabilities_t";} using parent_t = NRUESecurityCapabilities; static constexpr bool optional = true; }; nRUE_SecurityCapabilities_t& set_nRUE_SecurityCapabilities() { nRUE_SecurityCapabilities.setpresent(true); return nRUE_SecurityCapabilities;} nRUE_SecurityCapabilities_t const* get_nRUE_SecurityCapabilities() const {return nRUE_SecurityCapabilities.is_valid() ? &nRUE_SecurityCapabilities : nullptr;} struct sgNB_SecurityKey_t : SgNBSecurityKey { static constexpr const char* name() {return "sgNB_SecurityKey_t";} using parent_t = SgNBSecurityKey; static constexpr bool optional = true; }; sgNB_SecurityKey_t& set_sgNB_SecurityKey() { sgNB_SecurityKey.setpresent(true); return sgNB_SecurityKey;} sgNB_SecurityKey_t const* get_sgNB_SecurityKey() const {return sgNB_SecurityKey.is_valid() ? &sgNB_SecurityKey : nullptr;} struct sgNBUEAggregateMaximumBitRate_t : UEAggregateMaximumBitRate { static constexpr const char* name() {return "sgNBUEAggregateMaximumBitRate_t";} using parent_t = UEAggregateMaximumBitRate; static constexpr bool optional = true; }; sgNBUEAggregateMaximumBitRate_t& set_sgNBUEAggregateMaximumBitRate() { sgNBUEAggregateMaximumBitRate.setpresent(true); return sgNBUEAggregateMaximumBitRate;} sgNBUEAggregateMaximumBitRate_t const* get_sgNBUEAggregateMaximumBitRate() const {return sgNBUEAggregateMaximumBitRate.is_valid() ? &sgNBUEAggregateMaximumBitRate : nullptr;} struct e_RABs_ToBeAdded_t : E_RABs_ToBeAdded_SgNBModReq_List { static constexpr const char* name() {return "e_RABs_ToBeAdded_t";} using parent_t = E_RABs_ToBeAdded_SgNBModReq_List; static constexpr bool optional = true; }; e_RABs_ToBeAdded_t& set_e_RABs_ToBeAdded() { e_RABs_ToBeAdded.setpresent(true); return e_RABs_ToBeAdded;} e_RABs_ToBeAdded_t const* get_e_RABs_ToBeAdded() const {return e_RABs_ToBeAdded.is_valid() ? &e_RABs_ToBeAdded : nullptr;} struct e_RABs_ToBeModified_t : E_RABs_ToBeModified_SgNBModReq_List { static constexpr const char* name() {return "e_RABs_ToBeModified_t";} using parent_t = E_RABs_ToBeModified_SgNBModReq_List; static constexpr bool optional = true; }; e_RABs_ToBeModified_t& set_e_RABs_ToBeModified() { e_RABs_ToBeModified.setpresent(true); return e_RABs_ToBeModified;} e_RABs_ToBeModified_t const* get_e_RABs_ToBeModified() const {return e_RABs_ToBeModified.is_valid() ? &e_RABs_ToBeModified : nullptr;} struct e_RABs_ToBeReleased_t : E_RABs_ToBeReleased_SgNBModReq_List { static constexpr const char* name() {return "e_RABs_ToBeReleased_t";} using parent_t = E_RABs_ToBeReleased_SgNBModReq_List; static constexpr bool optional = true; }; e_RABs_ToBeReleased_t& set_e_RABs_ToBeReleased() { e_RABs_ToBeReleased.setpresent(true); return e_RABs_ToBeReleased;} e_RABs_ToBeReleased_t const* get_e_RABs_ToBeReleased() const {return e_RABs_ToBeReleased.is_valid() ? &e_RABs_ToBeReleased : nullptr;} struct iE_Extensions_t : ProtocolExtensionContainer { static constexpr const char* name() {return "iE_Extensions_t";} using parent_t = ProtocolExtensionContainer; static constexpr bool optional = true; }; iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;} iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;} template void decode(V& v) { v(nRUE_SecurityCapabilities); v(sgNB_SecurityKey); v(sgNBUEAggregateMaximumBitRate); v(e_RABs_ToBeAdded); v(e_RABs_ToBeModified); v(e_RABs_ToBeReleased); v(iE_Extensions); }; template void encode(V& v) const { v(nRUE_SecurityCapabilities); v(sgNB_SecurityKey); v(sgNBUEAggregateMaximumBitRate); v(e_RABs_ToBeAdded); v(e_RABs_ToBeModified); v(e_RABs_ToBeReleased); v(iE_Extensions); }; void clear() { nRUE_SecurityCapabilities.clear(); sgNB_SecurityKey.clear(); sgNBUEAggregateMaximumBitRate.clear(); e_RABs_ToBeAdded.clear(); e_RABs_ToBeModified.clear(); e_RABs_ToBeReleased.clear(); iE_Extensions.clear(); }; private: nRUE_SecurityCapabilities_t nRUE_SecurityCapabilities; sgNB_SecurityKey_t sgNB_SecurityKey; sgNBUEAggregateMaximumBitRate_t sgNBUEAggregateMaximumBitRate; e_RABs_ToBeAdded_t e_RABs_ToBeAdded; e_RABs_ToBeModified_t e_RABs_ToBeModified; e_RABs_ToBeReleased_t e_RABs_ToBeReleased; iE_Extensions_t iE_Extensions; }; /* SgNBModificationRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-SelectedPLMN CRITICALITY ignore TYPE PLMN-Identity PRESENCE optional}| { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| { ID id-SCGConfigurationQuery CRITICALITY ignore TYPE SCGConfigurationQuery PRESENCE optional}| { ID id-UE-ContextInformation-SgNBModReq CRITICALITY reject TYPE UE-ContextInformation-SgNBModReq PRESENCE optional}| { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-MeNBResourceCoordinationInformation CRITICALITY ignore TYPE MeNBResourceCoordinationInformation PRESENCE optional}| { ID id-RequestedSplitSRBs CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| { ID id-RequestedSplitSRBsrelease CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}, ... } */ struct SgNBModificationRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 13; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_SelectedPLMN() { set(id_SelectedPLMN); type=4;} void select_id_HandoverRestrictionList() { set(id_HandoverRestrictionList); type=5;} void select_id_SCGConfigurationQuery() { set(id_SCGConfigurationQuery); type=6;} void select_id_UE_ContextInformation_SgNBModReq() { set(id_UE_ContextInformation_SgNBModReq); type=7;} void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} void select_id_MeNBResourceCoordinationInformation() { set(id_MeNBResourceCoordinationInformation); type=10;} void select_id_RequestedSplitSRBs() { set(id_RequestedSplitSRBs); type=11;} void select_id_RequestedSplitSRBsrelease() { set(id_RequestedSplitSRBsrelease); type=12;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_SelectedPLMN)) { type = 4; return true; } else if(equal(id_HandoverRestrictionList)) { type = 5; return true; } else if(equal(id_SCGConfigurationQuery)) { type = 6; return true; } else if(equal(id_UE_ContextInformation_SgNBModReq)) { type = 7; return true; } else if(equal(id_MeNBtoSgNBContainer)) { type = 8; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } else if(equal(id_MeNBResourceCoordinationInformation)) { type = 10; return true; } else if(equal(id_RequestedSplitSRBs)) { type = 11; return true; } else if(equal(id_RequestedSplitSRBsrelease)) { type = 12; return true; } else { type = 13; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_SelectedPLMN);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_HandoverRestrictionList);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_SCGConfigurationQuery);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_UE_ContextInformation_SgNBModReq);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_MeNBResourceCoordinationInformation);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(id_RequestedSplitSRBs);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(id_RequestedSplitSRBsrelease);} return false; case 13: type = 13; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 13; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_SelectedPLMN() { set(ignore); type=4;} void select_id_HandoverRestrictionList() { set(ignore); type=5;} void select_id_SCGConfigurationQuery() { set(ignore); type=6;} void select_id_UE_ContextInformation_SgNBModReq() { set(reject); type=7;} void select_id_MeNBtoSgNBContainer() { set(reject); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=9;} void select_id_MeNBResourceCoordinationInformation() { set(ignore); type=10;} void select_id_RequestedSplitSRBs() { set(ignore); type=11;} void select_id_RequestedSplitSRBsrelease() { set(ignore); type=12;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(reject)) { type = 7; return true; } else if(equal(reject)) { type = 8; return true; } else if(equal(reject)) { type = 9; return true; } else if(equal(ignore)) { type = 10; return true; } else if(equal(ignore)) { type = 11; return true; } else if(equal(ignore)) { type = 12; return true; } else { type = 13; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; case 13: type = 13; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } PLMN_Identity& select_id_SelectedPLMN() { return set(4); } PLMN_Identity const* get_id_SelectedPLMN() const { return get(4); } HandoverRestrictionList& select_id_HandoverRestrictionList() { return set(5); } HandoverRestrictionList const* get_id_HandoverRestrictionList() const { return get(5); } SCGConfigurationQuery& select_id_SCGConfigurationQuery() { return set(6); } SCGConfigurationQuery const* get_id_SCGConfigurationQuery() const { return get(6); } UE_ContextInformation_SgNBModReq& select_id_UE_ContextInformation_SgNBModReq() { return set(7); } UE_ContextInformation_SgNBModReq const* get_id_UE_ContextInformation_SgNBModReq() const { return get(7); } MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(8); } MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(8); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } MeNBResourceCoordinationInformation& select_id_MeNBResourceCoordinationInformation() { return set(10); } MeNBResourceCoordinationInformation const* get_id_MeNBResourceCoordinationInformation() const { return get(10); } SplitSRBs& select_id_RequestedSplitSRBs() { return set(11); } SplitSRBs const* get_id_RequestedSplitSRBs() const { return get(11); } SplitSRBs& select_id_RequestedSplitSRBsrelease() { return set(12); } SplitSRBs const* get_id_RequestedSplitSRBsrelease() const { return get(12); } bool is_unknown() const { return type == 13; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; case 11: var.destroy(); break; case 12: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); v.template operator()(11); v.template operator()(12); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_SelectedPLMN()); return true; case 5: v(select_id_HandoverRestrictionList()); return true; case 6: v(select_id_SCGConfigurationQuery()); return true; case 7: v(select_id_UE_ContextInformation_SgNBModReq()); return true; case 8: v(select_id_MeNBtoSgNBContainer()); return true; case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 10: v(select_id_MeNBResourceCoordinationInformation()); return true; case 11: v(select_id_RequestedSplitSRBs()); return true; case 12: v(select_id_RequestedSplitSRBsrelease()); return true; case 13: if(type != 13) {clear(); asn::base::set();} type = 13; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; case 11: v(var.as()); return true; case 12: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(HandoverRestrictionList)]; char dummy3[sizeof(MeNBResourceCoordinationInformation)]; char dummy4[sizeof(MeNBtoSgNBContainer)]; char dummy5[sizeof(PLMN_Identity)]; char dummy6[sizeof(SCGConfigurationQuery)]; char dummy7[sizeof(SgNB_UE_X2AP_ID)]; char dummy8[sizeof(SplitSRBs)]; char dummy9[sizeof(UE_ContextInformation_SgNBModReq)]; char dummy10[sizeof(UE_X2AP_ID)]; char dummy11[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 13; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_SelectedPLMN() { set(optional); type=4;} void select_id_HandoverRestrictionList() { set(optional); type=5;} void select_id_SCGConfigurationQuery() { set(optional); type=6;} void select_id_UE_ContextInformation_SgNBModReq() { set(optional); type=7;} void select_id_MeNBtoSgNBContainer() { set(optional); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} void select_id_MeNBResourceCoordinationInformation() { set(optional); type=10;} void select_id_RequestedSplitSRBs() { set(optional); type=11;} void select_id_RequestedSplitSRBsrelease() { set(optional); type=12;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else if(equal(optional)) { type = 11; return true; } else if(equal(optional)) { type = 12; return true; } else { type = 13; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; case 13: type = 13; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBModificationRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ SgNBModificationRequest-IEs}}, ... } */ struct SgNBModificationRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBModificationRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBModificationRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-E-RABs-Admitted-ToBeAdded-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeAdded-SgNBModAckList PRESENCE optional}| { ID id-E-RABs-Admitted-ToBeModified-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeModified-SgNBModAckList PRESENCE optional}| { ID id-E-RABs-Admitted-ToBeReleased-SgNBModAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBModAckList PRESENCE optional}| { ID id-E-RABs-NotAdmitted-List CRITICALITY ignore TYPE E-RAB-List PRESENCE optional}| { ID id-SgNBtoMeNBContainer CRITICALITY ignore TYPE SgNBtoMeNBContainer PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| { ID id-AdmittedSplitSRBs CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| { ID id-AdmittedSplitSRBsrelease CRITICALITY ignore TYPE SplitSRBs PRESENCE optional}| { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, ... } */ struct SgNBModificationRequestAcknowledge_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 14; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList); type=3;} void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeModified_SgNBModAckList); type=4;} void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList); type=5;} void select_id_E_RABs_NotAdmitted_List() { set(id_E_RABs_NotAdmitted_List); type=6;} void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=7;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=9;} void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=10;} void select_id_AdmittedSplitSRBs() { set(id_AdmittedSplitSRBs); type=11;} void select_id_AdmittedSplitSRBsrelease() { set(id_AdmittedSplitSRBsrelease); type=12;} void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=13;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList)) { type = 3; return true; } else if(equal(id_E_RABs_Admitted_ToBeModified_SgNBModAckList)) { type = 4; return true; } else if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList)) { type = 5; return true; } else if(equal(id_E_RABs_NotAdmitted_List)) { type = 6; return true; } else if(equal(id_SgNBtoMeNBContainer)) { type = 7; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 8; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 9; return true; } else if(equal(id_SgNBResourceCoordinationInformation)) { type = 10; return true; } else if(equal(id_AdmittedSplitSRBs)) { type = 11; return true; } else if(equal(id_AdmittedSplitSRBsrelease)) { type = 12; return true; } else if(equal(id_RRCConfigIndication)) { type = 13; return true; } else { type = 14; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeAdded_SgNBModAckList);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeModified_SgNBModAckList);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBModAckList);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_E_RABs_NotAdmitted_List);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBs);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(id_AdmittedSplitSRBsrelease);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; case 14: type = 14; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 14; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(ignore); type=3;} void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(ignore); type=4;} void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(ignore); type=5;} void select_id_E_RABs_NotAdmitted_List() { set(ignore); type=6;} void select_id_SgNBtoMeNBContainer() { set(ignore); type=7;} void select_id_CriticalityDiagnostics() { set(ignore); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=9;} void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=10;} void select_id_AdmittedSplitSRBs() { set(ignore); type=11;} void select_id_AdmittedSplitSRBsrelease() { set(ignore); type=12;} void select_id_RRCConfigIndication() { set(reject); type=13;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(ignore)) { type = 7; return true; } else if(equal(ignore)) { type = 8; return true; } else if(equal(ignore)) { type = 9; return true; } else if(equal(ignore)) { type = 10; return true; } else if(equal(ignore)) { type = 11; return true; } else if(equal(ignore)) { type = 12; return true; } else if(equal(reject)) { type = 13; return true; } else { type = 14; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(ignore);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(ignore);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(ignore);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(reject);} return false; case 14: type = 14; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } E_RABs_Admitted_ToBeAdded_SgNBModAckList& select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { return set(3); } E_RABs_Admitted_ToBeAdded_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() const { return get(3); } E_RABs_Admitted_ToBeModified_SgNBModAckList& select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { return set(4); } E_RABs_Admitted_ToBeModified_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() const { return get(4); } E_RABs_Admitted_ToBeReleased_SgNBModAckList& select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { return set(5); } E_RABs_Admitted_ToBeReleased_SgNBModAckList const* get_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() const { return get(5); } E_RAB_List& select_id_E_RABs_NotAdmitted_List() { return set(6); } E_RAB_List const* get_id_E_RABs_NotAdmitted_List() const { return get(6); } SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(7); } SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(7); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(8); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(8); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(9); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(9); } SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(10); } SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(10); } SplitSRBs& select_id_AdmittedSplitSRBs() { return set(11); } SplitSRBs const* get_id_AdmittedSplitSRBs() const { return get(11); } SplitSRBs& select_id_AdmittedSplitSRBsrelease() { return set(12); } SplitSRBs const* get_id_AdmittedSplitSRBsrelease() const { return get(12); } RRC_Config_Ind& select_id_RRCConfigIndication() { return set(13); } RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(13); } bool is_unknown() const { return type == 14; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; case 11: var.destroy(); break; case 12: var.destroy(); break; case 13: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); v.template operator()(11); v.template operator()(12); v.template operator()(13); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList()); return true; case 4: v(select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList()); return true; case 5: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList()); return true; case 6: v(select_id_E_RABs_NotAdmitted_List()); return true; case 7: v(select_id_SgNBtoMeNBContainer()); return true; case 8: v(select_id_CriticalityDiagnostics()); return true; case 9: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 10: v(select_id_SgNBResourceCoordinationInformation()); return true; case 11: v(select_id_AdmittedSplitSRBs()); return true; case 12: v(select_id_AdmittedSplitSRBsrelease()); return true; case 13: v(select_id_RRCConfigIndication()); return true; case 14: if(type != 14) {clear(); asn::base::set();} type = 14; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; case 11: v(var.as()); return true; case 12: v(var.as()); return true; case 13: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(E_RAB_List)]; char dummy3[sizeof(E_RABs_Admitted_ToBeAdded_SgNBModAckList)]; char dummy4[sizeof(E_RABs_Admitted_ToBeModified_SgNBModAckList)]; char dummy5[sizeof(E_RABs_Admitted_ToBeReleased_SgNBModAckList)]; char dummy6[sizeof(RRC_Config_Ind)]; char dummy7[sizeof(SgNBResourceCoordinationInformation)]; char dummy8[sizeof(SgNB_UE_X2AP_ID)]; char dummy9[sizeof(SgNBtoMeNBContainer)]; char dummy10[sizeof(SplitSRBs)]; char dummy11[sizeof(UE_X2AP_ID)]; char dummy12[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 14; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_E_RABs_Admitted_ToBeAdded_SgNBModAckList() { set(optional); type=3;} void select_id_E_RABs_Admitted_ToBeModified_SgNBModAckList() { set(optional); type=4;} void select_id_E_RABs_Admitted_ToBeReleased_SgNBModAckList() { set(optional); type=5;} void select_id_E_RABs_NotAdmitted_List() { set(optional); type=6;} void select_id_SgNBtoMeNBContainer() { set(optional); type=7;} void select_id_CriticalityDiagnostics() { set(optional); type=8;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=9;} void select_id_SgNBResourceCoordinationInformation() { set(optional); type=10;} void select_id_AdmittedSplitSRBs() { set(optional); type=11;} void select_id_AdmittedSplitSRBsrelease() { set(optional); type=12;} void select_id_RRCConfigIndication() { set(optional); type=13;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else if(equal(optional)) { type = 11; return true; } else if(equal(optional)) { type = 12; return true; } else if(equal(optional)) { type = 13; return true; } else { type = 14; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(optional);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(optional);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(optional);} return false; case 14: type = 14; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBModificationRequestAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBModificationRequestAcknowledge-IEs}}, ... } */ struct SgNBModificationRequestAcknowledge : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBModificationRequestAcknowledge";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBModificationRequestReject-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SgNBModificationRequestReject_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(SgNB_UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID)]; char dummy5[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBModificationRequestReject ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBModificationRequestReject-IEs}}, ... } */ struct SgNBModificationRequestReject : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBModificationRequestReject";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBModificationRequired-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-PDCPChangeIndication CRITICALITY ignore TYPE PDCPChangeIndication PRESENCE optional}| { ID id-E-RABs-ToBeReleased-SgNBModReqdList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBModReqdList PRESENCE optional}| { ID id-SgNBtoMeNBContainer CRITICALITY ignore TYPE SgNBtoMeNBContainer PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-E-RABs-ToBeModified-SgNBModReqdList CRITICALITY ignore TYPE E-RABs-ToBeModified-SgNBModReqdList PRESENCE optional}| { ID id-SgNBResourceCoordinationInformation CRITICALITY ignore TYPE SgNBResourceCoordinationInformation PRESENCE optional}| { ID id-RRCConfigIndication CRITICALITY reject TYPE RRC-Config-Ind PRESENCE optional}, ... } */ struct SgNBModificationRequired_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_PDCPChangeIndication() { set(id_PDCPChangeIndication); type=4;} void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(id_E_RABs_ToBeReleased_SgNBModReqdList); type=5;} void select_id_SgNBtoMeNBContainer() { set(id_SgNBtoMeNBContainer); type=6;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=7;} void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(id_E_RABs_ToBeModified_SgNBModReqdList); type=8;} void select_id_SgNBResourceCoordinationInformation() { set(id_SgNBResourceCoordinationInformation); type=9;} void select_id_RRCConfigIndication() { set(id_RRCConfigIndication); type=10;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_PDCPChangeIndication)) { type = 4; return true; } else if(equal(id_E_RABs_ToBeReleased_SgNBModReqdList)) { type = 5; return true; } else if(equal(id_SgNBtoMeNBContainer)) { type = 6; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 7; return true; } else if(equal(id_E_RABs_ToBeModified_SgNBModReqdList)) { type = 8; return true; } else if(equal(id_SgNBResourceCoordinationInformation)) { type = 9; return true; } else if(equal(id_RRCConfigIndication)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_PDCPChangeIndication);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBModReqdList);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNBtoMeNBContainer);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_E_RABs_ToBeModified_SgNBModReqdList);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_SgNBResourceCoordinationInformation);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_RRCConfigIndication);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_PDCPChangeIndication() { set(ignore); type=4;} void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(ignore); type=5;} void select_id_SgNBtoMeNBContainer() { set(ignore); type=6;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=7;} void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(ignore); type=8;} void select_id_SgNBResourceCoordinationInformation() { set(ignore); type=9;} void select_id_RRCConfigIndication() { set(reject); type=10;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else if(equal(reject)) { type = 7; return true; } else if(equal(ignore)) { type = 8; return true; } else if(equal(ignore)) { type = 9; return true; } else if(equal(reject)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } PDCPChangeIndication& select_id_PDCPChangeIndication() { return set(4); } PDCPChangeIndication const* get_id_PDCPChangeIndication() const { return get(4); } E_RABs_ToBeReleased_SgNBModReqdList& select_id_E_RABs_ToBeReleased_SgNBModReqdList() { return set(5); } E_RABs_ToBeReleased_SgNBModReqdList const* get_id_E_RABs_ToBeReleased_SgNBModReqdList() const { return get(5); } SgNBtoMeNBContainer& select_id_SgNBtoMeNBContainer() { return set(6); } SgNBtoMeNBContainer const* get_id_SgNBtoMeNBContainer() const { return get(6); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(7); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(7); } E_RABs_ToBeModified_SgNBModReqdList& select_id_E_RABs_ToBeModified_SgNBModReqdList() { return set(8); } E_RABs_ToBeModified_SgNBModReqdList const* get_id_E_RABs_ToBeModified_SgNBModReqdList() const { return get(8); } SgNBResourceCoordinationInformation& select_id_SgNBResourceCoordinationInformation() { return set(9); } SgNBResourceCoordinationInformation const* get_id_SgNBResourceCoordinationInformation() const { return get(9); } RRC_Config_Ind& select_id_RRCConfigIndication() { return set(10); } RRC_Config_Ind const* get_id_RRCConfigIndication() const { return get(10); } bool is_unknown() const { return type == 11; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_PDCPChangeIndication()); return true; case 5: v(select_id_E_RABs_ToBeReleased_SgNBModReqdList()); return true; case 6: v(select_id_SgNBtoMeNBContainer()); return true; case 7: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 8: v(select_id_E_RABs_ToBeModified_SgNBModReqdList()); return true; case 9: v(select_id_SgNBResourceCoordinationInformation()); return true; case 10: v(select_id_RRCConfigIndication()); return true; case 11: if(type != 11) {clear(); asn::base::set();} type = 11; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(E_RABs_ToBeModified_SgNBModReqdList)]; char dummy3[sizeof(E_RABs_ToBeReleased_SgNBModReqdList)]; char dummy4[sizeof(PDCPChangeIndication)]; char dummy5[sizeof(RRC_Config_Ind)]; char dummy6[sizeof(SgNBResourceCoordinationInformation)]; char dummy7[sizeof(SgNB_UE_X2AP_ID)]; char dummy8[sizeof(SgNBtoMeNBContainer)]; char dummy9[sizeof(UE_X2AP_ID)]; char dummy10[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 11; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_PDCPChangeIndication() { set(optional); type=4;} void select_id_E_RABs_ToBeReleased_SgNBModReqdList() { set(optional); type=5;} void select_id_SgNBtoMeNBContainer() { set(optional); type=6;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=7;} void select_id_E_RABs_ToBeModified_SgNBModReqdList() { set(optional); type=8;} void select_id_SgNBResourceCoordinationInformation() { set(optional); type=9;} void select_id_RRCConfigIndication() { set(optional); type=10;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else if(equal(optional)) { type = 8; return true; } else if(equal(optional)) { type = 9; return true; } else if(equal(optional)) { type = 10; return true; } else { type = 11; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(optional);} return false; case 11: type = 11; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBModificationRequired ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBModificationRequired-IEs}}, ... } */ struct SgNBModificationRequired : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBModificationRequired";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBReconfigurationComplete-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-ResponseInformationSgNBReconfComp CRITICALITY ignore TYPE ResponseInformationSgNBReconfComp PRESENCE mandatory}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SgNBReconfigurationComplete_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_ResponseInformationSgNBReconfComp() { set(id_ResponseInformationSgNBReconfComp); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_ResponseInformationSgNBReconfComp)) { type = 3; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_ResponseInformationSgNBReconfComp);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_ResponseInformationSgNBReconfComp() { set(ignore); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } ResponseInformationSgNBReconfComp& select_id_ResponseInformationSgNBReconfComp() { return set(3); } ResponseInformationSgNBReconfComp const* get_id_ResponseInformationSgNBReconfComp() const { return get(3); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } bool is_unknown() const { return type == 5; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_ResponseInformationSgNBReconfComp()); return true; case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(ResponseInformationSgNBReconfComp)]; char dummy2[sizeof(SgNB_UE_X2AP_ID)]; char dummy3[sizeof(UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_ResponseInformationSgNBReconfComp() { set(mandatory); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBReconfigurationComplete ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBReconfigurationComplete-IEs}}, ... } */ struct SgNBReconfigurationComplete : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBReconfigurationComplete";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBReleaseConfirm-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-E-RABs-ToBeReleased-SgNBRelConfList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelConfList PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY ignore TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SgNBReleaseConfirm_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(id_E_RABs_ToBeReleased_SgNBRelConfList); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_E_RABs_ToBeReleased_SgNBRelConfList)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelConfList);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(ignore); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } E_RABs_ToBeReleased_SgNBRelConfList& select_id_E_RABs_ToBeReleased_SgNBRelConfList() { return set(3); } E_RABs_ToBeReleased_SgNBRelConfList const* get_id_E_RABs_ToBeReleased_SgNBRelConfList() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_E_RABs_ToBeReleased_SgNBRelConfList()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelConfList)]; char dummy3[sizeof(SgNB_UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID)]; char dummy5[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_E_RABs_ToBeReleased_SgNBRelConfList() { set(optional); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBReleaseConfirm ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBReleaseConfirm-IEs}}, ... } */ struct SgNBReleaseConfirm : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBReleaseConfirm";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBReleaseRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE optional}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-E-RABs-ToBeReleased-SgNBRelReqList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqList PRESENCE optional}| { ID id-UE-ContextKeptIndicator CRITICALITY ignore TYPE UE-ContextKeptIndicator PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-MeNBtoSgNBContainer CRITICALITY reject TYPE MeNBtoSgNBContainer PRESENCE optional}, ... } */ struct SgNBReleaseRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(id_E_RABs_ToBeReleased_SgNBRelReqList); type=4;} void select_id_UE_ContextKeptIndicator() { set(id_UE_ContextKeptIndicator); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=6;} void select_id_MeNBtoSgNBContainer() { set(id_MeNBtoSgNBContainer); type=7;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_E_RABs_ToBeReleased_SgNBRelReqList)) { type = 4; return true; } else if(equal(id_UE_ContextKeptIndicator)) { type = 5; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 6; return true; } else if(equal(id_MeNBtoSgNBContainer)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqList);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_UE_ContextKeptIndicator);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_MeNBtoSgNBContainer);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(ignore); type=4;} void select_id_UE_ContextKeptIndicator() { set(ignore); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=6;} void select_id_MeNBtoSgNBContainer() { set(reject); type=7;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(reject)) { type = 6; return true; } else if(equal(reject)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } E_RABs_ToBeReleased_SgNBRelReqList& select_id_E_RABs_ToBeReleased_SgNBRelReqList() { return set(4); } E_RABs_ToBeReleased_SgNBRelReqList const* get_id_E_RABs_ToBeReleased_SgNBRelReqList() const { return get(4); } UE_ContextKeptIndicator& select_id_UE_ContextKeptIndicator() { return set(5); } UE_ContextKeptIndicator const* get_id_UE_ContextKeptIndicator() const { return get(5); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(6); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(6); } MeNBtoSgNBContainer& select_id_MeNBtoSgNBContainer() { return set(7); } MeNBtoSgNBContainer const* get_id_MeNBtoSgNBContainer() const { return get(7); } bool is_unknown() const { return type == 8; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_E_RABs_ToBeReleased_SgNBRelReqList()); return true; case 5: v(select_id_UE_ContextKeptIndicator()); return true; case 6: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 7: v(select_id_MeNBtoSgNBContainer()); return true; case 8: if(type != 8) {clear(); asn::base::set();} type = 8; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelReqList)]; char dummy3[sizeof(MeNBtoSgNBContainer)]; char dummy4[sizeof(SgNB_UE_X2AP_ID)]; char dummy5[sizeof(UE_ContextKeptIndicator)]; char dummy6[sizeof(UE_X2AP_ID)]; char dummy7[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 8; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(optional); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_E_RABs_ToBeReleased_SgNBRelReqList() { set(optional); type=4;} void select_id_UE_ContextKeptIndicator() { set(optional); type=5;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=6;} void select_id_MeNBtoSgNBContainer() { set(optional); type=7;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else if(equal(optional)) { type = 7; return true; } else { type = 8; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false; case 8: type = 8; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBReleaseRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBReleaseRequest-IEs}}, ... } */ struct SgNBReleaseRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBReleaseRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBReleaseRequestAcknowledge-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional }| { ID id-E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList CRITICALITY ignore TYPE E-RABs-Admitted-ToBeReleased-SgNBRelReqAckList PRESENCE optional }, ... } */ struct SgNBReleaseRequestAcknowledge_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else if(equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_CriticalityDiagnostics() { set(ignore); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(ignore); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList& select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { return set(5); } E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList const* get_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_CriticalityDiagnostics()); return true; case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 5: v(select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList)]; char dummy3[sizeof(SgNB_UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID)]; char dummy5[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_CriticalityDiagnostics() { set(optional); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} void select_id_E_RABs_Admitted_ToBeReleased_SgNBRelReqAckList() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBReleaseRequestAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBReleaseRequestAcknowledge-IEs}}, ... } */ struct SgNBReleaseRequestAcknowledge : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBReleaseRequestAcknowledge";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBReleaseRequestReject-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY ignore TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}, ... } */ struct SgNBReleaseRequestReject_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(ignore); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(5); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(SgNB_UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID)]; char dummy5[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBReleaseRequestReject ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBReleaseRequestReject-IEs}}, ... } */ struct SgNBReleaseRequestReject : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBReleaseRequestReject";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* SgNBReleaseRequired-IEs X2AP-PROTOCOL-IES ::= { { ID id-MeNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-SgNB-UE-X2AP-ID CRITICALITY reject TYPE SgNB-UE-X2AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-MeNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional }| { ID id-E-RABs-ToBeReleased-SgNBRelReqdList CRITICALITY ignore TYPE E-RABs-ToBeReleased-SgNBRelReqdList PRESENCE optional }, ... } */ struct SgNBReleaseRequired_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(id_MeNB_UE_X2AP_ID); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=2;} void select_id_Cause() { set(id_Cause); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(id_MeNB_UE_X2AP_ID_Extension); type=4;} void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(id_E_RABs_ToBeReleased_SgNBRelReqdList); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_MeNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Cause)) { type = 3; return true; } else if(equal(id_MeNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else if(equal(id_E_RABs_ToBeReleased_SgNBRelReqdList)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Cause);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_MeNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_E_RABs_ToBeReleased_SgNBRelReqdList);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_Cause() { set(ignore); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(reject); type=4;} void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(ignore); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_MeNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_MeNB_UE_X2AP_ID() const { return get(1); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(2); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(2); } Cause& select_id_Cause() { return set(3); } Cause const* get_id_Cause() const { return get(3); } UE_X2AP_ID_Extension& select_id_MeNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_MeNB_UE_X2AP_ID_Extension() const { return get(4); } E_RABs_ToBeReleased_SgNBRelReqdList& select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { return set(5); } E_RABs_ToBeReleased_SgNBRelReqdList const* get_id_E_RABs_ToBeReleased_SgNBRelReqdList() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_MeNB_UE_X2AP_ID()); return true; case 2: v(select_id_SgNB_UE_X2AP_ID()); return true; case 3: v(select_id_Cause()); return true; case 4: v(select_id_MeNB_UE_X2AP_ID_Extension()); return true; case 5: v(select_id_E_RABs_ToBeReleased_SgNBRelReqdList()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(E_RABs_ToBeReleased_SgNBRelReqdList)]; char dummy3[sizeof(SgNB_UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID)]; char dummy5[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_MeNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_SgNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Cause() { set(mandatory); type=3;} void select_id_MeNB_UE_X2AP_ID_Extension() { set(optional); type=4;} void select_id_E_RABs_ToBeReleased_SgNBRelReqdList() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(mandatory)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(mandatory);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* SgNBReleaseRequired ::= SEQUENCE { protocolIEs ProtocolIE-Container {{SgNBReleaseRequired-IEs}}, ... } */ struct SgNBReleaseRequired : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "SgNBReleaseRequired";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* UEContextRelease-IEs X2AP-PROTOCOL-IES ::= { { ID id-Old-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-New-eNB-UE-X2AP-ID CRITICALITY reject TYPE UE-X2AP-ID PRESENCE mandatory}| { ID id-Old-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-New-eNB-UE-X2AP-ID-Extension CRITICALITY reject TYPE UE-X2AP-ID-Extension PRESENCE optional}| { ID id-SIPTO-BearerDeactivationIndication CRITICALITY ignore TYPE SIPTOBearerDeactivationIndication PRESENCE optional}| { ID id-SgNB-UE-X2AP-ID CRITICALITY ignore TYPE SgNB-UE-X2AP-ID PRESENCE optional}, ... } */ struct UEContextRelease_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(id_Old_eNB_UE_X2AP_ID); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(id_New_eNB_UE_X2AP_ID); type=2;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(id_Old_eNB_UE_X2AP_ID_Extension); type=3;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(id_New_eNB_UE_X2AP_ID_Extension); type=4;} void select_id_SIPTO_BearerDeactivationIndication() { set(id_SIPTO_BearerDeactivationIndication); type=5;} void select_id_SgNB_UE_X2AP_ID() { set(id_SgNB_UE_X2AP_ID); type=6;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Old_eNB_UE_X2AP_ID)) { type = 1; return true; } else if(equal(id_New_eNB_UE_X2AP_ID)) { type = 2; return true; } else if(equal(id_Old_eNB_UE_X2AP_ID_Extension)) { type = 3; return true; } else if(equal(id_New_eNB_UE_X2AP_ID_Extension)) { type = 4; return true; } else if(equal(id_SIPTO_BearerDeactivationIndication)) { type = 5; return true; } else if(equal(id_SgNB_UE_X2AP_ID)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_Old_eNB_UE_X2AP_ID_Extension);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_New_eNB_UE_X2AP_ID_Extension);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_SIPTO_BearerDeactivationIndication);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_SgNB_UE_X2AP_ID);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(reject); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(reject); type=2;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(reject); type=3;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(reject); type=4;} void select_id_SIPTO_BearerDeactivationIndication() { set(ignore); type=5;} void select_id_SgNB_UE_X2AP_ID() { set(ignore); type=6;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else if(equal(ignore)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} UE_X2AP_ID& select_id_Old_eNB_UE_X2AP_ID() { return set(1); } UE_X2AP_ID const* get_id_Old_eNB_UE_X2AP_ID() const { return get(1); } UE_X2AP_ID& select_id_New_eNB_UE_X2AP_ID() { return set(2); } UE_X2AP_ID const* get_id_New_eNB_UE_X2AP_ID() const { return get(2); } UE_X2AP_ID_Extension& select_id_Old_eNB_UE_X2AP_ID_Extension() { return set(3); } UE_X2AP_ID_Extension const* get_id_Old_eNB_UE_X2AP_ID_Extension() const { return get(3); } UE_X2AP_ID_Extension& select_id_New_eNB_UE_X2AP_ID_Extension() { return set(4); } UE_X2AP_ID_Extension const* get_id_New_eNB_UE_X2AP_ID_Extension() const { return get(4); } SIPTOBearerDeactivationIndication& select_id_SIPTO_BearerDeactivationIndication() { return set(5); } SIPTOBearerDeactivationIndication const* get_id_SIPTO_BearerDeactivationIndication() const { return get(5); } SgNB_UE_X2AP_ID& select_id_SgNB_UE_X2AP_ID() { return set(6); } SgNB_UE_X2AP_ID const* get_id_SgNB_UE_X2AP_ID() const { return get(6); } bool is_unknown() const { return type == 7; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Old_eNB_UE_X2AP_ID()); return true; case 2: v(select_id_New_eNB_UE_X2AP_ID()); return true; case 3: v(select_id_Old_eNB_UE_X2AP_ID_Extension()); return true; case 4: v(select_id_New_eNB_UE_X2AP_ID_Extension()); return true; case 5: v(select_id_SIPTO_BearerDeactivationIndication()); return true; case 6: v(select_id_SgNB_UE_X2AP_ID()); return true; case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(SIPTOBearerDeactivationIndication)]; char dummy2[sizeof(SgNB_UE_X2AP_ID)]; char dummy3[sizeof(UE_X2AP_ID)]; char dummy4[sizeof(UE_X2AP_ID_Extension)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 7; } void clear() {type = 0;} void select_id_Old_eNB_UE_X2AP_ID() { set(mandatory); type=1;} void select_id_New_eNB_UE_X2AP_ID() { set(mandatory); type=2;} void select_id_Old_eNB_UE_X2AP_ID_Extension() { set(optional); type=3;} void select_id_New_eNB_UE_X2AP_ID_Extension() { set(optional); type=4;} void select_id_SIPTO_BearerDeactivationIndication() { set(optional); type=5;} void select_id_SgNB_UE_X2AP_ID() { set(optional); type=6;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else if(equal(optional)) { type = 6; return true; } else { type = 7; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false; case 7: type = 7; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* UEContextRelease ::= SEQUENCE { protocolIEs ProtocolIE-Container {{UEContextRelease-IEs}}, ... } */ struct UEContextRelease : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "UEContextRelease";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* X2AP-Message ::= OCTET STRING */ struct X2AP_Message : asn::ostring<> { static constexpr const char* name() {return "X2AP-Message";} using parent_t = asn::ostring<>; }; /* X2APMessageTransfer-IEs X2AP-PROTOCOL-IES ::= { { ID id-RNL-Header CRITICALITY reject TYPE RNL-Header PRESENCE mandatory}| { ID id-x2APMessage CRITICALITY reject TYPE X2AP-Message PRESENCE optional}, ... } */ struct X2APMessageTransfer_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_RNL_Header() { set(id_RNL_Header); type=1;} void select_id_x2APMessage() { set(id_x2APMessage); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_RNL_Header)) { type = 1; return true; } else if(equal(id_x2APMessage)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_RNL_Header);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_x2APMessage);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_RNL_Header() { set(reject); type=1;} void select_id_x2APMessage() { set(reject); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} RNL_Header& select_id_RNL_Header() { return set(1); } RNL_Header const* get_id_RNL_Header() const { return get(1); } X2AP_Message& select_id_x2APMessage() { return set(2); } X2AP_Message const* get_id_x2APMessage() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_RNL_Header()); return true; case 2: v(select_id_x2APMessage()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(RNL_Header)]; char dummy2[sizeof(X2AP_Message)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_RNL_Header() { set(mandatory); type=1;} void select_id_x2APMessage() { set(optional); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* X2APMessageTransfer ::= SEQUENCE { protocolIEs ProtocolIE-Container {{X2APMessageTransfer-IEs}}, ... } */ struct X2APMessageTransfer : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "X2APMessageTransfer";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* X2Release-IEs X2AP-PROTOCOL-IES ::= { { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}, ... } */ struct X2Release_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_GlobalENB_ID)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(reject); type=1;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } bool is_unknown() const { return type == 2; } void clear() { switch(type) { case 1: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_GlobalENB_ID()); return true; case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GlobalENB_ID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 2; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(mandatory); type=1;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else { type = 2; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* X2Release ::= SEQUENCE { protocolIEs ProtocolIE-Container {{X2Release-IEs}}, ... } */ struct X2Release : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "X2Release";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* X2RemovalFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, ... } */ struct X2RemovalFailure_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Cause() { set(id_Cause); type=1;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Cause)) { type = 1; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Cause() { set(ignore); type=1;} void select_id_CriticalityDiagnostics() { set(ignore); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} Cause& select_id_Cause() { return set(1); } Cause const* get_id_Cause() const { return get(1); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Cause()); return true; case 2: v(select_id_CriticalityDiagnostics()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_Cause() { set(mandatory); type=1;} void select_id_CriticalityDiagnostics() { set(optional); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* X2RemovalFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container {{X2RemovalFailure-IEs}}, ... } */ struct X2RemovalFailure : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "X2RemovalFailure";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* X2RemovalRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| { ID id-X2RemovalThreshold CRITICALITY reject TYPE X2BenefitValue PRESENCE optional}, ... } */ struct X2RemovalRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} void select_id_X2RemovalThreshold() { set(id_X2RemovalThreshold); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_GlobalENB_ID)) { type = 1; return true; } else if(equal(id_X2RemovalThreshold)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_X2RemovalThreshold);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(reject); type=1;} void select_id_X2RemovalThreshold() { set(reject); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } X2BenefitValue& select_id_X2RemovalThreshold() { return set(2); } X2BenefitValue const* get_id_X2RemovalThreshold() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_GlobalENB_ID()); return true; case 2: v(select_id_X2RemovalThreshold()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GlobalENB_ID)]; char dummy2[sizeof(X2BenefitValue)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(mandatory); type=1;} void select_id_X2RemovalThreshold() { set(optional); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* X2RemovalRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{X2RemovalRequest-IEs}}, ... } */ struct X2RemovalRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "X2RemovalRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* X2RemovalResponse-IEs X2AP-PROTOCOL-IES ::= { { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, ... } */ struct X2RemovalResponse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=2;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_GlobalENB_ID)) { type = 1; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(reject); type=1;} void select_id_CriticalityDiagnostics() { set(ignore); type=2;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(2); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(2); } bool is_unknown() const { return type == 3; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_GlobalENB_ID()); return true; case 2: v(select_id_CriticalityDiagnostics()); return true; case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(GlobalENB_ID)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 3; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(mandatory); type=1;} void select_id_CriticalityDiagnostics() { set(optional); type=2;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else { type = 3; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* X2RemovalResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{X2RemovalResponse-IEs}}, ... } */ struct X2RemovalResponse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "X2RemovalResponse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* X2SetupFailure-IEs X2AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory} | { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional} | { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } */ struct X2SetupFailure_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_Cause() { set(id_Cause); type=1;} void select_id_TimeToWait() { set(id_TimeToWait); type=2;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=3;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_Cause)) { type = 1; return true; } else if(equal(id_TimeToWait)) { type = 2; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_Cause);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_TimeToWait);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_Cause() { set(ignore); type=1;} void select_id_TimeToWait() { set(ignore); type=2;} void select_id_CriticalityDiagnostics() { set(ignore); type=3;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(ignore)) { type = 1; return true; } else if(equal(ignore)) { type = 2; return true; } else if(equal(ignore)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} Cause& select_id_Cause() { return set(1); } Cause const* get_id_Cause() const { return get(1); } TimeToWait& select_id_TimeToWait() { return set(2); } TimeToWait const* get_id_TimeToWait() const { return get(2); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(3); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(3); } bool is_unknown() const { return type == 4; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_Cause()); return true; case 2: v(select_id_TimeToWait()); return true; case 3: v(select_id_CriticalityDiagnostics()); return true; case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(Cause)]; char dummy2[sizeof(CriticalityDiagnostics)]; char dummy3[sizeof(TimeToWait)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 4; } void clear() {type = 0;} void select_id_Cause() { set(mandatory); type=1;} void select_id_TimeToWait() { set(optional); type=2;} void select_id_CriticalityDiagnostics() { set(optional); type=3;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(optional)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else { type = 4; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* X2SetupFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container {{X2SetupFailure-IEs}}, ... } */ struct X2SetupFailure : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "X2SetupFailure";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* X2SetupRequest-IEs X2AP-PROTOCOL-IES ::= { { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory}| { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, ... } */ struct X2SetupRequest_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} void select_id_ServedCells() { set(id_ServedCells); type=2;} void select_id_GUGroupIDList() { set(id_GUGroupIDList); type=3;} void select_id_LHN_ID() { set(id_LHN_ID); type=4;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_GlobalENB_ID)) { type = 1; return true; } else if(equal(id_ServedCells)) { type = 2; return true; } else if(equal(id_GUGroupIDList)) { type = 3; return true; } else if(equal(id_LHN_ID)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCells);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_GUGroupIDList);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_LHN_ID);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(reject); type=1;} void select_id_ServedCells() { set(reject); type=2;} void select_id_GUGroupIDList() { set(reject); type=3;} void select_id_LHN_ID() { set(ignore); type=4;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } ServedCells& select_id_ServedCells() { return set(2); } ServedCells const* get_id_ServedCells() const { return get(2); } GUGroupIDList& select_id_GUGroupIDList() { return set(3); } GUGroupIDList const* get_id_GUGroupIDList() const { return get(3); } LHN_ID& select_id_LHN_ID() { return set(4); } LHN_ID const* get_id_LHN_ID() const { return get(4); } bool is_unknown() const { return type == 5; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_GlobalENB_ID()); return true; case 2: v(select_id_ServedCells()); return true; case 3: v(select_id_GUGroupIDList()); return true; case 4: v(select_id_LHN_ID()); return true; case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(GUGroupIDList)]; char dummy2[sizeof(GlobalENB_ID)]; char dummy3[sizeof(LHN_ID)]; char dummy4[sizeof(ServedCells)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 5; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(mandatory); type=1;} void select_id_ServedCells() { set(mandatory); type=2;} void select_id_GUGroupIDList() { set(optional); type=3;} void select_id_LHN_ID() { set(optional); type=4;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else { type = 5; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* X2SetupRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{X2SetupRequest-IEs}}, ... } */ struct X2SetupRequest : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "X2SetupRequest";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; }; /* X2SetupResponse-IEs X2AP-PROTOCOL-IES ::= { { ID id-GlobalENB-ID CRITICALITY reject TYPE GlobalENB-ID PRESENCE mandatory}| { ID id-ServedCells CRITICALITY reject TYPE ServedCells PRESENCE mandatory}| { ID id-GUGroupIDList CRITICALITY reject TYPE GUGroupIDList PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, ... } */ struct X2SetupResponse_IEs { struct id_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(id_GlobalENB_ID); type=1;} void select_id_ServedCells() { set(id_ServedCells); type=2;} void select_id_GUGroupIDList() { set(id_GUGroupIDList); type=3;} void select_id_CriticalityDiagnostics() { set(id_CriticalityDiagnostics); type=4;} void select_id_LHN_ID() { set(id_LHN_ID); type=5;} X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_GlobalENB_ID)) { type = 1; return true; } else if(equal(id_ServedCells)) { type = 2; return true; } else if(equal(id_GUGroupIDList)) { type = 3; return true; } else if(equal(id_CriticalityDiagnostics)) { type = 4; return true; } else if(equal(id_LHN_ID)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_GlobalENB_ID);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_ServedCells);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_GUGroupIDList);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_CriticalityDiagnostics);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_LHN_ID);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(reject); type=1;} void select_id_ServedCells() { set(reject); type=2;} void select_id_GUGroupIDList() { set(reject); type=3;} void select_id_CriticalityDiagnostics() { set(ignore); type=4;} void select_id_LHN_ID() { set(ignore); type=5;} X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(ignore)) { type = 4; return true; } else if(equal(ignore)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct Value_t : asn::typefield { ~Value_t() {clear();} size_t get_index() const {return type;} GlobalENB_ID& select_id_GlobalENB_ID() { return set(1); } GlobalENB_ID const* get_id_GlobalENB_ID() const { return get(1); } ServedCells& select_id_ServedCells() { return set(2); } ServedCells const* get_id_ServedCells() const { return get(2); } GUGroupIDList& select_id_GUGroupIDList() { return set(3); } GUGroupIDList const* get_id_GUGroupIDList() const { return get(3); } CriticalityDiagnostics& select_id_CriticalityDiagnostics() { return set(4); } CriticalityDiagnostics const* get_id_CriticalityDiagnostics() const { return get(4); } LHN_ID& select_id_LHN_ID() { return set(5); } LHN_ID const* get_id_LHN_ID() const { return get(5); } bool is_unknown() const { return type == 6; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_GlobalENB_ID()); return true; case 2: v(select_id_ServedCells()); return true; case 3: v(select_id_GUGroupIDList()); return true; case 4: v(select_id_CriticalityDiagnostics()); return true; case 5: v(select_id_LHN_ID()); return true; case 6: if(type != 6) {clear(); asn::base::set();} type = 6; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CriticalityDiagnostics)]; char dummy2[sizeof(GUGroupIDList)]; char dummy3[sizeof(GlobalENB_ID)]; char dummy4[sizeof(LHN_ID)]; char dummy5[sizeof(ServedCells)]; }; asn::variant var; size_t type {0}; }; struct presence_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 6; } void clear() {type = 0;} void select_id_GlobalENB_ID() { set(mandatory); type=1;} void select_id_ServedCells() { set(mandatory); type=2;} void select_id_GUGroupIDList() { set(optional); type=3;} void select_id_CriticalityDiagnostics() { set(optional); type=4;} void select_id_LHN_ID() { set(optional); type=5;} X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(mandatory)) { type = 1; return true; } else if(equal(mandatory)) { type = 2; return true; } else if(equal(optional)) { type = 3; return true; } else if(equal(optional)) { type = 4; return true; } else if(equal(optional)) { type = 5; return true; } else { type = 6; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(mandatory);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false; case 6: type = 6; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* X2SetupResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container {{X2SetupResponse-IEs}}, ... } */ struct X2SetupResponse : asn::sequence<1, 0, true, 0> { static constexpr const char* name() {return "X2SetupResponse";} using parent_t = asn::sequence<1, 0, true, 0>; struct protocolIEs_t : ProtocolIE_Container { static constexpr const char* name() {return "protocolIEs_t";} using parent_t = ProtocolIE_Container; }; protocolIEs_t& ref_protocolIEs() {return protocolIEs;} protocolIEs_t const& ref_protocolIEs() const {return protocolIEs;} template void decode(V& v) { v(protocolIEs); }; template void encode(V& v) const { v(protocolIEs); }; void clear() { protocolIEs.clear(); }; private: protocolIEs_t protocolIEs; };