X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=sim%2Fe2-interface.git;a=blobdiff_plain;f=e2sim%2Fe2apv1sim%2Fe2sim%2Fsrc%2FASN1%2Fgenerated%2FX2AP-IEs.hpp;fp=e2sim%2Fe2apv1sim%2Fe2sim%2Fsrc%2FASN1%2Fgenerated%2FX2AP-IEs.hpp;h=f056563b3aaff6a35122a26b01223214f3254100;hp=0000000000000000000000000000000000000000;hb=3ebf932d23dcbec9ed19f4a51f9d00a0a54f5124;hpb=6896318f2b4ff01b4a88b16019c3dc93b0b693f5 diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp b/e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp new file mode 100644 index 0000000..f056563 --- /dev/null +++ b/e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp @@ -0,0 +1,35962 @@ +/***************************************************************************** +# 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-Constants.hpp" +#include "X2AP-CommonDataTypes.hpp" +#include "X2AP-Containers.hpp" + +/* +DL-ABS-status::= INTEGER (0..100) +*/ + +struct DL_ABS_status : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-ABS-status";} + using parent_t = asn::integer<>; + +}; + +/* +UsableABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UsableABSInformationFDD_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}; + + }; + +}; +/* +UsableABSInformationFDD ::= SEQUENCE { + usable-abs-pattern-info BIT STRING (SIZE(40)), + iE-Extensions ProtocolExtensionContainer { {UsableABSInformationFDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UsableABSInformationFDD : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UsableABSInformationFDD";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct usable_abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usable_abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + usable_abs_pattern_info_t& ref_usable_abs_pattern_info() {return usable_abs_pattern_info;} + usable_abs_pattern_info_t const& ref_usable_abs_pattern_info() const {return usable_abs_pattern_info;} + 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(usable_abs_pattern_info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(usable_abs_pattern_info); + v(iE_Extensions); + + }; + void clear() + { + usable_abs_pattern_info.clear(); + iE_Extensions.clear(); + + }; + private: + usable_abs_pattern_info_t usable_abs_pattern_info; + iE_Extensions_t iE_Extensions; + +}; +/* +UsableABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UsableABSInformationTDD_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}; + + }; + +}; +/* +UsableABSInformationTDD ::= SEQUENCE { + usaable-abs-pattern-info BIT STRING (SIZE(1..70, ...)), + iE-Extensions ProtocolExtensionContainer { {UsableABSInformationTDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UsableABSInformationTDD : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UsableABSInformationTDD";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct usaable_abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usaable_abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + usaable_abs_pattern_info_t& ref_usaable_abs_pattern_info() {return usaable_abs_pattern_info;} + usaable_abs_pattern_info_t const& ref_usaable_abs_pattern_info() const {return usaable_abs_pattern_info;} + 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(usaable_abs_pattern_info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(usaable_abs_pattern_info); + v(iE_Extensions); + + }; + void clear() + { + usaable_abs_pattern_info.clear(); + iE_Extensions.clear(); + + }; + private: + usaable_abs_pattern_info_t usaable_abs_pattern_info; + iE_Extensions_t iE_Extensions; + +}; +/* +UsableABSInformation ::= CHOICE { + fdd UsableABSInformationFDD, + tdd UsableABSInformationTDD, + ... +} +*/ + +struct UsableABSInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "UsableABSInformation";} + 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); } + ~UsableABSInformation() {clear();} + struct fdd_t : UsableABSInformationFDD + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = UsableABSInformationFDD; + + }; + struct tdd_t : UsableABSInformationTDD + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = UsableABSInformationTDD; + + }; + 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}; +}; +/* +ABS-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABS_Status_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}; + + }; + +}; +/* +ABS-Status ::= SEQUENCE { + dL-ABS-status DL-ABS-status, + usableABSInformation UsableABSInformation, + iE-Extensions ProtocolExtensionContainer { {ABS-Status-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABS_Status : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ABS-Status";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dL_ABS_status_t : DL_ABS_status + { + static constexpr const char* name() {return "dL_ABS_status_t";} + using parent_t = DL_ABS_status; + + }; + dL_ABS_status_t& ref_dL_ABS_status() {return dL_ABS_status;} + dL_ABS_status_t const& ref_dL_ABS_status() const {return dL_ABS_status;} + struct usableABSInformation_t : UsableABSInformation + { + static constexpr const char* name() {return "usableABSInformation_t";} + using parent_t = UsableABSInformation; + + }; + usableABSInformation_t& ref_usableABSInformation() {return usableABSInformation;} + usableABSInformation_t const& ref_usableABSInformation() const {return usableABSInformation;} + 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_ABS_status); + v(usableABSInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_ABS_status); + v(usableABSInformation); + v(iE_Extensions); + + }; + void clear() + { + dL_ABS_status.clear(); + usableABSInformation.clear(); + iE_Extensions.clear(); + + }; + private: + dL_ABS_status_t dL_ABS_status; + usableABSInformation_t usableABSInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABSInformationFDD_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}; + + }; + +}; +/* +ABSInformationFDD ::= SEQUENCE { + abs-pattern-info BIT STRING (SIZE(40)), + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + measurement-subset BIT STRING (SIZE(40)), + iE-Extensions ProtocolExtensionContainer { {ABSInformationFDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABSInformationFDD : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ABSInformationFDD";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + abs_pattern_info_t& ref_abs_pattern_info() {return abs_pattern_info;} + abs_pattern_info_t const& ref_abs_pattern_info() const {return abs_pattern_info;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct measurement_subset_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "measurement_subset_t";} + using parent_t = asn::bstring<>; + + }; + + measurement_subset_t& ref_measurement_subset() {return measurement_subset;} + measurement_subset_t const& ref_measurement_subset() const {return measurement_subset;} + 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(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + void clear() + { + abs_pattern_info.clear(); + numberOfCellSpecificAntennaPorts.clear(); + measurement_subset.clear(); + iE_Extensions.clear(); + + }; + private: + abs_pattern_info_t abs_pattern_info; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + measurement_subset_t measurement_subset; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ABSInformationTDD_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}; + + }; + +}; +/* +ABSInformationTDD ::= SEQUENCE { + abs-pattern-info BIT STRING (SIZE(1..70, ...)), + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + measurement-subset BIT STRING (SIZE(1..70, ...)), + iE-Extensions ProtocolExtensionContainer { {ABSInformationTDD-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ABSInformationTDD : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ABSInformationTDD";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct abs_pattern_info_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "abs_pattern_info_t";} + using parent_t = asn::bstring<>; + + }; + + abs_pattern_info_t& ref_abs_pattern_info() {return abs_pattern_info;} + abs_pattern_info_t const& ref_abs_pattern_info() const {return abs_pattern_info;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct measurement_subset_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "measurement_subset_t";} + using parent_t = asn::bstring<>; + + }; + + measurement_subset_t& ref_measurement_subset() {return measurement_subset;} + measurement_subset_t const& ref_measurement_subset() const {return measurement_subset;} + 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(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(abs_pattern_info); + v(numberOfCellSpecificAntennaPorts); + v(measurement_subset); + v(iE_Extensions); + + }; + void clear() + { + abs_pattern_info.clear(); + numberOfCellSpecificAntennaPorts.clear(); + measurement_subset.clear(); + iE_Extensions.clear(); + + }; + private: + abs_pattern_info_t abs_pattern_info; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + measurement_subset_t measurement_subset; + iE_Extensions_t iE_Extensions; + +}; +/* +ABSInformation ::= CHOICE { + fdd ABSInformationFDD, + tdd ABSInformationTDD, + abs-inactive NULL, + ... +} +*/ + +struct ABSInformation : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "ABSInformation";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~ABSInformation() {clear();} + struct fdd_t : ABSInformationFDD + { + static constexpr const char* name() {return "fdd_t";} + using parent_t = ABSInformationFDD; + + }; + struct tdd_t : ABSInformationTDD + { + static constexpr const char* name() {return "tdd_t";} + using parent_t = ABSInformationTDD; + + }; + struct abs_inactive_t : asn::nulltype + { + static constexpr const char* name() {return "abs_inactive_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: 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()); + case 3: set_index(3); 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()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + 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; } + abs_inactive_t& select_abs_inactive() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + abs_inactive_t const* get_abs_inactive() const { if(get_index() == 3) { 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)]; + char dummy3[sizeof(abs_inactive_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Key-eNodeB-Star ::= BIT STRING (SIZE(256)) +*/ + +struct Key_eNodeB_Star : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Key-eNodeB-Star";} + using parent_t = asn::bstring<>; + +}; + +/* +NextHopChainingCount ::= INTEGER (0..7) +*/ + +struct NextHopChainingCount : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NextHopChainingCount";} + using parent_t = asn::integer<>; + +}; + +/* +AS-SecurityInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AS_SecurityInformation_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}; + + }; + +}; +/* +AS-SecurityInformation ::= SEQUENCE { + key-eNodeB-star Key-eNodeB-Star, + nextHopChainingCount NextHopChainingCount, + iE-Extensions ProtocolExtensionContainer { {AS-SecurityInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AS_SecurityInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "AS-SecurityInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct key_eNodeB_star_t : Key_eNodeB_Star + { + static constexpr const char* name() {return "key_eNodeB_star_t";} + using parent_t = Key_eNodeB_Star; + + }; + key_eNodeB_star_t& ref_key_eNodeB_star() {return key_eNodeB_star;} + key_eNodeB_star_t const& ref_key_eNodeB_star() const {return key_eNodeB_star;} + struct nextHopChainingCount_t : NextHopChainingCount + { + static constexpr const char* name() {return "nextHopChainingCount_t";} + using parent_t = NextHopChainingCount; + + }; + nextHopChainingCount_t& ref_nextHopChainingCount() {return nextHopChainingCount;} + nextHopChainingCount_t const& ref_nextHopChainingCount() const {return nextHopChainingCount;} + 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(key_eNodeB_star); + v(nextHopChainingCount); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(key_eNodeB_star); + v(nextHopChainingCount); + v(iE_Extensions); + + }; + void clear() + { + key_eNodeB_star.clear(); + nextHopChainingCount.clear(); + iE_Extensions.clear(); + + }; + private: + key_eNodeB_star_t key_eNodeB_star; + nextHopChainingCount_t nextHopChainingCount; + iE_Extensions_t iE_Extensions; + +}; +/* +ActivationID ::= INTEGER (0..255) +*/ + +struct ActivationID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ActivationID";} + using parent_t = asn::integer<>; + +}; + +/* +AdditionalSpecialSubframePatterns ::= ENUMERATED { + ssp0, + ssp1, + ssp2, + ssp3, + ssp4, + ssp5, + ssp6, + ssp7, + ssp8, + ssp9, + ... +} +*/ + +struct AdditionalSpecialSubframePatterns : asn::enumerated<10, 0, true> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframePatterns";} + using parent_t = asn::enumerated<10, 0, true>; + typedef enum { + ssp0 + ,ssp1 + ,ssp2 + ,ssp3 + ,ssp4 + ,ssp5 + ,ssp6 + ,ssp7 + ,ssp8 + ,ssp9 + } index_t; + +}; + +/* +CyclicPrefixDL ::= ENUMERATED { + normal, + extended, + ... +} +*/ + +struct CyclicPrefixDL : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CyclicPrefixDL";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + normal + ,extended + } index_t; + +}; + +/* +CyclicPrefixUL ::= ENUMERATED { + normal, + extended, + ... +} +*/ + +struct CyclicPrefixUL : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CyclicPrefixUL";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + normal + ,extended + } index_t; + +}; + +/* +AdditionalSpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AdditionalSpecialSubframe_Info_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}; + + }; + +}; +/* +AdditionalSpecialSubframe-Info ::= SEQUENCE { + additionalspecialSubframePatterns AdditionalSpecialSubframePatterns, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {AdditionalSpecialSubframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AdditionalSpecialSubframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct additionalspecialSubframePatterns_t : AdditionalSpecialSubframePatterns + { + static constexpr const char* name() {return "additionalspecialSubframePatterns_t";} + using parent_t = AdditionalSpecialSubframePatterns; + + }; + additionalspecialSubframePatterns_t& ref_additionalspecialSubframePatterns() {return additionalspecialSubframePatterns;} + additionalspecialSubframePatterns_t const& ref_additionalspecialSubframePatterns() const {return additionalspecialSubframePatterns;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + 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(additionalspecialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(additionalspecialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + additionalspecialSubframePatterns.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + additionalspecialSubframePatterns_t additionalspecialSubframePatterns; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +AdditionalSpecialSubframePatternsExtension ::= ENUMERATED { + ssp10, + ... +} +*/ + +struct AdditionalSpecialSubframePatternsExtension : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframePatternsExtension";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + ssp10 + } index_t; + +}; + +/* +AdditionalSpecialSubframeExtension-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AdditionalSpecialSubframeExtension_Info_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}; + + }; + +}; +/* +AdditionalSpecialSubframeExtension-Info ::= SEQUENCE { + additionalspecialSubframePatternsExtension AdditionalSpecialSubframePatternsExtension, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {AdditionalSpecialSubframeExtension-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AdditionalSpecialSubframeExtension_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AdditionalSpecialSubframeExtension-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct additionalspecialSubframePatternsExtension_t : AdditionalSpecialSubframePatternsExtension + { + static constexpr const char* name() {return "additionalspecialSubframePatternsExtension_t";} + using parent_t = AdditionalSpecialSubframePatternsExtension; + + }; + additionalspecialSubframePatternsExtension_t& ref_additionalspecialSubframePatternsExtension() {return additionalspecialSubframePatternsExtension;} + additionalspecialSubframePatternsExtension_t const& ref_additionalspecialSubframePatternsExtension() const {return additionalspecialSubframePatternsExtension;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + 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(additionalspecialSubframePatternsExtension); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(additionalspecialSubframePatternsExtension); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + additionalspecialSubframePatternsExtension.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + additionalspecialSubframePatternsExtension_t additionalspecialSubframePatternsExtension; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +AerialUEsubscriptionInformation ::= ENUMERATED { + allowed, + not-allowed, + ... +} +*/ + +struct AerialUEsubscriptionInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "AerialUEsubscriptionInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + allowed + ,not_allowed + } index_t; + +}; + +/* +PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) +*/ + +struct PriorityLevel : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PriorityLevel";} + using parent_t = asn::integer<>; + enum {spare = 0, highest = 1, lowest = 14, no_priority = 15}; + +}; + +/* +Pre-emptionCapability ::= ENUMERATED { + shall-not-trigger-pre-emption, + may-trigger-pre-emption +} +*/ + +struct Pre_emptionCapability : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "Pre-emptionCapability";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + shall_not_trigger_pre_emption + ,may_trigger_pre_emption + } index_t; + +}; + +/* +Pre-emptionVulnerability ::= ENUMERATED { + not-pre-emptable, + pre-emptable +} +*/ + +struct Pre_emptionVulnerability : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "Pre-emptionVulnerability";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + not_pre_emptable + ,pre_emptable + } index_t; + +}; + +/* +AllocationAndRetentionPriority-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct AllocationAndRetentionPriority_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}; + + }; + +}; +/* +AllocationAndRetentionPriority ::= SEQUENCE { + priorityLevel PriorityLevel, + pre-emptionCapability Pre-emptionCapability, + pre-emptionVulnerability Pre-emptionVulnerability, + iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct AllocationAndRetentionPriority : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "AllocationAndRetentionPriority";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct priorityLevel_t : PriorityLevel + { + static constexpr const char* name() {return "priorityLevel_t";} + using parent_t = PriorityLevel; + + }; + priorityLevel_t& ref_priorityLevel() {return priorityLevel;} + priorityLevel_t const& ref_priorityLevel() const {return priorityLevel;} + struct pre_emptionCapability_t : Pre_emptionCapability + { + static constexpr const char* name() {return "pre_emptionCapability_t";} + using parent_t = Pre_emptionCapability; + + }; + pre_emptionCapability_t& ref_pre_emptionCapability() {return pre_emptionCapability;} + pre_emptionCapability_t const& ref_pre_emptionCapability() const {return pre_emptionCapability;} + struct pre_emptionVulnerability_t : Pre_emptionVulnerability + { + static constexpr const char* name() {return "pre_emptionVulnerability_t";} + using parent_t = Pre_emptionVulnerability; + + }; + pre_emptionVulnerability_t& ref_pre_emptionVulnerability() {return pre_emptionVulnerability;} + pre_emptionVulnerability_t const& ref_pre_emptionVulnerability() const {return pre_emptionVulnerability;} + 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(priorityLevel); + v(pre_emptionCapability); + v(pre_emptionVulnerability); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(priorityLevel); + v(pre_emptionCapability); + v(pre_emptionVulnerability); + v(iE_Extensions); + + }; + void clear() + { + priorityLevel.clear(); + pre_emptionCapability.clear(); + pre_emptionVulnerability.clear(); + iE_Extensions.clear(); + + }; + private: + priorityLevel_t priorityLevel; + pre_emptionCapability_t pre_emptionCapability; + pre_emptionVulnerability_t pre_emptionVulnerability; + iE_Extensions_t iE_Extensions; + +}; +/* +PLMN-Identity ::= OCTET STRING (SIZE(3)) +*/ + +struct PLMN_Identity : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PLMN-Identity";} + using parent_t = asn::ostring<>; + +}; + +/* +EUTRANCellIdentifier ::= BIT STRING (SIZE (28)) +*/ + +struct EUTRANCellIdentifier : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EUTRANCellIdentifier";} + using parent_t = asn::bstring<>; + +}; + +/* +ECGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ECGI_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}; + + }; + +}; +/* +ECGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + eUTRANcellIdentifier EUTRANCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {ECGI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ECGI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ECGI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct eUTRANcellIdentifier_t : EUTRANCellIdentifier + { + static constexpr const char* name() {return "eUTRANcellIdentifier_t";} + using parent_t = EUTRANCellIdentifier; + + }; + eUTRANcellIdentifier_t& ref_eUTRANcellIdentifier() {return eUTRANcellIdentifier;} + eUTRANcellIdentifier_t const& ref_eUTRANcellIdentifier() const {return eUTRANcellIdentifier;} + 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(pLMN_Identity); + v(eUTRANcellIdentifier); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(eUTRANcellIdentifier); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + eUTRANcellIdentifier.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + eUTRANcellIdentifier_t eUTRANcellIdentifier; + iE_Extensions_t iE_Extensions; + +}; +/* +CellIdListforMDT ::= SEQUENCE (SIZE(1..maxnoofCellIDforMDT)) OF ECGI +*/ + +struct CellIdListforMDT_elm : ECGI +{ + static constexpr const char* name() {return "CellIdListforMDT_elm";} + using parent_t = ECGI; + +}; +struct CellIdListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "CellIdListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellBasedMDT_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}; + + }; + +}; +/* +CellBasedMDT::= SEQUENCE { + cellIdListforMDT CellIdListforMDT, + iE-Extensions ProtocolExtensionContainer { {CellBasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellBasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellBasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cellIdListforMDT_t : CellIdListforMDT + { + static constexpr const char* name() {return "cellIdListforMDT_t";} + using parent_t = CellIdListforMDT; + + }; + cellIdListforMDT_t& ref_cellIdListforMDT() {return cellIdListforMDT;} + cellIdListforMDT_t const& ref_cellIdListforMDT() const {return cellIdListforMDT;} + 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(cellIdListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellIdListforMDT); + v(iE_Extensions); + + }; + void clear() + { + cellIdListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + cellIdListforMDT_t cellIdListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +TAC ::= OCTET STRING (SIZE (2)) +*/ + +struct TAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TAC";} + using parent_t = asn::ostring<>; + +}; + +/* +TAListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAC +*/ + +struct TAListforMDT_elm : TAC +{ + static constexpr const char* name() {return "TAListforMDT_elm";} + using parent_t = TAC; + +}; +struct TAListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "TAListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TABasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TABasedMDT_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}; + + }; + +}; +/* +TABasedMDT::= SEQUENCE { + tAListforMDT TAListforMDT, + iE-Extensions ProtocolExtensionContainer { {TABasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TABasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TABasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAListforMDT_t : TAListforMDT + { + static constexpr const char* name() {return "tAListforMDT_t";} + using parent_t = TAListforMDT; + + }; + tAListforMDT_t& ref_tAListforMDT() {return tAListforMDT;} + tAListforMDT_t const& ref_tAListforMDT() const {return tAListforMDT;} + 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(tAListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAListforMDT); + v(iE_Extensions); + + }; + void clear() + { + tAListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + tAListforMDT_t tAListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +TAI-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAI_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}; + + }; + +}; +/* +TAI-Item ::= SEQUENCE { + tAC TAC, + pLMN-Identity PLMN-Identity, + iE-Extensions ProtocolExtensionContainer { {TAI-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAI_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "TAI-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct tAC_t : TAC + { + static constexpr const char* name() {return "tAC_t";} + using parent_t = TAC; + + }; + tAC_t& ref_tAC() {return tAC;} + tAC_t const& ref_tAC() const {return tAC;} + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + 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(tAC); + v(pLMN_Identity); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAC); + v(pLMN_Identity); + v(iE_Extensions); + + }; + void clear() + { + tAC.clear(); + pLMN_Identity.clear(); + iE_Extensions.clear(); + + }; + private: + tAC_t tAC; + pLMN_Identity_t pLMN_Identity; + iE_Extensions_t iE_Extensions; + +}; +/* +TAIListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAI-Item +*/ + +struct TAIListforMDT_elm : TAI_Item +{ + static constexpr const char* name() {return "TAIListforMDT_elm";} + using parent_t = TAI_Item; + +}; +struct TAIListforMDT : asn::sequenceof +{ + static constexpr const char* name() {return "TAIListforMDT";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TAIBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAIBasedMDT_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}; + + }; + +}; +/* +TAIBasedMDT ::= SEQUENCE { + tAIListforMDT TAIListforMDT, + iE-Extensions ProtocolExtensionContainer { {TAIBasedMDT-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAIBasedMDT : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TAIBasedMDT";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAIListforMDT_t : TAIListforMDT + { + static constexpr const char* name() {return "tAIListforMDT_t";} + using parent_t = TAIListforMDT; + + }; + tAIListforMDT_t& ref_tAIListforMDT() {return tAIListforMDT;} + tAIListforMDT_t const& ref_tAIListforMDT() const {return tAIListforMDT;} + 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(tAIListforMDT); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAIListforMDT); + v(iE_Extensions); + + }; + void clear() + { + tAIListforMDT.clear(); + iE_Extensions.clear(); + + }; + private: + tAIListforMDT_t tAIListforMDT; + iE_Extensions_t iE_Extensions; + +}; +/* +AreaScopeOfMDT ::= CHOICE { + cellBased CellBasedMDT, + tABased TABasedMDT, + pLMNWide NULL, + ..., + tAIBased TAIBasedMDT +} +*/ + +struct AreaScopeOfMDT : asn::choice<4, 1, true> +{ + static constexpr const char* name() {return "AreaScopeOfMDT";} + using parent_t = asn::choice<4, 1, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~AreaScopeOfMDT() {clear();} + struct cellBased_t : CellBasedMDT + { + static constexpr const char* name() {return "cellBased_t";} + using parent_t = CellBasedMDT; + + }; + struct tABased_t : TABasedMDT + { + static constexpr const char* name() {return "tABased_t";} + using parent_t = TABasedMDT; + + }; + struct pLMNWide_t : asn::nulltype + { + static constexpr const char* name() {return "pLMNWide_t";} + using parent_t = asn::nulltype; + + }; + struct tAIBased_t : TAIBasedMDT + { + static constexpr const char* name() {return "tAIBased_t";} + using parent_t = TAIBasedMDT; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: 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()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); 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()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as();} return nullptr; } + pLMNWide_t& select_pLMNWide() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + pLMNWide_t const* get_pLMNWide() const { if(get_index() == 3) { return &var.as();} return nullptr; } + tAIBased_t& select_tAIBased() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + tAIBased_t const* get_tAIBased() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(cellBased_t)]; + char dummy2[sizeof(tABased_t)]; + char dummy3[sizeof(pLMNWide_t)]; + char dummy4[sizeof(tAIBased_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +CellIdListforQMC ::= SEQUENCE (SIZE(1..maxnoofCellIDforQMC)) OF ECGI +*/ + +struct CellIdListforQMC_elm : ECGI +{ + static constexpr const char* name() {return "CellIdListforQMC_elm";} + using parent_t = ECGI; + +}; +struct CellIdListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "CellIdListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellBasedQMC_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}; + + }; + +}; +/* +CellBasedQMC::= SEQUENCE { + cellIdListforQMC CellIdListforQMC, + iE-Extensions ProtocolExtensionContainer { {CellBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CellBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cellIdListforQMC_t : CellIdListforQMC + { + static constexpr const char* name() {return "cellIdListforQMC_t";} + using parent_t = CellIdListforQMC; + + }; + cellIdListforQMC_t& ref_cellIdListforQMC() {return cellIdListforQMC;} + cellIdListforQMC_t const& ref_cellIdListforQMC() const {return cellIdListforQMC;} + 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(cellIdListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellIdListforQMC); + v(iE_Extensions); + + }; + void clear() + { + cellIdListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + cellIdListforQMC_t cellIdListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TAListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAC +*/ + +struct TAListforQMC_elm : TAC +{ + static constexpr const char* name() {return "TAListforQMC_elm";} + using parent_t = TAC; + +}; +struct TAListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "TAListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TABasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TABasedQMC_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}; + + }; + +}; +/* +TABasedQMC ::= SEQUENCE { + tAListforQMC TAListforQMC, + iE-Extensions ProtocolExtensionContainer { {TABasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TABasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TABasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAListforQMC_t : TAListforQMC + { + static constexpr const char* name() {return "tAListforQMC_t";} + using parent_t = TAListforQMC; + + }; + tAListforQMC_t& ref_tAListforQMC() {return tAListforQMC;} + tAListforQMC_t const& ref_tAListforQMC() const {return tAListforQMC;} + 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(tAListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAListforQMC); + v(iE_Extensions); + + }; + void clear() + { + tAListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + tAListforQMC_t tAListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TAIListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAI-Item +*/ + +struct TAIListforQMC_elm : TAI_Item +{ + static constexpr const char* name() {return "TAIListforQMC_elm";} + using parent_t = TAI_Item; + +}; +struct TAIListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "TAIListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TAIBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct TAIBasedQMC_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}; + + }; + +}; +/* +TAIBasedQMC ::= SEQUENCE { + tAIListforQMC TAIListforQMC, + iE-Extensions ProtocolExtensionContainer { {TAIBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TAIBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "TAIBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct tAIListforQMC_t : TAIListforQMC + { + static constexpr const char* name() {return "tAIListforQMC_t";} + using parent_t = TAIListforQMC; + + }; + tAIListforQMC_t& ref_tAIListforQMC() {return tAIListforQMC;} + tAIListforQMC_t const& ref_tAIListforQMC() const {return tAIListforQMC;} + 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(tAIListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(tAIListforQMC); + v(iE_Extensions); + + }; + void clear() + { + tAIListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + tAIListforQMC_t tAIListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +PLMNListforQMC ::= SEQUENCE (SIZE(1..maxnoofPLMNforQMC)) OF PLMN-Identity +*/ + +struct PLMNListforQMC_elm : PLMN_Identity +{ + static constexpr const char* name() {return "PLMNListforQMC_elm";} + using parent_t = PLMN_Identity; + +}; +struct PLMNListforQMC : asn::sequenceof +{ + static constexpr const char* name() {return "PLMNListforQMC";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +PLMNAreaBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct PLMNAreaBasedQMC_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}; + + }; + +}; +/* +PLMNAreaBasedQMC ::= SEQUENCE { + plmnListforQMC PLMNListforQMC, + iE-Extensions ProtocolExtensionContainer { {PLMNAreaBasedQMC-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct PLMNAreaBasedQMC : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "PLMNAreaBasedQMC";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct plmnListforQMC_t : PLMNListforQMC + { + static constexpr const char* name() {return "plmnListforQMC_t";} + using parent_t = PLMNListforQMC; + + }; + plmnListforQMC_t& ref_plmnListforQMC() {return plmnListforQMC;} + plmnListforQMC_t const& ref_plmnListforQMC() const {return plmnListforQMC;} + 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(plmnListforQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(plmnListforQMC); + v(iE_Extensions); + + }; + void clear() + { + plmnListforQMC.clear(); + iE_Extensions.clear(); + + }; + private: + plmnListforQMC_t plmnListforQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +AreaScopeOfQMC ::= CHOICE { + cellBased CellBasedQMC, + tABased TABasedQMC, + tAIBased TAIBasedQMC, + pLMNAreaBased PLMNAreaBasedQMC, + ... +} +*/ + +struct AreaScopeOfQMC : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "AreaScopeOfQMC";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~AreaScopeOfQMC() {clear();} + struct cellBased_t : CellBasedQMC + { + static constexpr const char* name() {return "cellBased_t";} + using parent_t = CellBasedQMC; + + }; + struct tABased_t : TABasedQMC + { + static constexpr const char* name() {return "tABased_t";} + using parent_t = TABasedQMC; + + }; + struct tAIBased_t : TAIBasedQMC + { + static constexpr const char* name() {return "tAIBased_t";} + using parent_t = TAIBasedQMC; + + }; + struct pLMNAreaBased_t : PLMNAreaBasedQMC + { + static constexpr const char* name() {return "pLMNAreaBased_t";} + using parent_t = PLMNAreaBasedQMC; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: 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()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); 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()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as();} return nullptr; } + tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as();} return nullptr; } + tAIBased_t& select_tAIBased() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + tAIBased_t const* get_tAIBased() const { if(get_index() == 3) { return &var.as();} return nullptr; } + pLMNAreaBased_t& select_pLMNAreaBased() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + pLMNAreaBased_t const* get_pLMNAreaBased() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(cellBased_t)]; + char dummy2[sizeof(tABased_t)]; + char dummy3[sizeof(tAIBased_t)]; + char dummy4[sizeof(pLMNAreaBased_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +FreqBandIndicator ::= INTEGER (1..256, ...) +*/ + +struct FreqBandIndicator : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "FreqBandIndicator";} + using parent_t = asn::integer<>; + +}; + +/* +BandInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct BandInfo_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}; + + }; + +}; +/* +BandInfo ::= SEQUENCE { + freqBandIndicator FreqBandIndicator, + iE-Extensions ProtocolExtensionContainer { {BandInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct BandInfo : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "BandInfo";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct freqBandIndicator_t : FreqBandIndicator + { + static constexpr const char* name() {return "freqBandIndicator_t";} + using parent_t = FreqBandIndicator; + + }; + freqBandIndicator_t& ref_freqBandIndicator() {return freqBandIndicator;} + freqBandIndicator_t const& ref_freqBandIndicator() const {return freqBandIndicator;} + 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(freqBandIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicator); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicator_t freqBandIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +BandwidthReducedSI::= ENUMERATED { + scheduled, + ... +} +*/ + +struct BandwidthReducedSI : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BandwidthReducedSI";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + scheduled + } index_t; + +}; + +/* +BearerType ::= ENUMERATED { + non-IP, + ... +} +*/ + +struct BearerType : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BearerType";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + non_IP + } index_t; + +}; + +/* +BenefitMetric ::= INTEGER (-101..100, ...) +*/ + +struct BenefitMetric : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BenefitMetric";} + using parent_t = asn::integer<>; + +}; + +/* +BitRate ::= INTEGER (0..10000000000) +*/ + +struct BitRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BitRate";} + using parent_t = asn::integer<>; + +}; + +/* +BluetoothMeasConfig::= ENUMERATED {setup,...} +*/ + +struct BluetoothMeasConfig : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "BluetoothMeasConfig";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + setup + } index_t; + +}; + +/* +BluetoothName ::= OCTET STRING (SIZE (1..248)) +*/ + +struct BluetoothName : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "BluetoothName";} + using parent_t = asn::ostring<>; + +}; + +/* +BluetoothMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofBluetoothName)) OF BluetoothName +*/ + +struct BluetoothMeasConfigNameList_elm : BluetoothName +{ + static constexpr const char* name() {return "BluetoothMeasConfigNameList_elm";} + using parent_t = BluetoothName; + +}; +struct BluetoothMeasConfigNameList : asn::sequenceof +{ + static constexpr const char* name() {return "BluetoothMeasConfigNameList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +BluetoothMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct BluetoothMeasurementConfiguration_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}; + + }; + +}; +/* +BluetoothMeasurementConfiguration ::= SEQUENCE { + bluetoothMeasConfig BluetoothMeasConfig, + bluetoothMeasConfigNameList BluetoothMeasConfigNameList OPTIONAL, + bt-rssi ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {BluetoothMeasurementConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct BluetoothMeasurementConfiguration : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "BluetoothMeasurementConfiguration";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct bluetoothMeasConfig_t : BluetoothMeasConfig + { + static constexpr const char* name() {return "bluetoothMeasConfig_t";} + using parent_t = BluetoothMeasConfig; + + }; + bluetoothMeasConfig_t& ref_bluetoothMeasConfig() {return bluetoothMeasConfig;} + bluetoothMeasConfig_t const& ref_bluetoothMeasConfig() const {return bluetoothMeasConfig;} + struct bluetoothMeasConfigNameList_t : BluetoothMeasConfigNameList + { + static constexpr const char* name() {return "bluetoothMeasConfigNameList_t";} + using parent_t = BluetoothMeasConfigNameList; + static constexpr bool optional = true; + + }; + bluetoothMeasConfigNameList_t& set_bluetoothMeasConfigNameList() { bluetoothMeasConfigNameList.setpresent(true); return bluetoothMeasConfigNameList;} + bluetoothMeasConfigNameList_t const* get_bluetoothMeasConfigNameList() const {return bluetoothMeasConfigNameList.is_valid() ? &bluetoothMeasConfigNameList : nullptr;} + struct bt_rssi_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "bt_rssi_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + bt_rssi_t& set_bt_rssi() { bt_rssi.setpresent(true); return bt_rssi;} + bt_rssi_t const* get_bt_rssi() const {return bt_rssi.is_valid() ? &bt_rssi : 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(bluetoothMeasConfig); + v(bluetoothMeasConfigNameList); + v(bt_rssi); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(bluetoothMeasConfig); + v(bluetoothMeasConfigNameList); + v(bt_rssi); + v(iE_Extensions); + + }; + void clear() + { + bluetoothMeasConfig.clear(); + bluetoothMeasConfigNameList.clear(); + bt_rssi.clear(); + iE_Extensions.clear(); + + }; + private: + bluetoothMeasConfig_t bluetoothMeasConfig; + bluetoothMeasConfigNameList_t bluetoothMeasConfigNameList; + bt_rssi_t bt_rssi; + iE_Extensions_t iE_Extensions; + +}; +/* +BroadcastPLMNs-Item ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF PLMN-Identity +*/ + +struct BroadcastPLMNs_Item_elm : PLMN_Identity +{ + static constexpr const char* name() {return "BroadcastPLMNs_Item_elm";} + using parent_t = PLMN_Identity; + +}; +struct BroadcastPLMNs_Item : asn::sequenceof +{ + static constexpr const char* name() {return "BroadcastPLMNs-Item";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CNTypeRestrictionsItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CNTypeRestrictionsItem_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}; + + }; + +}; +/* +CNTypeRestrictionsItem ::= SEQUENCE { + plmn-Id PLMN-Identity, + cn-type ENUMERATED {fiveGC-forbidden, ...}, + iE-Extensions ProtocolExtensionContainer { {CNTypeRestrictionsItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CNTypeRestrictionsItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CNTypeRestrictionsItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct plmn_Id_t : PLMN_Identity + { + static constexpr const char* name() {return "plmn_Id_t";} + using parent_t = PLMN_Identity; + + }; + plmn_Id_t& ref_plmn_Id() {return plmn_Id;} + plmn_Id_t const& ref_plmn_Id() const {return plmn_Id;} + struct cn_type_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "cn_type_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + fiveGC_forbidden + } index_t; + + }; + + cn_type_t& ref_cn_type() {return cn_type;} + cn_type_t const& ref_cn_type() const {return cn_type;} + 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(plmn_Id); + v(cn_type); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(plmn_Id); + v(cn_type); + v(iE_Extensions); + + }; + void clear() + { + plmn_Id.clear(); + cn_type.clear(); + iE_Extensions.clear(); + + }; + private: + plmn_Id_t plmn_Id; + cn_type_t cn_type; + iE_Extensions_t iE_Extensions; + +}; +/* +CNTypeRestrictions ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF CNTypeRestrictionsItem +*/ + +struct CNTypeRestrictions_elm : CNTypeRestrictionsItem +{ + static constexpr const char* name() {return "CNTypeRestrictions_elm";} + using parent_t = CNTypeRestrictionsItem; + +}; +struct CNTypeRestrictions : asn::sequenceof +{ + static constexpr const char* name() {return "CNTypeRestrictions";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +PDCP-SNExtended ::= INTEGER (0..32767) +*/ + +struct PDCP_SNExtended : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SNExtended";} + using parent_t = asn::integer<>; + +}; + +/* +HFNModified ::= INTEGER (0..131071) +*/ + +struct HFNModified : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFNModified";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTValueExtended-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTValueExtended_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}; + + }; + +}; +/* +COUNTValueExtended ::= SEQUENCE { + pDCP-SNExtended PDCP-SNExtended, + hFNModified HFNModified, + iE-Extensions ProtocolExtensionContainer { {COUNTValueExtended-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTValueExtended : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTValueExtended";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SNExtended_t : PDCP_SNExtended + { + static constexpr const char* name() {return "pDCP_SNExtended_t";} + using parent_t = PDCP_SNExtended; + + }; + pDCP_SNExtended_t& ref_pDCP_SNExtended() {return pDCP_SNExtended;} + pDCP_SNExtended_t const& ref_pDCP_SNExtended() const {return pDCP_SNExtended;} + struct hFNModified_t : HFNModified + { + static constexpr const char* name() {return "hFNModified_t";} + using parent_t = HFNModified; + + }; + hFNModified_t& ref_hFNModified() {return hFNModified;} + hFNModified_t const& ref_hFNModified() const {return hFNModified;} + 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(pDCP_SNExtended); + v(hFNModified); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SNExtended); + v(hFNModified); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SNExtended.clear(); + hFNModified.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SNExtended_t pDCP_SNExtended; + hFNModified_t hFNModified; + iE_Extensions_t iE_Extensions; + +}; +/* +PDCP-SN ::= INTEGER (0..4095) +*/ + +struct PDCP_SN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SN";} + using parent_t = asn::integer<>; + +}; + +/* +HFN ::= INTEGER (0..1048575) +*/ + +struct HFN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFN";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTvalue-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTvalue_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}; + + }; + +}; +/* +COUNTvalue ::= SEQUENCE { + pDCP-SN PDCP-SN, + hFN HFN, + iE-Extensions ProtocolExtensionContainer { {COUNTvalue-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTvalue : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTvalue";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SN_t : PDCP_SN + { + static constexpr const char* name() {return "pDCP_SN_t";} + using parent_t = PDCP_SN; + + }; + pDCP_SN_t& ref_pDCP_SN() {return pDCP_SN;} + pDCP_SN_t const& ref_pDCP_SN() const {return pDCP_SN;} + struct hFN_t : HFN + { + static constexpr const char* name() {return "hFN_t";} + using parent_t = HFN; + + }; + hFN_t& ref_hFN() {return hFN;} + hFN_t const& ref_hFN() const {return hFN;} + 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(pDCP_SN); + v(hFN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SN); + v(hFN); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SN.clear(); + hFN.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SN_t pDCP_SN; + hFN_t hFN; + iE_Extensions_t iE_Extensions; + +}; +/* +PDCP-SNlength18 ::= INTEGER (0..262143) +*/ + +struct PDCP_SNlength18 : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PDCP-SNlength18";} + using parent_t = asn::integer<>; + +}; + +/* +HFNforPDCP-SNlength18 ::= INTEGER (0..16383) +*/ + +struct HFNforPDCP_SNlength18 : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "HFNforPDCP-SNlength18";} + using parent_t = asn::integer<>; + +}; + +/* +COUNTvaluePDCP-SNlength18-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct COUNTvaluePDCP_SNlength18_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}; + + }; + +}; +/* +COUNTvaluePDCP-SNlength18 ::= SEQUENCE { + pDCP-SNlength18 PDCP-SNlength18, + hFNforPDCP-SNlength18 HFNforPDCP-SNlength18, + iE-Extensions ProtocolExtensionContainer { {COUNTvaluePDCP-SNlength18-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct COUNTvaluePDCP_SNlength18 : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "COUNTvaluePDCP-SNlength18";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pDCP_SNlength18_t : PDCP_SNlength18 + { + static constexpr const char* name() {return "pDCP_SNlength18_t";} + using parent_t = PDCP_SNlength18; + + }; + pDCP_SNlength18_t& ref_pDCP_SNlength18() {return pDCP_SNlength18;} + pDCP_SNlength18_t const& ref_pDCP_SNlength18() const {return pDCP_SNlength18;} + struct hFNforPDCP_SNlength18_t : HFNforPDCP_SNlength18 + { + static constexpr const char* name() {return "hFNforPDCP_SNlength18_t";} + using parent_t = HFNforPDCP_SNlength18; + + }; + hFNforPDCP_SNlength18_t& ref_hFNforPDCP_SNlength18() {return hFNforPDCP_SNlength18;} + hFNforPDCP_SNlength18_t const& ref_hFNforPDCP_SNlength18() const {return hFNforPDCP_SNlength18;} + 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(pDCP_SNlength18); + v(hFNforPDCP_SNlength18); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCP_SNlength18); + v(hFNforPDCP_SNlength18); + v(iE_Extensions); + + }; + void clear() + { + pDCP_SNlength18.clear(); + hFNforPDCP_SNlength18.clear(); + iE_Extensions.clear(); + + }; + private: + pDCP_SNlength18_t pDCP_SNlength18; + hFNforPDCP_SNlength18_t hFNforPDCP_SNlength18; + iE_Extensions_t iE_Extensions; + +}; +/* +CRNTI ::= BIT STRING (SIZE (16)) +*/ + +struct CRNTI : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CRNTI";} + using parent_t = asn::bstring<>; + +}; + +/* +CSG-Id ::= BIT STRING (SIZE (27)) +*/ + +struct CSG_Id : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CSG-Id";} + using parent_t = asn::bstring<>; + +}; + +/* +CSGMembershipStatus ::= ENUMERATED { + member, + not-member +} +*/ + +struct CSGMembershipStatus : asn::enumerated<2, 0, false> +{ + static constexpr const char* name() {return "CSGMembershipStatus";} + using parent_t = asn::enumerated<2, 0, false>; + typedef enum { + member + ,not_member + } index_t; + +}; + +/* +UEID ::= BIT STRING (SIZE (16)) +*/ + +struct UEID : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UEID";} + using parent_t = asn::bstring<>; + +}; + +/* +WidebandCQICodeword1::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + three-bitSpatialDifferentialCQI INTEGER (0..7, ...), + ... +} +*/ + +struct WidebandCQICodeword1 : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "WidebandCQICodeword1";} + 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); } + ~WidebandCQICodeword1() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct three_bitSpatialDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + 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); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() 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(four_bitCQI_t)]; + char dummy2[sizeof(three_bitSpatialDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +WidebandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct WidebandCQI_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}; + + }; + +}; +/* +WidebandCQI ::= SEQUENCE { + widebandCQICodeword0 INTEGER (0..15, ...), + widebandCQICodeword1 WidebandCQICodeword1 OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {WidebandCQI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct WidebandCQI : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "WidebandCQI";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct widebandCQICodeword0_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "widebandCQICodeword0_t";} + using parent_t = asn::integer<>; + + }; + + widebandCQICodeword0_t& ref_widebandCQICodeword0() {return widebandCQICodeword0;} + widebandCQICodeword0_t const& ref_widebandCQICodeword0() const {return widebandCQICodeword0;} + struct widebandCQICodeword1_t : WidebandCQICodeword1 + { + static constexpr const char* name() {return "widebandCQICodeword1_t";} + using parent_t = WidebandCQICodeword1; + static constexpr bool optional = true; + + }; + widebandCQICodeword1_t& set_widebandCQICodeword1() { widebandCQICodeword1.setpresent(true); return widebandCQICodeword1;} + widebandCQICodeword1_t const* get_widebandCQICodeword1() const {return widebandCQICodeword1.is_valid() ? &widebandCQICodeword1 : 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(widebandCQICodeword0); + v(widebandCQICodeword1); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(widebandCQICodeword0); + v(widebandCQICodeword1); + v(iE_Extensions); + + }; + void clear() + { + widebandCQICodeword0.clear(); + widebandCQICodeword1.clear(); + iE_Extensions.clear(); + + }; + private: + widebandCQICodeword0_t widebandCQICodeword0; + widebandCQICodeword1_t widebandCQICodeword1; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandSize ::= ENUMERATED { + size2, + size3, + size4, + size6, + size8, + ... +} +*/ + +struct SubbandSize : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "SubbandSize";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + size2 + ,size3 + ,size4 + ,size6 + ,size8 + } index_t; + +}; + +/* +SubbandCQICodeword0 ::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + two-bitSubbandDifferentialCQI INTEGER (0..3, ...), + two-bitDifferentialCQI INTEGER (0..3, ...), + ... +} +*/ + +struct SubbandCQICodeword0 : asn::choice<3, 0, true> +{ + static constexpr const char* name() {return "SubbandCQICodeword0";} + using parent_t = asn::choice<3, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 4;} + void set_unknown() { set_index(4); } + ~SubbandCQICodeword0() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitSubbandDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitSubbandDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: 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()); + case 3: set_index(3); 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()); + case 3: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 3) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(two_bitSubbandDifferentialCQI_t)]; + char dummy3[sizeof(two_bitDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubbandCQICodeword1 ::= CHOICE { + four-bitCQI INTEGER (0..15, ...), + three-bitSpatialDifferentialCQI INTEGER (0..7, ...), + two-bitSubbandDifferentialCQI INTEGER (0..3, ...), + two-bitDifferentialCQI INTEGER (0..3, ...), + ... +} +*/ + +struct SubbandCQICodeword1 : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "SubbandCQICodeword1";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~SubbandCQICodeword1() {clear();} + struct four_bitCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "four_bitCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct three_bitSpatialDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitSubbandDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitSubbandDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + struct two_bitDifferentialCQI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "two_bitDifferentialCQI_t";} + using parent_t = asn::integer<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: 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()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); 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()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as();} return nullptr; } + three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as();} return nullptr; } + two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 3) { return &var.as();} return nullptr; } + two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(four_bitCQI_t)]; + char dummy2[sizeof(three_bitSpatialDifferentialCQI_t)]; + char dummy3[sizeof(two_bitSubbandDifferentialCQI_t)]; + char dummy4[sizeof(two_bitDifferentialCQI_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubbandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SubbandCQI_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}; + + }; + +}; +/* +SubbandCQI ::= SEQUENCE { + subbandCQICodeword0 SubbandCQICodeword0, + subbandCQICodeword1 SubbandCQICodeword1 OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SubbandCQI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SubbandCQI : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "SubbandCQI";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct subbandCQICodeword0_t : SubbandCQICodeword0 + { + static constexpr const char* name() {return "subbandCQICodeword0_t";} + using parent_t = SubbandCQICodeword0; + + }; + subbandCQICodeword0_t& ref_subbandCQICodeword0() {return subbandCQICodeword0;} + subbandCQICodeword0_t const& ref_subbandCQICodeword0() const {return subbandCQICodeword0;} + struct subbandCQICodeword1_t : SubbandCQICodeword1 + { + static constexpr const char* name() {return "subbandCQICodeword1_t";} + using parent_t = SubbandCQICodeword1; + static constexpr bool optional = true; + + }; + subbandCQICodeword1_t& set_subbandCQICodeword1() { subbandCQICodeword1.setpresent(true); return subbandCQICodeword1;} + subbandCQICodeword1_t const* get_subbandCQICodeword1() const {return subbandCQICodeword1.is_valid() ? &subbandCQICodeword1 : 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(subbandCQICodeword0); + v(subbandCQICodeword1); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subbandCQICodeword0); + v(subbandCQICodeword1); + v(iE_Extensions); + + }; + void clear() + { + subbandCQICodeword0.clear(); + subbandCQICodeword1.clear(); + iE_Extensions.clear(); + + }; + private: + subbandCQICodeword0_t subbandCQICodeword0; + subbandCQICodeword1_t subbandCQICodeword1; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandCQIItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SubbandCQIItem_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}; + + }; + +}; +/* +SubbandCQIItem ::= SEQUENCE { + subbandCQI SubbandCQI, + subbandIndex INTEGER (0..27,...), + iE-Extensions ProtocolExtensionContainer { {SubbandCQIItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SubbandCQIItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "SubbandCQIItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct subbandCQI_t : SubbandCQI + { + static constexpr const char* name() {return "subbandCQI_t";} + using parent_t = SubbandCQI; + + }; + subbandCQI_t& ref_subbandCQI() {return subbandCQI;} + subbandCQI_t const& ref_subbandCQI() const {return subbandCQI;} + struct subbandIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "subbandIndex_t";} + using parent_t = asn::integer<>; + + }; + + subbandIndex_t& ref_subbandIndex() {return subbandIndex;} + subbandIndex_t const& ref_subbandIndex() const {return subbandIndex;} + 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(subbandCQI); + v(subbandIndex); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subbandCQI); + v(subbandIndex); + v(iE_Extensions); + + }; + void clear() + { + subbandCQI.clear(); + subbandIndex.clear(); + iE_Extensions.clear(); + + }; + private: + subbandCQI_t subbandCQI; + subbandIndex_t subbandIndex; + iE_Extensions_t iE_Extensions; + +}; +/* +SubbandCQIList ::= SEQUENCE (SIZE(1.. maxSubband)) OF SubbandCQIItem +*/ + +struct SubbandCQIList_elm : SubbandCQIItem +{ + static constexpr const char* name() {return "SubbandCQIList_elm";} + using parent_t = SubbandCQIItem; + +}; +struct SubbandCQIList : asn::sequenceof +{ + static constexpr const char* name() {return "SubbandCQIList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportPerCSIProcessItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportPerCSIProcessItem_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}; + + }; + +}; +/* +CSIReportPerCSIProcessItem ::= SEQUENCE (SIZE(1.. maxCSIReport)) OF + SEQUENCE { + rI INTEGER (1..8, ...), + widebandCQI WidebandCQI, + subbandSize SubbandSize, + subbandCQIList SubbandCQIList OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CSIReportPerCSIProcessItem-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportPerCSIProcessItem_elm : asn::sequence<5, 0, true, 2> +{ + static constexpr const char* name() {return "CSIReportPerCSIProcessItem_elm";} + using parent_t = asn::sequence<5, 0, true, 2>; + struct rI_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rI_t";} + using parent_t = asn::integer<>; + + }; + + rI_t& ref_rI() {return rI;} + rI_t const& ref_rI() const {return rI;} + struct widebandCQI_t : WidebandCQI + { + static constexpr const char* name() {return "widebandCQI_t";} + using parent_t = WidebandCQI; + + }; + widebandCQI_t& ref_widebandCQI() {return widebandCQI;} + widebandCQI_t const& ref_widebandCQI() const {return widebandCQI;} + struct subbandSize_t : SubbandSize + { + static constexpr const char* name() {return "subbandSize_t";} + using parent_t = SubbandSize; + + }; + subbandSize_t& ref_subbandSize() {return subbandSize;} + subbandSize_t const& ref_subbandSize() const {return subbandSize;} + struct subbandCQIList_t : SubbandCQIList + { + static constexpr const char* name() {return "subbandCQIList_t";} + using parent_t = SubbandCQIList; + static constexpr bool optional = true; + + }; + subbandCQIList_t& set_subbandCQIList() { subbandCQIList.setpresent(true); return subbandCQIList;} + subbandCQIList_t const* get_subbandCQIList() const {return subbandCQIList.is_valid() ? &subbandCQIList : 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(rI); + v(widebandCQI); + v(subbandSize); + v(subbandCQIList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rI); + v(widebandCQI); + v(subbandSize); + v(subbandCQIList); + v(iE_Extensions); + + }; + void clear() + { + rI.clear(); + widebandCQI.clear(); + subbandSize.clear(); + subbandCQIList.clear(); + iE_Extensions.clear(); + + }; + private: + rI_t rI; + widebandCQI_t widebandCQI; + subbandSize_t subbandSize; + subbandCQIList_t subbandCQIList; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportPerCSIProcessItem : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportPerCSIProcessItem";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportPerCSIProcess-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportPerCSIProcess_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}; + + }; + +}; +/* +CSIReportPerCSIProcess ::= SEQUENCE (SIZE(1.. maxCSIProcess)) OF + SEQUENCE { + cSIProcessConfigurationIndex INTEGER (1..7, ...), + cSIReportPerCSIProcessItem CSIReportPerCSIProcessItem, + iE-Extensions ProtocolExtensionContainer { {CSIReportPerCSIProcess-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportPerCSIProcess_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CSIReportPerCSIProcess_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct cSIProcessConfigurationIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "cSIProcessConfigurationIndex_t";} + using parent_t = asn::integer<>; + + }; + + cSIProcessConfigurationIndex_t& ref_cSIProcessConfigurationIndex() {return cSIProcessConfigurationIndex;} + cSIProcessConfigurationIndex_t const& ref_cSIProcessConfigurationIndex() const {return cSIProcessConfigurationIndex;} + struct cSIReportPerCSIProcessItem_t : CSIReportPerCSIProcessItem + { + static constexpr const char* name() {return "cSIReportPerCSIProcessItem_t";} + using parent_t = CSIReportPerCSIProcessItem; + + }; + cSIReportPerCSIProcessItem_t& ref_cSIReportPerCSIProcessItem() {return cSIReportPerCSIProcessItem;} + cSIReportPerCSIProcessItem_t const& ref_cSIReportPerCSIProcessItem() const {return cSIReportPerCSIProcessItem;} + 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(cSIProcessConfigurationIndex); + v(cSIReportPerCSIProcessItem); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cSIProcessConfigurationIndex); + v(cSIReportPerCSIProcessItem); + v(iE_Extensions); + + }; + void clear() + { + cSIProcessConfigurationIndex.clear(); + cSIReportPerCSIProcessItem.clear(); + iE_Extensions.clear(); + + }; + private: + cSIProcessConfigurationIndex_t cSIProcessConfigurationIndex; + cSIReportPerCSIProcessItem_t cSIReportPerCSIProcessItem; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportPerCSIProcess : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportPerCSIProcess";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CSIReportList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CSIReportList_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}; + + }; + +}; +/* +CSIReportList ::= SEQUENCE (SIZE(1..maxUEReport)) OF + SEQUENCE { + uEID UEID, + cSIReportPerCSIProcess CSIReportPerCSIProcess, + iE-Extensions ProtocolExtensionContainer { {CSIReportList-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CSIReportList_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CSIReportList_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uEID_t : UEID + { + static constexpr const char* name() {return "uEID_t";} + using parent_t = UEID; + + }; + uEID_t& ref_uEID() {return uEID;} + uEID_t const& ref_uEID() const {return uEID;} + struct cSIReportPerCSIProcess_t : CSIReportPerCSIProcess + { + static constexpr const char* name() {return "cSIReportPerCSIProcess_t";} + using parent_t = CSIReportPerCSIProcess; + + }; + cSIReportPerCSIProcess_t& ref_cSIReportPerCSIProcess() {return cSIReportPerCSIProcess;} + cSIReportPerCSIProcess_t const& ref_cSIReportPerCSIProcess() const {return cSIReportPerCSIProcess;} + 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(uEID); + v(cSIReportPerCSIProcess); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uEID); + v(cSIReportPerCSIProcess); + v(iE_Extensions); + + }; + void clear() + { + uEID.clear(); + cSIReportPerCSIProcess.clear(); + iE_Extensions.clear(); + + }; + private: + uEID_t uEID; + cSIReportPerCSIProcess_t cSIReportPerCSIProcess; + iE_Extensions_t iE_Extensions; + +}; +struct CSIReportList : asn::sequenceof +{ + static constexpr const char* name() {return "CSIReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CapacityValue ::= INTEGER (0..100) +*/ + +struct CapacityValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CapacityValue";} + using parent_t = asn::integer<>; + +}; + +/* +CauseRadioNetwork ::= ENUMERATED { + handover-desirable-for-radio-reasons, + time-critical-handover, + resource-optimisation-handover, + reduce-load-in-serving-cell, + partial-handover, + unknown-new-eNB-UE-X2AP-ID, + unknown-old-eNB-UE-X2AP-ID, + unknown-pair-of-UE-X2AP-ID, + ho-target-not-allowed, + tx2relocoverall-expiry, + trelocprep-expiry, + cell-not-available, + no-radio-resources-available-in-target-cell, + invalid-MME-GroupID, + unknown-MME-Code, + encryption-and-or-integrity-protection-algorithms-not-supported, + reportCharacteristicsEmpty, + noReportPeriodicity, + existingMeasurementID, + unknown-eNB-Measurement-ID, + measurement-temporarily-not-available, + unspecified, + ..., + load-balancing, + handover-optimisation, + value-out-of-allowed-range, + multiple-E-RAB-ID-instances, + switch-off-ongoing, + not-supported-QCI-value, + measurement-not-supported-for-the-object, + tDCoverall-expiry, + tDCprep-expiry, + action-desirable-for-radio-reasons, + reduce-load, + resource-optimisation, + time-critical-action, + target-not-allowed, + no-radio-resources-available, + invalid-QoS-combination, + encryption-algorithms-not-aupported, + procedure-cancelled, + rRM-purpose, + improve-user-bit-rate, + user-inactivity, + radio-connection-with-UE-lost, + failure-in-the-radio-interface-procedure, + bearer-option-not-supported, + mCG-Mobility, + sCG-Mobility, + count-reaches-max-value, + unknown-old-en-gNB-UE-X2AP-ID, + pDCP-Overload + +} +*/ + +struct CauseRadioNetwork : asn::enumerated<51, 29, true> +{ + static constexpr const char* name() {return "CauseRadioNetwork";} + using parent_t = asn::enumerated<51, 29, true>; + typedef enum { + handover_desirable_for_radio_reasons + ,time_critical_handover + ,resource_optimisation_handover + ,reduce_load_in_serving_cell + ,partial_handover + ,unknown_new_eNB_UE_X2AP_ID + ,unknown_old_eNB_UE_X2AP_ID + ,unknown_pair_of_UE_X2AP_ID + ,ho_target_not_allowed + ,tx2relocoverall_expiry + ,trelocprep_expiry + ,cell_not_available + ,no_radio_resources_available_in_target_cell + ,invalid_MME_GroupID + ,unknown_MME_Code + ,encryption_and_or_integrity_protection_algorithms_not_supported + ,reportCharacteristicsEmpty + ,noReportPeriodicity + ,existingMeasurementID + ,unknown_eNB_Measurement_ID + ,measurement_temporarily_not_available + ,unspecified + ,load_balancing + ,handover_optimisation + ,value_out_of_allowed_range + ,multiple_E_RAB_ID_instances + ,switch_off_ongoing + ,not_supported_QCI_value + ,measurement_not_supported_for_the_object + ,tDCoverall_expiry + ,tDCprep_expiry + ,action_desirable_for_radio_reasons + ,reduce_load + ,resource_optimisation + ,time_critical_action + ,target_not_allowed + ,no_radio_resources_available + ,invalid_QoS_combination + ,encryption_algorithms_not_aupported + ,procedure_cancelled + ,rRM_purpose + ,improve_user_bit_rate + ,user_inactivity + ,radio_connection_with_UE_lost + ,failure_in_the_radio_interface_procedure + ,bearer_option_not_supported + ,mCG_Mobility + ,sCG_Mobility + ,count_reaches_max_value + ,unknown_old_en_gNB_UE_X2AP_ID + ,pDCP_Overload + } index_t; + +}; + +/* +CauseTransport ::= ENUMERATED { + transport-resource-unavailable, + unspecified, + ... +} +*/ + +struct CauseTransport : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "CauseTransport";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + transport_resource_unavailable + ,unspecified + } index_t; + +}; + +/* +CauseProtocol ::= ENUMERATED { + transfer-syntax-error, + abstract-syntax-error-reject, + abstract-syntax-error-ignore-and-notify, + message-not-compatible-with-receiver-state, + semantic-error, + unspecified, + abstract-syntax-error-falsely-constructed-message, + ... +} +*/ + +struct CauseProtocol : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "CauseProtocol";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + transfer_syntax_error + ,abstract_syntax_error_reject + ,abstract_syntax_error_ignore_and_notify + ,message_not_compatible_with_receiver_state + ,semantic_error + ,unspecified + ,abstract_syntax_error_falsely_constructed_message + } index_t; + +}; + +/* +CauseMisc ::= ENUMERATED { + control-processing-overload, + hardware-failure, + om-intervention, + not-enough-user-plane-processing-resources, + unspecified, + ... +} +*/ + +struct CauseMisc : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "CauseMisc";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + control_processing_overload + ,hardware_failure + ,om_intervention + ,not_enough_user_plane_processing_resources + ,unspecified + } index_t; + +}; + +/* +Cause ::= CHOICE { + radioNetwork CauseRadioNetwork, + transport CauseTransport, + protocol CauseProtocol, + misc CauseMisc, + ... +} +*/ + +struct Cause : asn::choice<4, 0, true> +{ + static constexpr const char* name() {return "Cause";} + using parent_t = asn::choice<4, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~Cause() {clear();} + struct radioNetwork_t : CauseRadioNetwork + { + static constexpr const char* name() {return "radioNetwork_t";} + using parent_t = CauseRadioNetwork; + + }; + struct transport_t : CauseTransport + { + static constexpr const char* name() {return "transport_t";} + using parent_t = CauseTransport; + + }; + struct protocol_t : CauseProtocol + { + static constexpr const char* name() {return "protocol_t";} + using parent_t = CauseProtocol; + + }; + struct misc_t : CauseMisc + { + static constexpr const char* name() {return "misc_t";} + using parent_t = CauseMisc; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: 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()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); 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()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + radioNetwork_t& select_radioNetwork() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + radioNetwork_t const* get_radioNetwork() const { if(get_index() == 1) { return &var.as();} return nullptr; } + transport_t& select_transport() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + transport_t const* get_transport() const { if(get_index() == 2) { return &var.as();} return nullptr; } + protocol_t& select_protocol() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + protocol_t const* get_protocol() const { if(get_index() == 3) { return &var.as();} return nullptr; } + misc_t& select_misc() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + misc_t const* get_misc() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(radioNetwork_t)]; + char dummy2[sizeof(transport_t)]; + char dummy3[sizeof(protocol_t)]; + char dummy4[sizeof(misc_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Cell-Size ::= ENUMERATED {verysmall, small, medium, large, ... } +*/ + +struct Cell_Size : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "Cell-Size";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + verysmall + ,small + ,medium + ,large + } index_t; + +}; + +/* +CellCapacityClassValue ::= INTEGER (1..100, ...) +*/ + +struct CellCapacityClassValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "CellCapacityClassValue";} + using parent_t = asn::integer<>; + +}; + +/* +CellDeploymentStatusIndicator ::= ENUMERATED {pre-change-notification, ...} +*/ + +struct CellDeploymentStatusIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "CellDeploymentStatusIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + pre_change_notification + } index_t; + +}; + +/* +ReplacingCellsList-Item ::= SEQUENCE { + eCGI ECGI, + ... +} +*/ + +struct ReplacingCellsList_Item : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "ReplacingCellsList-Item";} + using parent_t = asn::sequence<1, 0, true, 0>; + 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;} + template void decode(V& v) + { + v(eCGI); + + }; + template void encode(V& v) const + { + v(eCGI); + + }; + void clear() + { + eCGI.clear(); + + }; + private: + eCGI_t eCGI; + +}; +/* +ReplacingCellsList ::= SEQUENCE (SIZE(0.. maxCellineNB)) OF ReplacingCellsList-Item +*/ + +struct ReplacingCellsList_elm : ReplacingCellsList_Item +{ + static constexpr const char* name() {return "ReplacingCellsList_elm";} + using parent_t = ReplacingCellsList_Item; + +}; +struct ReplacingCellsList : asn::sequenceof +{ + static constexpr const char* name() {return "ReplacingCellsList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CellReplacingInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellReplacingInfo_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}; + + }; + +}; +/* +CellReplacingInfo ::= SEQUENCE { + replacingCellsList ReplacingCellsList, + iE-Extensions ProtocolExtensionContainer { {CellReplacingInfo-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct CellReplacingInfo : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellReplacingInfo";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct replacingCellsList_t : ReplacingCellsList + { + static constexpr const char* name() {return "replacingCellsList_t";} + using parent_t = ReplacingCellsList; + + }; + replacingCellsList_t& ref_replacingCellsList() {return replacingCellsList;} + replacingCellsList_t const& ref_replacingCellsList() const {return replacingCellsList;} + 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(replacingCellsList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(replacingCellsList); + v(iE_Extensions); + + }; + void clear() + { + replacingCellsList.clear(); + iE_Extensions.clear(); + + }; + private: + replacingCellsList_t replacingCellsList; + iE_Extensions_t iE_Extensions; + +}; +/* +CellReportingIndicator ::= ENUMERATED {stop-request, ... } +*/ + +struct CellReportingIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "CellReportingIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + stop_request + } index_t; + +}; + +/* +CellType-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CellType_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}; + + }; + +}; +/* +CellType ::= SEQUENCE { + cell-Size Cell-Size, + iE-Extensions ProtocolExtensionContainer { {CellType-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct CellType : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "CellType";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct cell_Size_t : Cell_Size + { + static constexpr const char* name() {return "cell_Size_t";} + using parent_t = Cell_Size; + + }; + cell_Size_t& ref_cell_Size() {return cell_Size;} + cell_Size_t const& ref_cell_Size() const {return cell_Size;} + 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_Size); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cell_Size); + v(iE_Extensions); + + }; + void clear() + { + cell_Size.clear(); + iE_Extensions.clear(); + + }; + private: + cell_Size_t cell_Size; + iE_Extensions_t iE_Extensions; + +}; +/* +CoMPHypothesisSetItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPHypothesisSetItem_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}; + + }; + +}; +/* +CoMPHypothesisSetItem ::= SEQUENCE { + coMPCellID ECGI, + coMPHypothesis BIT STRING (SIZE(6..4400, ...)), + iE-Extensions ProtocolExtensionContainer { {CoMPHypothesisSetItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CoMPHypothesisSetItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPHypothesisSetItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPCellID_t : ECGI + { + static constexpr const char* name() {return "coMPCellID_t";} + using parent_t = ECGI; + + }; + coMPCellID_t& ref_coMPCellID() {return coMPCellID;} + coMPCellID_t const& ref_coMPCellID() const {return coMPCellID;} + struct coMPHypothesis_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "coMPHypothesis_t";} + using parent_t = asn::bstring<>; + + }; + + coMPHypothesis_t& ref_coMPHypothesis() {return coMPHypothesis;} + coMPHypothesis_t const& ref_coMPHypothesis() const {return coMPHypothesis;} + 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(coMPCellID); + v(coMPHypothesis); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPCellID); + v(coMPHypothesis); + v(iE_Extensions); + + }; + void clear() + { + coMPCellID.clear(); + coMPHypothesis.clear(); + iE_Extensions.clear(); + + }; + private: + coMPCellID_t coMPCellID; + coMPHypothesis_t coMPHypothesis; + iE_Extensions_t iE_Extensions; + +}; +/* +CoMPHypothesisSet ::= SEQUENCE (SIZE(1..maxnoofCoMPCells)) OF CoMPHypothesisSetItem +*/ + +struct CoMPHypothesisSet_elm : CoMPHypothesisSetItem +{ + static constexpr const char* name() {return "CoMPHypothesisSet_elm";} + using parent_t = CoMPHypothesisSetItem; + +}; +struct CoMPHypothesisSet : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPHypothesisSet";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformationItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformationItem_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}; + + }; + +}; +/* +CoMPInformationItem ::= SEQUENCE (SIZE(1..maxnoofCoMPHypothesisSet)) OF + SEQUENCE { + coMPHypothesisSet CoMPHypothesisSet, + benefitMetric BenefitMetric, + iE-Extensions ProtocolExtensionContainer { {CoMPInformationItem-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CoMPInformationItem_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformationItem_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPHypothesisSet_t : CoMPHypothesisSet + { + static constexpr const char* name() {return "coMPHypothesisSet_t";} + using parent_t = CoMPHypothesisSet; + + }; + coMPHypothesisSet_t& ref_coMPHypothesisSet() {return coMPHypothesisSet;} + coMPHypothesisSet_t const& ref_coMPHypothesisSet() const {return coMPHypothesisSet;} + struct benefitMetric_t : BenefitMetric + { + static constexpr const char* name() {return "benefitMetric_t";} + using parent_t = BenefitMetric; + + }; + benefitMetric_t& ref_benefitMetric() {return benefitMetric;} + benefitMetric_t const& ref_benefitMetric() const {return benefitMetric;} + 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(coMPHypothesisSet); + v(benefitMetric); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPHypothesisSet); + v(benefitMetric); + v(iE_Extensions); + + }; + void clear() + { + coMPHypothesisSet.clear(); + benefitMetric.clear(); + iE_Extensions.clear(); + + }; + private: + coMPHypothesisSet_t coMPHypothesisSet; + benefitMetric_t benefitMetric; + iE_Extensions_t iE_Extensions; + +}; +struct CoMPInformationItem : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPInformationItem";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformationStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformationStartTime_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}; + + }; + +}; +/* +CoMPInformationStartTime ::= SEQUENCE (SIZE(0..1)) OF + SEQUENCE { + startSFN INTEGER (0..1023, ...), + startSubframeNumber INTEGER (0..9, ...), + iE-Extensions ProtocolExtensionContainer { {CoMPInformationStartTime-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct CoMPInformationStartTime_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformationStartTime_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct startSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSFN_t";} + using parent_t = asn::integer<>; + + }; + + startSFN_t& ref_startSFN() {return startSFN;} + startSFN_t const& ref_startSFN() const {return startSFN;} + struct startSubframeNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSubframeNumber_t";} + using parent_t = asn::integer<>; + + }; + + startSubframeNumber_t& ref_startSubframeNumber() {return startSubframeNumber;} + startSubframeNumber_t const& ref_startSubframeNumber() const {return startSubframeNumber;} + 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(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + void clear() + { + startSFN.clear(); + startSubframeNumber.clear(); + iE_Extensions.clear(); + + }; + private: + startSFN_t startSFN; + startSubframeNumber_t startSubframeNumber; + iE_Extensions_t iE_Extensions; + +}; +struct CoMPInformationStartTime : asn::sequenceof +{ + static constexpr const char* name() {return "CoMPInformationStartTime";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CoMPInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CoMPInformation_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}; + + }; + +}; +/* +CoMPInformation ::= SEQUENCE { + coMPInformationItem CoMPInformationItem, + coMPInformationStartTime CoMPInformationStartTime, + iE-Extensions ProtocolExtensionContainer { {CoMPInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CoMPInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CoMPInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct coMPInformationItem_t : CoMPInformationItem + { + static constexpr const char* name() {return "coMPInformationItem_t";} + using parent_t = CoMPInformationItem; + + }; + coMPInformationItem_t& ref_coMPInformationItem() {return coMPInformationItem;} + coMPInformationItem_t const& ref_coMPInformationItem() const {return coMPInformationItem;} + struct coMPInformationStartTime_t : CoMPInformationStartTime + { + static constexpr const char* name() {return "coMPInformationStartTime_t";} + using parent_t = CoMPInformationStartTime; + + }; + coMPInformationStartTime_t& ref_coMPInformationStartTime() {return coMPInformationStartTime;} + coMPInformationStartTime_t const& ref_coMPInformationStartTime() const {return coMPInformationStartTime;} + 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(coMPInformationItem); + v(coMPInformationStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(coMPInformationItem); + v(coMPInformationStartTime); + v(iE_Extensions); + + }; + void clear() + { + coMPInformationItem.clear(); + coMPInformationStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + coMPInformationItem_t coMPInformationItem; + coMPInformationStartTime_t coMPInformationStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +CompositeAvailableCapacity-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompositeAvailableCapacity_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}; + + }; + +}; +/* +CompositeAvailableCapacity ::= SEQUENCE { + cellCapacityClassValue CellCapacityClassValue OPTIONAL, + capacityValue CapacityValue, + iE-Extensions ProtocolExtensionContainer { {CompositeAvailableCapacity-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompositeAvailableCapacity : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "CompositeAvailableCapacity";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct cellCapacityClassValue_t : CellCapacityClassValue + { + static constexpr const char* name() {return "cellCapacityClassValue_t";} + using parent_t = CellCapacityClassValue; + static constexpr bool optional = true; + + }; + cellCapacityClassValue_t& set_cellCapacityClassValue() { cellCapacityClassValue.setpresent(true); return cellCapacityClassValue;} + cellCapacityClassValue_t const* get_cellCapacityClassValue() const {return cellCapacityClassValue.is_valid() ? &cellCapacityClassValue : nullptr;} + struct capacityValue_t : CapacityValue + { + static constexpr const char* name() {return "capacityValue_t";} + using parent_t = CapacityValue; + + }; + capacityValue_t& ref_capacityValue() {return capacityValue;} + capacityValue_t const& ref_capacityValue() const {return capacityValue;} + 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(cellCapacityClassValue); + v(capacityValue); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(cellCapacityClassValue); + v(capacityValue); + v(iE_Extensions); + + }; + void clear() + { + cellCapacityClassValue.clear(); + capacityValue.clear(); + iE_Extensions.clear(); + + }; + private: + cellCapacityClassValue_t cellCapacityClassValue; + capacityValue_t capacityValue; + iE_Extensions_t iE_Extensions; + +}; +/* +CompositeAvailableCapacityGroup-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CompositeAvailableCapacityGroup_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}; + + }; + +}; +/* +CompositeAvailableCapacityGroup ::= SEQUENCE { + dL-CompositeAvailableCapacity CompositeAvailableCapacity, + uL-CompositeAvailableCapacity CompositeAvailableCapacity, + iE-Extensions ProtocolExtensionContainer { {CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CompositeAvailableCapacityGroup : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "CompositeAvailableCapacityGroup";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dL_CompositeAvailableCapacity_t : CompositeAvailableCapacity + { + static constexpr const char* name() {return "dL_CompositeAvailableCapacity_t";} + using parent_t = CompositeAvailableCapacity; + + }; + dL_CompositeAvailableCapacity_t& ref_dL_CompositeAvailableCapacity() {return dL_CompositeAvailableCapacity;} + dL_CompositeAvailableCapacity_t const& ref_dL_CompositeAvailableCapacity() const {return dL_CompositeAvailableCapacity;} + struct uL_CompositeAvailableCapacity_t : CompositeAvailableCapacity + { + static constexpr const char* name() {return "uL_CompositeAvailableCapacity_t";} + using parent_t = CompositeAvailableCapacity; + + }; + uL_CompositeAvailableCapacity_t& ref_uL_CompositeAvailableCapacity() {return uL_CompositeAvailableCapacity;} + uL_CompositeAvailableCapacity_t const& ref_uL_CompositeAvailableCapacity() const {return uL_CompositeAvailableCapacity;} + 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_CompositeAvailableCapacity); + v(uL_CompositeAvailableCapacity); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_CompositeAvailableCapacity); + v(uL_CompositeAvailableCapacity); + v(iE_Extensions); + + }; + void clear() + { + dL_CompositeAvailableCapacity.clear(); + uL_CompositeAvailableCapacity.clear(); + iE_Extensions.clear(); + + }; + private: + dL_CompositeAvailableCapacity_t dL_CompositeAvailableCapacity; + uL_CompositeAvailableCapacity_t uL_CompositeAvailableCapacity; + iE_Extensions_t iE_Extensions; + +}; +/* +Correlation-ID ::= OCTET STRING (SIZE (4)) +*/ + +struct Correlation_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Correlation-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +CoverageModification-Item ::= SEQUENCE { + eCGI ECGI, + coverageState INTEGER (0..15, ...), + cellDeploymentStatusIndicator CellDeploymentStatusIndicator OPTIONAL, + cellReplacingInfo CellReplacingInfo OPTIONAL, +-- Included in case the Cell Deployment Status Indicator IE is present + ... +} +*/ + +struct CoverageModification_Item : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "CoverageModification-Item";} + using parent_t = asn::sequence<4, 0, true, 2>; + 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 coverageState_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "coverageState_t";} + using parent_t = asn::integer<>; + + }; + + coverageState_t& ref_coverageState() {return coverageState;} + coverageState_t const& ref_coverageState() const {return coverageState;} + struct cellDeploymentStatusIndicator_t : CellDeploymentStatusIndicator + { + static constexpr const char* name() {return "cellDeploymentStatusIndicator_t";} + using parent_t = CellDeploymentStatusIndicator; + static constexpr bool optional = true; + + }; + cellDeploymentStatusIndicator_t& set_cellDeploymentStatusIndicator() { cellDeploymentStatusIndicator.setpresent(true); return cellDeploymentStatusIndicator;} + cellDeploymentStatusIndicator_t const* get_cellDeploymentStatusIndicator() const {return cellDeploymentStatusIndicator.is_valid() ? &cellDeploymentStatusIndicator : nullptr;} + struct cellReplacingInfo_t : CellReplacingInfo + { + static constexpr const char* name() {return "cellReplacingInfo_t";} + using parent_t = CellReplacingInfo; + static constexpr bool optional = true; + + }; + cellReplacingInfo_t& set_cellReplacingInfo() { cellReplacingInfo.setpresent(true); return cellReplacingInfo;} + cellReplacingInfo_t const* get_cellReplacingInfo() const {return cellReplacingInfo.is_valid() ? &cellReplacingInfo : nullptr;} + template void decode(V& v) + { + v(eCGI); + v(coverageState); + v(cellDeploymentStatusIndicator); + v(cellReplacingInfo); + + }; + template void encode(V& v) const + { + v(eCGI); + v(coverageState); + v(cellDeploymentStatusIndicator); + v(cellReplacingInfo); + + }; + void clear() + { + eCGI.clear(); + coverageState.clear(); + cellDeploymentStatusIndicator.clear(); + cellReplacingInfo.clear(); + + }; + private: + eCGI_t eCGI; + coverageState_t coverageState; + cellDeploymentStatusIndicator_t cellDeploymentStatusIndicator; + cellReplacingInfo_t cellReplacingInfo; + +}; +/* +CoverageModificationList ::= SEQUENCE (SIZE (1..maxCellineNB)) OF CoverageModification-Item +*/ + +struct CoverageModificationList_elm : CoverageModification_Item +{ + static constexpr const char* name() {return "CoverageModificationList_elm";} + using parent_t = CoverageModification_Item; + +}; +struct CoverageModificationList : asn::sequenceof +{ + static constexpr const char* name() {return "CoverageModificationList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +TypeOfError ::= ENUMERATED { + not-understood, + missing, + ... +} +*/ + +struct TypeOfError : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "TypeOfError";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + not_understood + ,missing + } index_t; + +}; + +/* +CriticalityDiagnostics-IE-List-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CriticalityDiagnostics_IE_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}; + + }; + +}; +/* +CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF + SEQUENCE { + iECriticality Criticality, + iE-ID ProtocolIE-ID, + typeOfError TypeOfError, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CriticalityDiagnostics_IE_List_elm : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "CriticalityDiagnostics_IE_List_elm";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct iECriticality_t : Criticality + { + static constexpr const char* name() {return "iECriticality_t";} + using parent_t = Criticality; + + }; + iECriticality_t& ref_iECriticality() {return iECriticality;} + iECriticality_t const& ref_iECriticality() const {return iECriticality;} + struct iE_ID_t : ProtocolIE_ID + { + static constexpr const char* name() {return "iE_ID_t";} + using parent_t = ProtocolIE_ID; + + }; + iE_ID_t& ref_iE_ID() {return iE_ID;} + iE_ID_t const& ref_iE_ID() const {return iE_ID;} + struct typeOfError_t : TypeOfError + { + static constexpr const char* name() {return "typeOfError_t";} + using parent_t = TypeOfError; + + }; + typeOfError_t& ref_typeOfError() {return typeOfError;} + typeOfError_t const& ref_typeOfError() const {return typeOfError;} + 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(iECriticality); + v(iE_ID); + v(typeOfError); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(iECriticality); + v(iE_ID); + v(typeOfError); + v(iE_Extensions); + + }; + void clear() + { + iECriticality.clear(); + iE_ID.clear(); + typeOfError.clear(); + iE_Extensions.clear(); + + }; + private: + iECriticality_t iECriticality; + iE_ID_t iE_ID; + typeOfError_t typeOfError; + iE_Extensions_t iE_Extensions; + +}; +struct CriticalityDiagnostics_IE_List : asn::sequenceof +{ + static constexpr const char* name() {return "CriticalityDiagnostics-IE-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +CriticalityDiagnostics-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct CriticalityDiagnostics_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}; + + }; + +}; +/* +CriticalityDiagnostics ::= SEQUENCE { + procedureCode ProcedureCode OPTIONAL, + triggeringMessage TriggeringMessage OPTIONAL, + procedureCriticality Criticality OPTIONAL, + iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct CriticalityDiagnostics : asn::sequence<5, 0, true, 5> +{ + static constexpr const char* name() {return "CriticalityDiagnostics";} + using parent_t = asn::sequence<5, 0, true, 5>; + struct procedureCode_t : ProcedureCode + { + static constexpr const char* name() {return "procedureCode_t";} + using parent_t = ProcedureCode; + static constexpr bool optional = true; + + }; + procedureCode_t& set_procedureCode() { procedureCode.setpresent(true); return procedureCode;} + procedureCode_t const* get_procedureCode() const {return procedureCode.is_valid() ? &procedureCode : nullptr;} + struct triggeringMessage_t : TriggeringMessage + { + static constexpr const char* name() {return "triggeringMessage_t";} + using parent_t = TriggeringMessage; + static constexpr bool optional = true; + + }; + triggeringMessage_t& set_triggeringMessage() { triggeringMessage.setpresent(true); return triggeringMessage;} + triggeringMessage_t const* get_triggeringMessage() const {return triggeringMessage.is_valid() ? &triggeringMessage : nullptr;} + struct procedureCriticality_t : Criticality + { + static constexpr const char* name() {return "procedureCriticality_t";} + using parent_t = Criticality; + static constexpr bool optional = true; + + }; + procedureCriticality_t& set_procedureCriticality() { procedureCriticality.setpresent(true); return procedureCriticality;} + procedureCriticality_t const* get_procedureCriticality() const {return procedureCriticality.is_valid() ? &procedureCriticality : nullptr;} + struct iEsCriticalityDiagnostics_t : CriticalityDiagnostics_IE_List + { + static constexpr const char* name() {return "iEsCriticalityDiagnostics_t";} + using parent_t = CriticalityDiagnostics_IE_List; + static constexpr bool optional = true; + + }; + iEsCriticalityDiagnostics_t& set_iEsCriticalityDiagnostics() { iEsCriticalityDiagnostics.setpresent(true); return iEsCriticalityDiagnostics;} + iEsCriticalityDiagnostics_t const* get_iEsCriticalityDiagnostics() const {return iEsCriticalityDiagnostics.is_valid() ? &iEsCriticalityDiagnostics : 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(procedureCode); + v(triggeringMessage); + v(procedureCriticality); + v(iEsCriticalityDiagnostics); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(procedureCode); + v(triggeringMessage); + v(procedureCriticality); + v(iEsCriticalityDiagnostics); + v(iE_Extensions); + + }; + void clear() + { + procedureCode.clear(); + triggeringMessage.clear(); + procedureCriticality.clear(); + iEsCriticalityDiagnostics.clear(); + iE_Extensions.clear(); + + }; + private: + procedureCode_t procedureCode; + triggeringMessage_t triggeringMessage; + procedureCriticality_t procedureCriticality; + iEsCriticalityDiagnostics_t iEsCriticalityDiagnostics; + iE_Extensions_t iE_Extensions; + +}; +/* +DL-Forwarding ::= ENUMERATED { + dL-forwardingProposed, + ... +} +*/ + +struct DL_Forwarding : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "DL-Forwarding";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + dL_forwardingProposed + } index_t; + +}; + +/* +DL-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-Total-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_Total_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-Total-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-non-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct DL_non_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-non-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DL-scheduling-PDCCH-CCE-usage::= INTEGER (0..100) +*/ + +struct DL_scheduling_PDCCH_CCE_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DL-scheduling-PDCCH-CCE-usage";} + using parent_t = asn::integer<>; + +}; + +/* +DataTrafficResources ::= BIT STRING (SIZE(6..17600)) +*/ + +struct DataTrafficResources : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DataTrafficResources";} + using parent_t = asn::bstring<>; + +}; + +/* +DLResourceBitmapULandDLSharing ::= DataTrafficResources +*/ + +struct DLResourceBitmapULandDLSharing : DataTrafficResources +{ + static constexpr const char* name() {return "DLResourceBitmapULandDLSharing";} + using parent_t = DataTrafficResources; + +}; +/* +DLResourcesULandDLSharing ::= CHOICE { +unchanged NULL, + changed DLResourceBitmapULandDLSharing, + ... +} +*/ + +struct DLResourcesULandDLSharing : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "DLResourcesULandDLSharing";} + 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); } + ~DLResourcesULandDLSharing() {clear();} + struct unchanged_t : asn::nulltype + { + static constexpr const char* name() {return "unchanged_t";} + using parent_t = asn::nulltype; + + }; + struct changed_t : DLResourceBitmapULandDLSharing + { + static constexpr const char* name() {return "changed_t";} + using parent_t = DLResourceBitmapULandDLSharing; + + }; + 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); + + } + unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as();} return nullptr; } + changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + changed_t const* get_changed() 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(unchanged_t)]; + char dummy2[sizeof(changed_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +DRB-ID ::= INTEGER (1..32) +*/ + +struct DRB_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "DRB-ID";} + using parent_t = asn::integer<>; + +}; + +/* +ULOnlySharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULOnlySharing_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}; + + }; + +}; +/* +ULOnlySharing ::= SEQUENCE{ + uLResourceBitmapULOnlySharing DataTrafficResources, + iE-Extensions ProtocolExtensionContainer { {ULOnlySharing-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULOnlySharing : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ULOnlySharing";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uLResourceBitmapULOnlySharing_t : DataTrafficResources + { + static constexpr const char* name() {return "uLResourceBitmapULOnlySharing_t";} + using parent_t = DataTrafficResources; + + }; + uLResourceBitmapULOnlySharing_t& ref_uLResourceBitmapULOnlySharing() {return uLResourceBitmapULOnlySharing;} + uLResourceBitmapULOnlySharing_t const& ref_uLResourceBitmapULOnlySharing() const {return uLResourceBitmapULOnlySharing;} + 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(uLResourceBitmapULOnlySharing); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uLResourceBitmapULOnlySharing); + v(iE_Extensions); + + }; + void clear() + { + uLResourceBitmapULOnlySharing.clear(); + iE_Extensions.clear(); + + }; + private: + uLResourceBitmapULOnlySharing_t uLResourceBitmapULOnlySharing; + iE_Extensions_t iE_Extensions; + +}; +/* +ULResourceBitmapULandDLSharing ::= DataTrafficResources +*/ + +struct ULResourceBitmapULandDLSharing : DataTrafficResources +{ + static constexpr const char* name() {return "ULResourceBitmapULandDLSharing";} + using parent_t = DataTrafficResources; + +}; +/* +ULResourcesULandDLSharing ::= CHOICE { + unchanged NULL, + changed ULResourceBitmapULandDLSharing, + ... +} +*/ + +struct ULResourcesULandDLSharing : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ULResourcesULandDLSharing";} + 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); } + ~ULResourcesULandDLSharing() {clear();} + struct unchanged_t : asn::nulltype + { + static constexpr const char* name() {return "unchanged_t";} + using parent_t = asn::nulltype; + + }; + struct changed_t : ULResourceBitmapULandDLSharing + { + static constexpr const char* name() {return "changed_t";} + using parent_t = ULResourceBitmapULandDLSharing; + + }; + 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); + + } + unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as();} return nullptr; } + changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + changed_t const* get_changed() 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(unchanged_t)]; + char dummy2[sizeof(changed_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +ULandDLSharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULandDLSharing_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}; + + }; + +}; +/* +ULandDLSharing ::= SEQUENCE{ + uLResourcesULandDLSharing ULResourcesULandDLSharing, + dLResourcesULandDLSharing DLResourcesULandDLSharing, + iE-Extensions ProtocolExtensionContainer { {ULandDLSharing-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULandDLSharing : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ULandDLSharing";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uLResourcesULandDLSharing_t : ULResourcesULandDLSharing + { + static constexpr const char* name() {return "uLResourcesULandDLSharing_t";} + using parent_t = ULResourcesULandDLSharing; + + }; + uLResourcesULandDLSharing_t& ref_uLResourcesULandDLSharing() {return uLResourcesULandDLSharing;} + uLResourcesULandDLSharing_t const& ref_uLResourcesULandDLSharing() const {return uLResourcesULandDLSharing;} + struct dLResourcesULandDLSharing_t : DLResourcesULandDLSharing + { + static constexpr const char* name() {return "dLResourcesULandDLSharing_t";} + using parent_t = DLResourcesULandDLSharing; + + }; + dLResourcesULandDLSharing_t& ref_dLResourcesULandDLSharing() {return dLResourcesULandDLSharing;} + dLResourcesULandDLSharing_t const& ref_dLResourcesULandDLSharing() const {return dLResourcesULandDLSharing;} + 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(uLResourcesULandDLSharing); + v(dLResourcesULandDLSharing); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uLResourcesULandDLSharing); + v(dLResourcesULandDLSharing); + v(iE_Extensions); + + }; + void clear() + { + uLResourcesULandDLSharing.clear(); + dLResourcesULandDLSharing.clear(); + iE_Extensions.clear(); + + }; + private: + uLResourcesULandDLSharing_t uLResourcesULandDLSharing; + dLResourcesULandDLSharing_t dLResourcesULandDLSharing; + iE_Extensions_t iE_Extensions; + +}; +/* +SharedResourceType ::= CHOICE{ + uLOnlySharing ULOnlySharing, + uLandDLSharing ULandDLSharing, + ... +} +*/ + +struct SharedResourceType : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "SharedResourceType";} + 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); } + ~SharedResourceType() {clear();} + struct uLOnlySharing_t : ULOnlySharing + { + static constexpr const char* name() {return "uLOnlySharing_t";} + using parent_t = ULOnlySharing; + + }; + struct uLandDLSharing_t : ULandDLSharing + { + static constexpr const char* name() {return "uLandDLSharing_t";} + using parent_t = ULandDLSharing; + + }; + 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); + + } + uLOnlySharing_t& select_uLOnlySharing() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + uLOnlySharing_t const* get_uLOnlySharing() const { if(get_index() == 1) { return &var.as();} return nullptr; } + uLandDLSharing_t& select_uLandDLSharing() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + uLandDLSharing_t const* get_uLandDLSharing() 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(uLOnlySharing_t)]; + char dummy2[sizeof(uLandDLSharing_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +SubframeType ::= ENUMERATED{mbsfn,nonmbsfn,...} +*/ + +struct SubframeType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SubframeType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + mbsfn + ,nonmbsfn + } index_t; + +}; + +/* +ReservedSubframePattern-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ReservedSubframePattern_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}; + + }; + +}; +/* +ReservedSubframePattern ::= SEQUENCE{ + subframeType SubframeType, + reservedSubframePattern BIT STRING (SIZE(10..160)), + mBSFNControlRegionLength INTEGER (0..3), + iE-Extensions ProtocolExtensionContainer { {ReservedSubframePattern-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ReservedSubframePattern : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "ReservedSubframePattern";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct subframeType_t : SubframeType + { + static constexpr const char* name() {return "subframeType_t";} + using parent_t = SubframeType; + + }; + subframeType_t& ref_subframeType() {return subframeType;} + subframeType_t const& ref_subframeType() const {return subframeType;} + struct reservedSubframePattern_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "reservedSubframePattern_t";} + using parent_t = asn::bstring<>; + + }; + + reservedSubframePattern_t& ref_reservedSubframePattern() {return reservedSubframePattern;} + reservedSubframePattern_t const& ref_reservedSubframePattern() const {return reservedSubframePattern;} + struct mBSFNControlRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "mBSFNControlRegionLength_t";} + using parent_t = asn::integer<>; + + }; + + mBSFNControlRegionLength_t& ref_mBSFNControlRegionLength() {return mBSFNControlRegionLength;} + mBSFNControlRegionLength_t const& ref_mBSFNControlRegionLength() const {return mBSFNControlRegionLength;} + 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(subframeType); + v(reservedSubframePattern); + v(mBSFNControlRegionLength); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(subframeType); + v(reservedSubframePattern); + v(mBSFNControlRegionLength); + v(iE_Extensions); + + }; + void clear() + { + subframeType.clear(); + reservedSubframePattern.clear(); + mBSFNControlRegionLength.clear(); + iE_Extensions.clear(); + + }; + private: + subframeType_t subframeType; + reservedSubframePattern_t reservedSubframePattern; + mBSFNControlRegionLength_t mBSFNControlRegionLength; + iE_Extensions_t iE_Extensions; + +}; +/* +DataTrafficResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DataTrafficResourceIndication_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}; + + }; + +}; +/* +DataTrafficResourceIndication ::= SEQUENCE { + activationSFN INTEGER (0..1023), + sharedResourceType SharedResourceType, + reservedSubframePattern ReservedSubframePattern OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {DataTrafficResourceIndication-ExtIEs} } OPTIONAL, +... +} +*/ + +struct DataTrafficResourceIndication : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "DataTrafficResourceIndication";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct activationSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "activationSFN_t";} + using parent_t = asn::integer<>; + + }; + + activationSFN_t& ref_activationSFN() {return activationSFN;} + activationSFN_t const& ref_activationSFN() const {return activationSFN;} + struct sharedResourceType_t : SharedResourceType + { + static constexpr const char* name() {return "sharedResourceType_t";} + using parent_t = SharedResourceType; + + }; + sharedResourceType_t& ref_sharedResourceType() {return sharedResourceType;} + sharedResourceType_t const& ref_sharedResourceType() const {return sharedResourceType;} + struct reservedSubframePattern_t : ReservedSubframePattern + { + static constexpr const char* name() {return "reservedSubframePattern_t";} + using parent_t = ReservedSubframePattern; + static constexpr bool optional = true; + + }; + reservedSubframePattern_t& set_reservedSubframePattern() { reservedSubframePattern.setpresent(true); return reservedSubframePattern;} + reservedSubframePattern_t const* get_reservedSubframePattern() const {return reservedSubframePattern.is_valid() ? &reservedSubframePattern : 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(activationSFN); + v(sharedResourceType); + v(reservedSubframePattern); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(activationSFN); + v(sharedResourceType); + v(reservedSubframePattern); + v(iE_Extensions); + + }; + void clear() + { + activationSFN.clear(); + sharedResourceType.clear(); + reservedSubframePattern.clear(); + iE_Extensions.clear(); + + }; + private: + activationSFN_t activationSFN; + sharedResourceType_t sharedResourceType; + reservedSubframePattern_t reservedSubframePattern; + iE_Extensions_t iE_Extensions; + +}; +/* +DeactivationIndication::= ENUMERATED { + deactivated, + ... +} +*/ + +struct DeactivationIndication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "DeactivationIndication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + deactivated + } index_t; + +}; + +/* +DeliveryStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DeliveryStatus_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}; + + }; + +}; +/* +DeliveryStatus ::= SEQUENCE { + highestSuccessDeliveredPDCPSN INTEGER (0..4095), + iE-Extensions ProtocolExtensionContainer { {DeliveryStatus-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct DeliveryStatus : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "DeliveryStatus";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct highestSuccessDeliveredPDCPSN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "highestSuccessDeliveredPDCPSN_t";} + using parent_t = asn::integer<>; + + }; + + highestSuccessDeliveredPDCPSN_t& ref_highestSuccessDeliveredPDCPSN() {return highestSuccessDeliveredPDCPSN;} + highestSuccessDeliveredPDCPSN_t const& ref_highestSuccessDeliveredPDCPSN() const {return highestSuccessDeliveredPDCPSN;} + 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(highestSuccessDeliveredPDCPSN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(highestSuccessDeliveredPDCPSN); + v(iE_Extensions); + + }; + void clear() + { + highestSuccessDeliveredPDCPSN.clear(); + iE_Extensions.clear(); + + }; + private: + highestSuccessDeliveredPDCPSN_t highestSuccessDeliveredPDCPSN; + iE_Extensions_t iE_Extensions; + +}; +/* +DuplicationActivation::= ENUMERATED {active, inactive, ...} +*/ + +struct DuplicationActivation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "DuplicationActivation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + active + ,inactive + } index_t; + +}; + +/* +PA-Values ::= ENUMERATED { + dB-6, + dB-4dot77, + dB-3, + dB-1dot77, + dB0, + dB1, + dB2, + dB3, + ... +} +*/ + +struct PA_Values : asn::enumerated<8, 0, true> +{ + static constexpr const char* name() {return "PA-Values";} + using parent_t = asn::enumerated<8, 0, true>; + typedef enum { + dB_6 + ,dB_4dot77 + ,dB_3 + ,dB_1dot77 + ,dB0 + ,dB1 + ,dB2 + ,dB3 + } index_t; + +}; + +/* +DynamicNAICSInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct DynamicNAICSInformation_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}; + + }; + +}; +/* +DynamicNAICSInformation ::= SEQUENCE { + transmissionModes BIT STRING (SIZE(8)) OPTIONAL, + pB-information INTEGER(0..3) OPTIONAL, + pA-list SEQUENCE (SIZE(0..maxnoofPA)) OF PA-Values, + iE-Extensions ProtocolExtensionContainer { {DynamicNAICSInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct DynamicNAICSInformation : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "DynamicNAICSInformation";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct transmissionModes_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "transmissionModes_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + transmissionModes_t& set_transmissionModes() { transmissionModes.setpresent(true); return transmissionModes;} + transmissionModes_t const* get_transmissionModes() const {return transmissionModes.is_valid() ? &transmissionModes : nullptr;} + struct pB_information_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pB_information_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + pB_information_t& set_pB_information() { pB_information.setpresent(true); return pB_information;} + pB_information_t const* get_pB_information() const {return pB_information.is_valid() ? &pB_information : nullptr;} + struct pA_list_t_elm : PA_Values + { + static constexpr const char* name() {return "pA_list_t_elm";} + using parent_t = PA_Values; + + }; + struct pA_list_t : asn::sequenceof + { + static constexpr const char* name() {return "pA_list_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + pA_list_t& ref_pA_list() {return pA_list;} + pA_list_t const& ref_pA_list() const {return pA_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(transmissionModes); + v(pB_information); + v(pA_list); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transmissionModes); + v(pB_information); + v(pA_list); + v(iE_Extensions); + + }; + void clear() + { + transmissionModes.clear(); + pB_information.clear(); + pA_list.clear(); + iE_Extensions.clear(); + + }; + private: + transmissionModes_t transmissionModes; + pB_information_t pB_information; + pA_list_t pA_list; + iE_Extensions_t iE_Extensions; + +}; +/* +DynamicDLTransmissionInformation ::= CHOICE { + naics-active DynamicNAICSInformation, + naics-inactive NULL, + ... +} +*/ + +struct DynamicDLTransmissionInformation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "DynamicDLTransmissionInformation";} + 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); } + ~DynamicDLTransmissionInformation() {clear();} + struct naics_active_t : DynamicNAICSInformation + { + static constexpr const char* name() {return "naics_active_t";} + using parent_t = DynamicNAICSInformation; + + }; + struct naics_inactive_t : asn::nulltype + { + static constexpr const char* name() {return "naics_inactive_t";} + using parent_t = asn::nulltype; + + }; + 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); + + } + naics_active_t& select_naics_active() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + naics_active_t const* get_naics_active() const { if(get_index() == 1) { return &var.as();} return nullptr; } + naics_inactive_t& select_naics_inactive() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + naics_inactive_t const* get_naics_inactive() 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(naics_active_t)]; + char dummy2[sizeof(naics_inactive_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +E-RAB-ID ::= INTEGER (0..15, ...) +*/ + +struct E_RAB_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "E-RAB-ID";} + using parent_t = asn::integer<>; + +}; + +/* +E-RAB-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RAB_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-RAB-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + cause Cause, + iE-Extensions ProtocolExtensionContainer { {E-RAB-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RAB_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "E-RAB-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-RAB-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RAB-Item CRITICALITY ignore TYPE E-RAB-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RAB_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_RAB_Item() { set(id_E_RAB_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_RAB_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_RAB_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_RAB_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_RAB_Item& select_id_E_RAB_Item() { return set(1); } + E_RAB_Item const* get_id_E_RAB_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_RAB_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_RAB_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_RAB_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}; + + }; + +}; +/* +QCI ::= INTEGER (0..255) +*/ + +struct QCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "QCI";} + using parent_t = asn::integer<>; + +}; + +/* +ExtendedBitRate ::= INTEGER (10000000001..4000000000000,...) +*/ + +struct ExtendedBitRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ExtendedBitRate";} + using parent_t = asn::integer<>; + +}; + +/* +GBR-QosInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extension for maximum bitrate > 10Gbps -- + { ID id-extended-e-RAB-MaximumBitrateDL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-MaximumBitrateUL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-GuaranteedBitrateDL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-e-RAB-GuaranteedBitrateUL CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}, + ... +} +*/ + +struct GBR_QosInformation_ExtIEs +{ + 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_extended_e_RAB_MaximumBitrateDL() { set(id_extended_e_RAB_MaximumBitrateDL); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(id_extended_e_RAB_MaximumBitrateUL); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(id_extended_e_RAB_GuaranteedBitrateDL); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(id_extended_e_RAB_GuaranteedBitrateUL); type=4;} + 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_extended_e_RAB_MaximumBitrateDL)) { type = 1; return true; } + else if(equal(id_extended_e_RAB_MaximumBitrateUL)) { type = 2; return true; } + else if(equal(id_extended_e_RAB_GuaranteedBitrateDL)) { type = 3; return true; } + else if(equal(id_extended_e_RAB_GuaranteedBitrateUL)) { 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_extended_e_RAB_MaximumBitrateDL);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_extended_e_RAB_MaximumBitrateUL);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_extended_e_RAB_GuaranteedBitrateDL);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_extended_e_RAB_GuaranteedBitrateUL);} 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_extended_e_RAB_MaximumBitrateDL() { set(ignore); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(ignore); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(ignore); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(ignore); type=4;} + 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 { 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 Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateDL() { return set(1); } + ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateDL() const { return get(1); } + ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateUL() { return set(2); } + ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateUL() const { return get(2); } + ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateDL() { return set(3); } + ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateDL() const { return get(3); } + ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateUL() { return set(4); } + ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateUL() 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_extended_e_RAB_MaximumBitrateDL()); return true; + case 2: v(select_id_extended_e_RAB_MaximumBitrateUL()); return true; + case 3: v(select_id_extended_e_RAB_GuaranteedBitrateDL()); return true; + case 4: v(select_id_extended_e_RAB_GuaranteedBitrateUL()); 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(ExtendedBitRate)]; + + }; + 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_extended_e_RAB_MaximumBitrateDL() { set(optional); type=1;} + void select_id_extended_e_RAB_MaximumBitrateUL() { set(optional); type=2;} + void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(optional); type=3;} + void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(optional); type=4;} + 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 { 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}; + + }; + +}; +/* +GBR-QosInformation ::= SEQUENCE { + e-RAB-MaximumBitrateDL BitRate, + e-RAB-MaximumBitrateUL BitRate, + e-RAB-GuaranteedBitrateDL BitRate, + e-RAB-GuaranteedBitrateUL BitRate, + iE-Extensions ProtocolExtensionContainer { {GBR-QosInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GBR_QosInformation : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "GBR-QosInformation";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct e_RAB_MaximumBitrateDL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_MaximumBitrateDL_t";} + using parent_t = BitRate; + + }; + e_RAB_MaximumBitrateDL_t& ref_e_RAB_MaximumBitrateDL() {return e_RAB_MaximumBitrateDL;} + e_RAB_MaximumBitrateDL_t const& ref_e_RAB_MaximumBitrateDL() const {return e_RAB_MaximumBitrateDL;} + struct e_RAB_MaximumBitrateUL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_MaximumBitrateUL_t";} + using parent_t = BitRate; + + }; + e_RAB_MaximumBitrateUL_t& ref_e_RAB_MaximumBitrateUL() {return e_RAB_MaximumBitrateUL;} + e_RAB_MaximumBitrateUL_t const& ref_e_RAB_MaximumBitrateUL() const {return e_RAB_MaximumBitrateUL;} + struct e_RAB_GuaranteedBitrateDL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_GuaranteedBitrateDL_t";} + using parent_t = BitRate; + + }; + e_RAB_GuaranteedBitrateDL_t& ref_e_RAB_GuaranteedBitrateDL() {return e_RAB_GuaranteedBitrateDL;} + e_RAB_GuaranteedBitrateDL_t const& ref_e_RAB_GuaranteedBitrateDL() const {return e_RAB_GuaranteedBitrateDL;} + struct e_RAB_GuaranteedBitrateUL_t : BitRate + { + static constexpr const char* name() {return "e_RAB_GuaranteedBitrateUL_t";} + using parent_t = BitRate; + + }; + e_RAB_GuaranteedBitrateUL_t& ref_e_RAB_GuaranteedBitrateUL() {return e_RAB_GuaranteedBitrateUL;} + e_RAB_GuaranteedBitrateUL_t const& ref_e_RAB_GuaranteedBitrateUL() const {return e_RAB_GuaranteedBitrateUL;} + 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_MaximumBitrateDL); + v(e_RAB_MaximumBitrateUL); + v(e_RAB_GuaranteedBitrateDL); + v(e_RAB_GuaranteedBitrateUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_MaximumBitrateDL); + v(e_RAB_MaximumBitrateUL); + v(e_RAB_GuaranteedBitrateDL); + v(e_RAB_GuaranteedBitrateUL); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_MaximumBitrateDL.clear(); + e_RAB_MaximumBitrateUL.clear(); + e_RAB_GuaranteedBitrateDL.clear(); + e_RAB_GuaranteedBitrateUL.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_MaximumBitrateDL_t e_RAB_MaximumBitrateDL; + e_RAB_MaximumBitrateUL_t e_RAB_MaximumBitrateUL; + e_RAB_GuaranteedBitrateDL_t e_RAB_GuaranteedBitrateDL; + e_RAB_GuaranteedBitrateUL_t e_RAB_GuaranteedBitrateUL; + iE_Extensions_t iE_Extensions; + +}; +/* +Packet-LossRate ::= INTEGER(0..1000) +*/ + +struct Packet_LossRate : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Packet-LossRate";} + using parent_t = asn::integer<>; + +}; + +/* +E-RAB-Level-QoS-Parameters-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extended for introduction of downlink and uplink packet loss rate for enhanced Voice performance – + { ID id-DownlinkPacketLossRate CRITICALITY ignore EXTENSION Packet-LossRate PRESENCE optional}| + { ID id-UplinkPacketLossRate CRITICALITY ignore EXTENSION Packet-LossRate PRESENCE optional}, + ... +} +*/ + +struct E_RAB_Level_QoS_Parameters_ExtIEs +{ + 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_DownlinkPacketLossRate() { set(id_DownlinkPacketLossRate); type=1;} + void select_id_UplinkPacketLossRate() { set(id_UplinkPacketLossRate); 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_DownlinkPacketLossRate)) { type = 1; return true; } + else if(equal(id_UplinkPacketLossRate)) { 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_DownlinkPacketLossRate);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UplinkPacketLossRate);} 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_DownlinkPacketLossRate() { set(ignore); type=1;} + void select_id_UplinkPacketLossRate() { 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;} + Packet_LossRate& select_id_DownlinkPacketLossRate() { return set(1); } + Packet_LossRate const* get_id_DownlinkPacketLossRate() const { return get(1); } + Packet_LossRate& select_id_UplinkPacketLossRate() { return set(2); } + Packet_LossRate const* get_id_UplinkPacketLossRate() 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_DownlinkPacketLossRate()); return true; + case 2: v(select_id_UplinkPacketLossRate()); 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(Packet_LossRate)]; + + }; + 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_DownlinkPacketLossRate() { set(optional); type=1;} + void select_id_UplinkPacketLossRate() { 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-RAB-Level-QoS-Parameters ::= SEQUENCE { + qCI QCI, + allocationAndRetentionPriority AllocationAndRetentionPriority, + gbrQosInformation GBR-QosInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {E-RAB-Level-QoS-Parameters-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct E_RAB_Level_QoS_Parameters : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "E-RAB-Level-QoS-Parameters";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct qCI_t : QCI + { + static constexpr const char* name() {return "qCI_t";} + using parent_t = QCI; + + }; + qCI_t& ref_qCI() {return qCI;} + qCI_t const& ref_qCI() const {return qCI;} + struct allocationAndRetentionPriority_t : AllocationAndRetentionPriority + { + static constexpr const char* name() {return "allocationAndRetentionPriority_t";} + using parent_t = AllocationAndRetentionPriority; + + }; + allocationAndRetentionPriority_t& ref_allocationAndRetentionPriority() {return allocationAndRetentionPriority;} + allocationAndRetentionPriority_t const& ref_allocationAndRetentionPriority() const {return allocationAndRetentionPriority;} + struct gbrQosInformation_t : GBR_QosInformation + { + static constexpr const char* name() {return "gbrQosInformation_t";} + using parent_t = GBR_QosInformation; + static constexpr bool optional = true; + + }; + gbrQosInformation_t& set_gbrQosInformation() { gbrQosInformation.setpresent(true); return gbrQosInformation;} + gbrQosInformation_t const* get_gbrQosInformation() const {return gbrQosInformation.is_valid() ? &gbrQosInformation : 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(qCI); + v(allocationAndRetentionPriority); + v(gbrQosInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(qCI); + v(allocationAndRetentionPriority); + v(gbrQosInformation); + v(iE_Extensions); + + }; + void clear() + { + qCI.clear(); + allocationAndRetentionPriority.clear(); + gbrQosInformation.clear(); + iE_Extensions.clear(); + + }; + private: + qCI_t qCI; + allocationAndRetentionPriority_t allocationAndRetentionPriority; + gbrQosInformation_t gbrQosInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RAB-List ::= SEQUENCE (SIZE(1.. maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RAB-ItemIEs} } +*/ + +struct E_RAB_List_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RAB_List_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RAB_List : asn::sequenceof +{ + static constexpr const char* name() {return "E-RAB-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +E-RABUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct E_RABUsageReport_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-RABUsageReport-Item ::= SEQUENCE { + startTimeStamp OCTET STRING (SIZE(4)), + endTimeStamp OCTET STRING (SIZE(4)), + usageCountUL INTEGER (0..4294967295), + usageCountDL INTEGER (0..4294967295), + iE-Extensions ProtocolExtensionContainer { {E-RABUsageReport-Item-ExtIEs} } OPTIONAL, +... +} +*/ + +struct E_RABUsageReport_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "E-RABUsageReport-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct startTimeStamp_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startTimeStamp_t";} + using parent_t = asn::ostring<>; + + }; + + startTimeStamp_t& ref_startTimeStamp() {return startTimeStamp;} + startTimeStamp_t const& ref_startTimeStamp() const {return startTimeStamp;} + struct endTimeStamp_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "endTimeStamp_t";} + using parent_t = asn::ostring<>; + + }; + + endTimeStamp_t& ref_endTimeStamp() {return endTimeStamp;} + endTimeStamp_t const& ref_endTimeStamp() const {return endTimeStamp;} + struct usageCountUL_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usageCountUL_t";} + using parent_t = asn::integer<>; + + }; + + usageCountUL_t& ref_usageCountUL() {return usageCountUL;} + usageCountUL_t const& ref_usageCountUL() const {return usageCountUL;} + struct usageCountDL_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "usageCountDL_t";} + using parent_t = asn::integer<>; + + }; + + usageCountDL_t& ref_usageCountDL() {return usageCountDL;} + usageCountDL_t const& ref_usageCountDL() const {return usageCountDL;} + 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(startTimeStamp); + v(endTimeStamp); + v(usageCountUL); + v(usageCountDL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startTimeStamp); + v(endTimeStamp); + v(usageCountUL); + v(usageCountDL); + v(iE_Extensions); + + }; + void clear() + { + startTimeStamp.clear(); + endTimeStamp.clear(); + usageCountUL.clear(); + usageCountDL.clear(); + iE_Extensions.clear(); + + }; + private: + startTimeStamp_t startTimeStamp; + endTimeStamp_t endTimeStamp; + usageCountUL_t usageCountUL; + usageCountDL_t usageCountDL; + iE_Extensions_t iE_Extensions; + +}; +/* +E-RABUsageReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-E-RABUsageReport-Item CRITICALITY ignore TYPE E-RABUsageReport-Item PRESENCE mandatory }, + ... +} +*/ + +struct E_RABUsageReport_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_RABUsageReport_Item() { set(id_E_RABUsageReport_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_RABUsageReport_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_RABUsageReport_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_RABUsageReport_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_RABUsageReport_Item& select_id_E_RABUsageReport_Item() { return set(1); } + E_RABUsageReport_Item const* get_id_E_RABUsageReport_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_RABUsageReport_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_RABUsageReport_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_RABUsageReport_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-RABUsageReportList ::= SEQUENCE (SIZE(1..maxnooftimeperiods)) OF ProtocolIE-Single-Container { {E-RABUsageReport-ItemIEs} } +*/ + +struct E_RABUsageReportList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "E_RABUsageReportList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct E_RABUsageReportList : asn::sequenceof +{ + static constexpr const char* name() {return "E-RABUsageReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +EARFCN ::= INTEGER (0..maxEARFCN) +*/ + +struct EARFCN : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EARFCN";} + using parent_t = asn::integer<>; + +}; + +/* +EARFCNExtension ::= INTEGER(maxEARFCNPlusOne..newmaxEARFCN, ...) +*/ + +struct EARFCNExtension : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EARFCNExtension";} + using parent_t = asn::integer<>; + +}; + +/* +EN-DC-ResourceConfigurationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EN_DC_ResourceConfigurationExtIEs +{ + 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}; + + }; + +}; +/* +EN-DC-ResourceConfiguration ::= SEQUENCE { + pDCPatSgNB ENUMERATED {present, not-present, ...}, + mCGresources ENUMERATED {present, not-present, ...}, + sCGresources ENUMERATED {present, not-present, ...}, + iE-Extensions ProtocolExtensionContainer { {EN-DC-ResourceConfigurationExtIEs} } OPTIONAL, + ... +} +*/ + +struct EN_DC_ResourceConfiguration : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "EN-DC-ResourceConfiguration";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct pDCPatSgNB_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "pDCPatSgNB_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + pDCPatSgNB_t& ref_pDCPatSgNB() {return pDCPatSgNB;} + pDCPatSgNB_t const& ref_pDCPatSgNB() const {return pDCPatSgNB;} + struct mCGresources_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "mCGresources_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + mCGresources_t& ref_mCGresources() {return mCGresources;} + mCGresources_t const& ref_mCGresources() const {return mCGresources;} + struct sCGresources_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "sCGresources_t";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + present + ,not_present + } index_t; + + }; + + sCGresources_t& ref_sCGresources() {return sCGresources;} + sCGresources_t const& ref_sCGresources() const {return sCGresources;} + 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(pDCPatSgNB); + v(mCGresources); + v(sCGresources); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pDCPatSgNB); + v(mCGresources); + v(sCGresources); + v(iE_Extensions); + + }; + void clear() + { + pDCPatSgNB.clear(); + mCGresources.clear(); + sCGresources.clear(); + iE_Extensions.clear(); + + }; + private: + pDCPatSgNB_t pDCPatSgNB; + mCGresources_t mCGresources; + sCGresources_t sCGresources; + iE_Extensions_t iE_Extensions; + +}; +/* +ENB-ID ::= CHOICE { + macro-eNB-ID BIT STRING (SIZE (20)), + home-eNB-ID BIT STRING (SIZE (28)), + ... , + short-Macro-eNB-ID BIT STRING (SIZE(18)), + long-Macro-eNB-ID BIT STRING (SIZE(21)) +} +*/ + +struct ENB_ID : asn::choice<4, 2, true> +{ + static constexpr const char* name() {return "ENB-ID";} + using parent_t = asn::choice<4, 2, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~ENB_ID() {clear();} + struct macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct home_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "home_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct short_Macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "short_Macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + struct long_Macro_eNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "long_Macro_eNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: 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()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); 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()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + macro_eNB_ID_t& select_macro_eNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + macro_eNB_ID_t const* get_macro_eNB_ID() const { if(get_index() == 1) { return &var.as();} return nullptr; } + home_eNB_ID_t& select_home_eNB_ID() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + home_eNB_ID_t const* get_home_eNB_ID() const { if(get_index() == 2) { return &var.as();} return nullptr; } + short_Macro_eNB_ID_t& select_short_Macro_eNB_ID() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + short_Macro_eNB_ID_t const* get_short_Macro_eNB_ID() const { if(get_index() == 3) { return &var.as();} return nullptr; } + long_Macro_eNB_ID_t& select_long_Macro_eNB_ID() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + long_Macro_eNB_ID_t const* get_long_Macro_eNB_ID() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(macro_eNB_ID_t)]; + char dummy2[sizeof(home_eNB_ID_t)]; + char dummy3[sizeof(short_Macro_eNB_ID_t)]; + char dummy4[sizeof(long_Macro_eNB_ID_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +EPLMNs ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF PLMN-Identity +*/ + +struct EPLMNs_elm : PLMN_Identity +{ + static constexpr const char* name() {return "EPLMNs_elm";} + using parent_t = PLMN_Identity; + +}; +struct EPLMNs : asn::sequenceof +{ + static constexpr const char* name() {return "EPLMNs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UserPlaneTrafficActivityReport ::= ENUMERATED {inactive, re-activated, ...} +*/ + +struct UserPlaneTrafficActivityReport : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "UserPlaneTrafficActivityReport";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + inactive + ,re_activated + } index_t; + +}; + +/* +ERABActivityNotifyItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ERABActivityNotifyItem_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}; + + }; + +}; +/* +ERABActivityNotifyItem ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + activityReport UserPlaneTrafficActivityReport, + iE-Extensions ProtocolExtensionContainer { {ERABActivityNotifyItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ERABActivityNotifyItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ERABActivityNotifyItem";} + 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 activityReport_t : UserPlaneTrafficActivityReport + { + static constexpr const char* name() {return "activityReport_t";} + using parent_t = UserPlaneTrafficActivityReport; + + }; + activityReport_t& ref_activityReport() {return activityReport;} + activityReport_t const& ref_activityReport() const {return activityReport;} + 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(activityReport); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(activityReport); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + activityReport.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + activityReport_t activityReport; + iE_Extensions_t iE_Extensions; + +}; +/* +ERABActivityNotifyItemList ::= SEQUENCE (SIZE (0..maxnoofBearers)) OF ERABActivityNotifyItem +*/ + +struct ERABActivityNotifyItemList_elm : ERABActivityNotifyItem +{ + static constexpr const char* name() {return "ERABActivityNotifyItemList_elm";} + using parent_t = ERABActivityNotifyItem; + +}; +struct ERABActivityNotifyItemList : asn::sequenceof +{ + static constexpr const char* name() {return "ERABActivityNotifyItemList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Transmission-Bandwidth ::= ENUMERATED { + bw6, + bw15, + bw25, + bw50, + bw75, + bw100, + ..., + bw1 +} +*/ + +struct Transmission_Bandwidth : asn::enumerated<7, 1, true> +{ + static constexpr const char* name() {return "Transmission-Bandwidth";} + using parent_t = asn::enumerated<7, 1, true>; + typedef enum { + bw6 + ,bw15 + ,bw25 + ,bw50 + ,bw75 + ,bw100 + ,bw1 + } index_t; + +}; + +/* +OffsetOfNbiotChannelNumberToEARFCN ::= ENUMERATED { + minusTen, + minusNine, + minusEight, + minusSeven, + minusSix, + minusFive, + minusFour, + minusThree, + minusTwo, + minusOne, + minusZeroDotFive, + zero, + one, + two, + three, + four, + five, + six, + seven, + eight, + nine, + ... +} +*/ + +struct OffsetOfNbiotChannelNumberToEARFCN : asn::enumerated<21, 0, true> +{ + static constexpr const char* name() {return "OffsetOfNbiotChannelNumberToEARFCN";} + using parent_t = asn::enumerated<21, 0, true>; + typedef enum { + minusTen + ,minusNine + ,minusEight + ,minusSeven + ,minusSix + ,minusFive + ,minusFour + ,minusThree + ,minusTwo + ,minusOne + ,minusZeroDotFive + ,zero + ,one + ,two + ,three + ,four + ,five + ,six + ,seven + ,eight + ,nine + } index_t; + +}; + +/* +NRS-NSSS-PowerOffset ::= ENUMERATED { minusThree, zero, three, ...} +*/ + +struct NRS_NSSS_PowerOffset : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "NRS-NSSS-PowerOffset";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + minusThree + ,zero + ,three + } index_t; + +}; + +/* +NSSS-NumOccasionDifferentPrecoder ::= ENUMERATED { two, four, eight, ...} +*/ + +struct NSSS_NumOccasionDifferentPrecoder : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "NSSS-NumOccasionDifferentPrecoder";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + two + ,four + ,eight + } index_t; + +}; + +/* +FDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-UL-EARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-DL-EARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-OffsetOfNbiotChannelNumberToDL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| + { ID id-OffsetOfNbiotChannelNumberToUL-EARFCN CRITICALITY reject EXTENSION OffsetOfNbiotChannelNumberToEARFCN PRESENCE optional}| + { ID id-NRS-NSSS-PowerOffset CRITICALITY ignore EXTENSION NRS-NSSS-PowerOffset PRESENCE optional}| + { ID id-NSSS-NumOccasionDifferentPrecoder CRITICALITY ignore EXTENSION NSSS-NumOccasionDifferentPrecoder PRESENCE optional}, + ... +} +*/ + +struct FDD_Info_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_UL_EARFCNExtension() { set(id_UL_EARFCNExtension); type=1;} + void select_id_DL_EARFCNExtension() { set(id_DL_EARFCNExtension); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(id_OffsetOfNbiotChannelNumberToDL_EARFCN); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(id_OffsetOfNbiotChannelNumberToUL_EARFCN); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(id_NRS_NSSS_PowerOffset); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { set(id_NSSS_NumOccasionDifferentPrecoder); 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_UL_EARFCNExtension)) { type = 1; return true; } + else if(equal(id_DL_EARFCNExtension)) { type = 2; return true; } + else if(equal(id_OffsetOfNbiotChannelNumberToDL_EARFCN)) { type = 3; return true; } + else if(equal(id_OffsetOfNbiotChannelNumberToUL_EARFCN)) { type = 4; return true; } + else if(equal(id_NRS_NSSS_PowerOffset)) { type = 5; return true; } + else if(equal(id_NSSS_NumOccasionDifferentPrecoder)) { 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_UL_EARFCNExtension);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_DL_EARFCNExtension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_OffsetOfNbiotChannelNumberToDL_EARFCN);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_OffsetOfNbiotChannelNumberToUL_EARFCN);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_NRS_NSSS_PowerOffset);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_NSSS_NumOccasionDifferentPrecoder);} 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_UL_EARFCNExtension() { set(reject); type=1;} + void select_id_DL_EARFCNExtension() { set(reject); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(reject); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(reject); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(ignore); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { 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(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 Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + EARFCNExtension& select_id_UL_EARFCNExtension() { return set(1); } + EARFCNExtension const* get_id_UL_EARFCNExtension() const { return get(1); } + EARFCNExtension& select_id_DL_EARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_DL_EARFCNExtension() const { return get(2); } + OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { return set(3); } + OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToDL_EARFCN() const { return get(3); } + OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { return set(4); } + OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToUL_EARFCN() const { return get(4); } + NRS_NSSS_PowerOffset& select_id_NRS_NSSS_PowerOffset() { return set(5); } + NRS_NSSS_PowerOffset const* get_id_NRS_NSSS_PowerOffset() const { return get(5); } + NSSS_NumOccasionDifferentPrecoder& select_id_NSSS_NumOccasionDifferentPrecoder() { return set(6); } + NSSS_NumOccasionDifferentPrecoder const* get_id_NSSS_NumOccasionDifferentPrecoder() 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_UL_EARFCNExtension()); return true; + case 2: v(select_id_DL_EARFCNExtension()); return true; + case 3: v(select_id_OffsetOfNbiotChannelNumberToDL_EARFCN()); return true; + case 4: v(select_id_OffsetOfNbiotChannelNumberToUL_EARFCN()); return true; + case 5: v(select_id_NRS_NSSS_PowerOffset()); return true; + case 6: v(select_id_NSSS_NumOccasionDifferentPrecoder()); 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(EARFCNExtension)]; + char dummy2[sizeof(NRS_NSSS_PowerOffset)]; + char dummy3[sizeof(NSSS_NumOccasionDifferentPrecoder)]; + char dummy4[sizeof(OffsetOfNbiotChannelNumberToEARFCN)]; + + }; + 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_UL_EARFCNExtension() { set(optional); type=1;} + void select_id_DL_EARFCNExtension() { set(optional); type=2;} + void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(optional); type=3;} + void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(optional); type=4;} + void select_id_NRS_NSSS_PowerOffset() { set(optional); type=5;} + void select_id_NSSS_NumOccasionDifferentPrecoder() { 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}; + + }; + +}; +/* +FDD-Info ::= SEQUENCE { + uL-EARFCN EARFCN, + dL-EARFCN EARFCN, + uL-Transmission-Bandwidth Transmission-Bandwidth, + dL-Transmission-Bandwidth Transmission-Bandwidth, + iE-Extensions ProtocolExtensionContainer { {FDD-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FDD_Info : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "FDD-Info";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct uL_EARFCN_t : EARFCN + { + static constexpr const char* name() {return "uL_EARFCN_t";} + using parent_t = EARFCN; + + }; + uL_EARFCN_t& ref_uL_EARFCN() {return uL_EARFCN;} + uL_EARFCN_t const& ref_uL_EARFCN() const {return uL_EARFCN;} + struct dL_EARFCN_t : EARFCN + { + static constexpr const char* name() {return "dL_EARFCN_t";} + using parent_t = EARFCN; + + }; + dL_EARFCN_t& ref_dL_EARFCN() {return dL_EARFCN;} + dL_EARFCN_t const& ref_dL_EARFCN() const {return dL_EARFCN;} + struct uL_Transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "uL_Transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + uL_Transmission_Bandwidth_t& ref_uL_Transmission_Bandwidth() {return uL_Transmission_Bandwidth;} + uL_Transmission_Bandwidth_t const& ref_uL_Transmission_Bandwidth() const {return uL_Transmission_Bandwidth;} + struct dL_Transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "dL_Transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + dL_Transmission_Bandwidth_t& ref_dL_Transmission_Bandwidth() {return dL_Transmission_Bandwidth;} + dL_Transmission_Bandwidth_t const& ref_dL_Transmission_Bandwidth() const {return dL_Transmission_Bandwidth;} + 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_EARFCN); + v(dL_EARFCN); + v(uL_Transmission_Bandwidth); + v(dL_Transmission_Bandwidth); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_EARFCN); + v(dL_EARFCN); + v(uL_Transmission_Bandwidth); + v(dL_Transmission_Bandwidth); + v(iE_Extensions); + + }; + void clear() + { + uL_EARFCN.clear(); + dL_EARFCN.clear(); + uL_Transmission_Bandwidth.clear(); + dL_Transmission_Bandwidth.clear(); + iE_Extensions.clear(); + + }; + private: + uL_EARFCN_t uL_EARFCN; + dL_EARFCN_t dL_EARFCN; + uL_Transmission_Bandwidth_t uL_Transmission_Bandwidth; + dL_Transmission_Bandwidth_t dL_Transmission_Bandwidth; + iE_Extensions_t iE_Extensions; + +}; +/* +SubframeAssignment ::= ENUMERATED { + sa0, + sa1, + sa2, + sa3, + sa4, + sa5, + sa6, + ... +} +*/ + +struct SubframeAssignment : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "SubframeAssignment";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + sa0 + ,sa1 + ,sa2 + ,sa3 + ,sa4 + ,sa5 + ,sa6 + } index_t; + +}; + +/* +SpecialSubframePatterns ::= ENUMERATED { + ssp0, + ssp1, + ssp2, + ssp3, + ssp4, + ssp5, + ssp6, + ssp7, + ssp8, + ... +} +*/ + +struct SpecialSubframePatterns : asn::enumerated<9, 0, true> +{ + static constexpr const char* name() {return "SpecialSubframePatterns";} + using parent_t = asn::enumerated<9, 0, true>; + typedef enum { + ssp0 + ,ssp1 + ,ssp2 + ,ssp3 + ,ssp4 + ,ssp5 + ,ssp6 + ,ssp7 + ,ssp8 + } index_t; + +}; + +/* +SpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SpecialSubframe_Info_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}; + + }; + +}; +/* +SpecialSubframe-Info ::= SEQUENCE { + specialSubframePatterns SpecialSubframePatterns, + cyclicPrefixDL CyclicPrefixDL, + cyclicPrefixUL CyclicPrefixUL, + iE-Extensions ProtocolExtensionContainer { {SpecialSubframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SpecialSubframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "SpecialSubframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct specialSubframePatterns_t : SpecialSubframePatterns + { + static constexpr const char* name() {return "specialSubframePatterns_t";} + using parent_t = SpecialSubframePatterns; + + }; + specialSubframePatterns_t& ref_specialSubframePatterns() {return specialSubframePatterns;} + specialSubframePatterns_t const& ref_specialSubframePatterns() const {return specialSubframePatterns;} + struct cyclicPrefixDL_t : CyclicPrefixDL + { + static constexpr const char* name() {return "cyclicPrefixDL_t";} + using parent_t = CyclicPrefixDL; + + }; + cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;} + cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;} + struct cyclicPrefixUL_t : CyclicPrefixUL + { + static constexpr const char* name() {return "cyclicPrefixUL_t";} + using parent_t = CyclicPrefixUL; + + }; + cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;} + cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;} + 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(specialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(specialSubframePatterns); + v(cyclicPrefixDL); + v(cyclicPrefixUL); + v(iE_Extensions); + + }; + void clear() + { + specialSubframePatterns.clear(); + cyclicPrefixDL.clear(); + cyclicPrefixUL.clear(); + iE_Extensions.clear(); + + }; + private: + specialSubframePatterns_t specialSubframePatterns; + cyclicPrefixDL_t cyclicPrefixDL; + cyclicPrefixUL_t cyclicPrefixUL; + iE_Extensions_t iE_Extensions; + +}; +/* +TDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-AdditionalSpecialSubframe-Info CRITICALITY ignore EXTENSION AdditionalSpecialSubframe-Info PRESENCE optional}| + { ID id-eARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}| + { ID id-AdditionalSpecialSubframeExtension-Info CRITICALITY ignore EXTENSION AdditionalSpecialSubframeExtension-Info PRESENCE optional}, + ... +} +*/ + +struct TDD_Info_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_AdditionalSpecialSubframe_Info() { set(id_AdditionalSpecialSubframe_Info); type=1;} + void select_id_eARFCNExtension() { set(id_eARFCNExtension); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { set(id_AdditionalSpecialSubframeExtension_Info); 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_AdditionalSpecialSubframe_Info)) { type = 1; return true; } + else if(equal(id_eARFCNExtension)) { type = 2; return true; } + else if(equal(id_AdditionalSpecialSubframeExtension_Info)) { 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_AdditionalSpecialSubframe_Info);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_eARFCNExtension);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_AdditionalSpecialSubframeExtension_Info);} 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_AdditionalSpecialSubframe_Info() { set(ignore); type=1;} + void select_id_eARFCNExtension() { set(reject); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { 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(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 Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + AdditionalSpecialSubframe_Info& select_id_AdditionalSpecialSubframe_Info() { return set(1); } + AdditionalSpecialSubframe_Info const* get_id_AdditionalSpecialSubframe_Info() const { return get(1); } + EARFCNExtension& select_id_eARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_eARFCNExtension() const { return get(2); } + AdditionalSpecialSubframeExtension_Info& select_id_AdditionalSpecialSubframeExtension_Info() { return set(3); } + AdditionalSpecialSubframeExtension_Info const* get_id_AdditionalSpecialSubframeExtension_Info() 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_AdditionalSpecialSubframe_Info()); return true; + case 2: v(select_id_eARFCNExtension()); return true; + case 3: v(select_id_AdditionalSpecialSubframeExtension_Info()); 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(AdditionalSpecialSubframeExtension_Info)]; + char dummy2[sizeof(AdditionalSpecialSubframe_Info)]; + char dummy3[sizeof(EARFCNExtension)]; + + }; + 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_AdditionalSpecialSubframe_Info() { set(optional); type=1;} + void select_id_eARFCNExtension() { set(optional); type=2;} + void select_id_AdditionalSpecialSubframeExtension_Info() { 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}; + + }; + +}; +/* +TDD-Info ::= SEQUENCE { + eARFCN EARFCN, + transmission-Bandwidth Transmission-Bandwidth, + subframeAssignment SubframeAssignment, + specialSubframe-Info SpecialSubframe-Info, + iE-Extensions ProtocolExtensionContainer { {TDD-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TDD_Info : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "TDD-Info";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct eARFCN_t : EARFCN + { + static constexpr const char* name() {return "eARFCN_t";} + using parent_t = EARFCN; + + }; + eARFCN_t& ref_eARFCN() {return eARFCN;} + eARFCN_t const& ref_eARFCN() const {return eARFCN;} + struct transmission_Bandwidth_t : Transmission_Bandwidth + { + static constexpr const char* name() {return "transmission_Bandwidth_t";} + using parent_t = Transmission_Bandwidth; + + }; + transmission_Bandwidth_t& ref_transmission_Bandwidth() {return transmission_Bandwidth;} + transmission_Bandwidth_t const& ref_transmission_Bandwidth() const {return transmission_Bandwidth;} + struct subframeAssignment_t : SubframeAssignment + { + static constexpr const char* name() {return "subframeAssignment_t";} + using parent_t = SubframeAssignment; + + }; + subframeAssignment_t& ref_subframeAssignment() {return subframeAssignment;} + subframeAssignment_t const& ref_subframeAssignment() const {return subframeAssignment;} + struct specialSubframe_Info_t : SpecialSubframe_Info + { + static constexpr const char* name() {return "specialSubframe_Info_t";} + using parent_t = SpecialSubframe_Info; + + }; + specialSubframe_Info_t& ref_specialSubframe_Info() {return specialSubframe_Info;} + specialSubframe_Info_t const& ref_specialSubframe_Info() const {return specialSubframe_Info;} + 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(eARFCN); + v(transmission_Bandwidth); + v(subframeAssignment); + v(specialSubframe_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eARFCN); + v(transmission_Bandwidth); + v(subframeAssignment); + v(specialSubframe_Info); + v(iE_Extensions); + + }; + void clear() + { + eARFCN.clear(); + transmission_Bandwidth.clear(); + subframeAssignment.clear(); + specialSubframe_Info.clear(); + iE_Extensions.clear(); + + }; + private: + eARFCN_t eARFCN; + transmission_Bandwidth_t transmission_Bandwidth; + subframeAssignment_t subframeAssignment; + specialSubframe_Info_t specialSubframe_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +EUTRA-Mode-Info ::= CHOICE { + fDD FDD-Info, + tDD TDD-Info, + ... +} +*/ + +struct EUTRA_Mode_Info : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "EUTRA-Mode-Info";} + 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); } + ~EUTRA_Mode_Info() {clear();} + struct fDD_t : FDD_Info + { + static constexpr const char* name() {return "fDD_t";} + using parent_t = FDD_Info; + + }; + struct tDD_t : TDD_Info + { + static constexpr const char* name() {return "tDD_t";} + using parent_t = TDD_Info; + + }; + 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}; +}; +/* +EUTRANTraceID ::= OCTET STRING (SIZE (8)) +*/ + +struct EUTRANTraceID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EUTRANTraceID";} + using parent_t = asn::ostring<>; + +}; + +/* +EncryptionAlgorithms ::= BIT STRING (SIZE (16, ...)) +*/ + +struct EncryptionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "EncryptionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +RNTP-Threshold ::= ENUMERATED { + minusInfinity, + minusEleven, + minusTen, + minusNine, + minusEight, + minusSeven, + minusSix, + minusFive, + minusFour, + minusThree, + minusTwo, + minusOne, + zero, + one, + two, + three, + ... +} +*/ + +struct RNTP_Threshold : asn::enumerated<16, 0, true> +{ + static constexpr const char* name() {return "RNTP-Threshold";} + using parent_t = asn::enumerated<16, 0, true>; + typedef enum { + minusInfinity + ,minusEleven + ,minusTen + ,minusNine + ,minusEight + ,minusSeven + ,minusSix + ,minusFive + ,minusFour + ,minusThree + ,minusTwo + ,minusOne + ,zero + ,one + ,two + ,three + } index_t; + +}; + +/* +EnhancedRNTPStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EnhancedRNTPStartTime_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}; + + }; + +}; +/* +EnhancedRNTPStartTime ::= SEQUENCE { + startSFN INTEGER (0..1023, ...), + startSubframeNumber INTEGER (0..9, ...), + iE-Extensions ProtocolExtensionContainer { {EnhancedRNTPStartTime-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct EnhancedRNTPStartTime : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "EnhancedRNTPStartTime";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct startSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSFN_t";} + using parent_t = asn::integer<>; + + }; + + startSFN_t& ref_startSFN() {return startSFN;} + startSFN_t const& ref_startSFN() const {return startSFN;} + struct startSubframeNumber_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "startSubframeNumber_t";} + using parent_t = asn::integer<>; + + }; + + startSubframeNumber_t& ref_startSubframeNumber() {return startSubframeNumber;} + startSubframeNumber_t const& ref_startSubframeNumber() const {return startSubframeNumber;} + 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(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(startSFN); + v(startSubframeNumber); + v(iE_Extensions); + + }; + void clear() + { + startSFN.clear(); + startSubframeNumber.clear(); + iE_Extensions.clear(); + + }; + private: + startSFN_t startSFN; + startSubframeNumber_t startSubframeNumber; + iE_Extensions_t iE_Extensions; + +}; +/* +EnhancedRNTP-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct EnhancedRNTP_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}; + + }; + +}; +/* +EnhancedRNTP ::= SEQUENCE { + enhancedRNTPBitmap BIT STRING (SIZE(12..8800, ...)), + rNTP-High-Power-Threshold RNTP-Threshold, + enhancedRNTPStartTime EnhancedRNTPStartTime OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {EnhancedRNTP-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct EnhancedRNTP : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "EnhancedRNTP";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct enhancedRNTPBitmap_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "enhancedRNTPBitmap_t";} + using parent_t = asn::bstring<>; + + }; + + enhancedRNTPBitmap_t& ref_enhancedRNTPBitmap() {return enhancedRNTPBitmap;} + enhancedRNTPBitmap_t const& ref_enhancedRNTPBitmap() const {return enhancedRNTPBitmap;} + struct rNTP_High_Power_Threshold_t : RNTP_Threshold + { + static constexpr const char* name() {return "rNTP_High_Power_Threshold_t";} + using parent_t = RNTP_Threshold; + + }; + rNTP_High_Power_Threshold_t& ref_rNTP_High_Power_Threshold() {return rNTP_High_Power_Threshold;} + rNTP_High_Power_Threshold_t const& ref_rNTP_High_Power_Threshold() const {return rNTP_High_Power_Threshold;} + struct enhancedRNTPStartTime_t : EnhancedRNTPStartTime + { + static constexpr const char* name() {return "enhancedRNTPStartTime_t";} + using parent_t = EnhancedRNTPStartTime; + static constexpr bool optional = true; + + }; + enhancedRNTPStartTime_t& set_enhancedRNTPStartTime() { enhancedRNTPStartTime.setpresent(true); return enhancedRNTPStartTime;} + enhancedRNTPStartTime_t const* get_enhancedRNTPStartTime() const {return enhancedRNTPStartTime.is_valid() ? &enhancedRNTPStartTime : 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(enhancedRNTPBitmap); + v(rNTP_High_Power_Threshold); + v(enhancedRNTPStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(enhancedRNTPBitmap); + v(rNTP_High_Power_Threshold); + v(enhancedRNTPStartTime); + v(iE_Extensions); + + }; + void clear() + { + enhancedRNTPBitmap.clear(); + rNTP_High_Power_Threshold.clear(); + enhancedRNTPStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + enhancedRNTPBitmap_t enhancedRNTPBitmap; + rNTP_High_Power_Threshold_t rNTP_High_Power_Threshold; + enhancedRNTPStartTime_t enhancedRNTPStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +EventType ::= ENUMERATED{ + change-of-serving-cell, + ... +} +*/ + +struct EventType : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "EventType";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + change_of_serving_cell + } index_t; + +}; + +/* +ExpectedActivityPeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...) +*/ + +struct ExpectedActivityPeriod : asn::integer<> +{ + using constraint_t = asn::constraints,asn::one<40>,asn::one<50>,asn::one<60>,asn::one<80>,asn::one<100>,asn::one<120>,asn::one<150>,asn::one<180>,asn::one<181>>; + static constexpr const char* name() {return "ExpectedActivityPeriod";} + using parent_t = asn::integer<>; + +}; + +/* +ExpectedHOInterval ::= ENUMERATED { + sec15, sec30, sec60, sec90, sec120, sec180, long-time, + ... +} +*/ + +struct ExpectedHOInterval : asn::enumerated<7, 0, true> +{ + static constexpr const char* name() {return "ExpectedHOInterval";} + using parent_t = asn::enumerated<7, 0, true>; + typedef enum { + sec15 + ,sec30 + ,sec60 + ,sec90 + ,sec120 + ,sec180 + ,long_time + } index_t; + +}; + +/* +ExpectedIdlePeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...) +*/ + +struct ExpectedIdlePeriod : asn::integer<> +{ + using constraint_t = asn::constraints,asn::one<40>,asn::one<50>,asn::one<60>,asn::one<80>,asn::one<100>,asn::one<120>,asn::one<150>,asn::one<180>,asn::one<181>>; + static constexpr const char* name() {return "ExpectedIdlePeriod";} + using parent_t = asn::integer<>; + +}; + +/* +SourceOfUEActivityBehaviourInformation ::= ENUMERATED { + subscription-information, + statistics, + ... +} +*/ + +struct SourceOfUEActivityBehaviourInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SourceOfUEActivityBehaviourInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + subscription_information + ,statistics + } index_t; + +}; + +/* +ExpectedUEActivityBehaviour-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExpectedUEActivityBehaviour_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}; + + }; + +}; +/* +ExpectedUEActivityBehaviour ::= SEQUENCE { + expectedActivityPeriod ExpectedActivityPeriod OPTIONAL, + expectedIdlePeriod ExpectedIdlePeriod OPTIONAL, + sourceofUEActivityBehaviourInformation SourceOfUEActivityBehaviourInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEActivityBehaviour-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExpectedUEActivityBehaviour : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "ExpectedUEActivityBehaviour";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct expectedActivityPeriod_t : ExpectedActivityPeriod + { + static constexpr const char* name() {return "expectedActivityPeriod_t";} + using parent_t = ExpectedActivityPeriod; + static constexpr bool optional = true; + + }; + expectedActivityPeriod_t& set_expectedActivityPeriod() { expectedActivityPeriod.setpresent(true); return expectedActivityPeriod;} + expectedActivityPeriod_t const* get_expectedActivityPeriod() const {return expectedActivityPeriod.is_valid() ? &expectedActivityPeriod : nullptr;} + struct expectedIdlePeriod_t : ExpectedIdlePeriod + { + static constexpr const char* name() {return "expectedIdlePeriod_t";} + using parent_t = ExpectedIdlePeriod; + static constexpr bool optional = true; + + }; + expectedIdlePeriod_t& set_expectedIdlePeriod() { expectedIdlePeriod.setpresent(true); return expectedIdlePeriod;} + expectedIdlePeriod_t const* get_expectedIdlePeriod() const {return expectedIdlePeriod.is_valid() ? &expectedIdlePeriod : nullptr;} + struct sourceofUEActivityBehaviourInformation_t : SourceOfUEActivityBehaviourInformation + { + static constexpr const char* name() {return "sourceofUEActivityBehaviourInformation_t";} + using parent_t = SourceOfUEActivityBehaviourInformation; + static constexpr bool optional = true; + + }; + sourceofUEActivityBehaviourInformation_t& set_sourceofUEActivityBehaviourInformation() { sourceofUEActivityBehaviourInformation.setpresent(true); return sourceofUEActivityBehaviourInformation;} + sourceofUEActivityBehaviourInformation_t const* get_sourceofUEActivityBehaviourInformation() const {return sourceofUEActivityBehaviourInformation.is_valid() ? &sourceofUEActivityBehaviourInformation : 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(expectedActivityPeriod); + v(expectedIdlePeriod); + v(sourceofUEActivityBehaviourInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(expectedActivityPeriod); + v(expectedIdlePeriod); + v(sourceofUEActivityBehaviourInformation); + v(iE_Extensions); + + }; + void clear() + { + expectedActivityPeriod.clear(); + expectedIdlePeriod.clear(); + sourceofUEActivityBehaviourInformation.clear(); + iE_Extensions.clear(); + + }; + private: + expectedActivityPeriod_t expectedActivityPeriod; + expectedIdlePeriod_t expectedIdlePeriod; + sourceofUEActivityBehaviourInformation_t sourceofUEActivityBehaviourInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +ExpectedUEBehaviour-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExpectedUEBehaviour_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}; + + }; + +}; +/* +ExpectedUEBehaviour ::= SEQUENCE { + expectedActivity ExpectedUEActivityBehaviour OPTIONAL, + expectedHOInterval ExpectedHOInterval OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ExpectedUEBehaviour-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExpectedUEBehaviour : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "ExpectedUEBehaviour";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct expectedActivity_t : ExpectedUEActivityBehaviour + { + static constexpr const char* name() {return "expectedActivity_t";} + using parent_t = ExpectedUEActivityBehaviour; + static constexpr bool optional = true; + + }; + expectedActivity_t& set_expectedActivity() { expectedActivity.setpresent(true); return expectedActivity;} + expectedActivity_t const* get_expectedActivity() const {return expectedActivity.is_valid() ? &expectedActivity : nullptr;} + struct expectedHOInterval_t : ExpectedHOInterval + { + static constexpr const char* name() {return "expectedHOInterval_t";} + using parent_t = ExpectedHOInterval; + static constexpr bool optional = true; + + }; + expectedHOInterval_t& set_expectedHOInterval() { expectedHOInterval.setpresent(true); return expectedHOInterval;} + expectedHOInterval_t const* get_expectedHOInterval() const {return expectedHOInterval.is_valid() ? &expectedHOInterval : 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(expectedActivity); + v(expectedHOInterval); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(expectedActivity); + v(expectedHOInterval); + v(iE_Extensions); + + }; + void clear() + { + expectedActivity.clear(); + expectedHOInterval.clear(); + iE_Extensions.clear(); + + }; + private: + expectedActivity_t expectedActivity; + expectedHOInterval_t expectedHOInterval; + iE_Extensions_t iE_Extensions; + +}; +/* +UL-InterferenceOverloadIndication-Item ::= ENUMERATED { + high-interference, + medium-interference, + low-interference, + ... +} +*/ + +struct UL_InterferenceOverloadIndication_Item : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "UL-InterferenceOverloadIndication-Item";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + high_interference + ,medium_interference + ,low_interference + } index_t; + +}; + +/* +UL-InterferenceOverloadIndication ::= SEQUENCE (SIZE(1..maxnoofPRBs)) OF UL-InterferenceOverloadIndication-Item +*/ + +struct UL_InterferenceOverloadIndication_elm : UL_InterferenceOverloadIndication_Item +{ + static constexpr const char* name() {return "UL_InterferenceOverloadIndication_elm";} + using parent_t = UL_InterferenceOverloadIndication_Item; + +}; +struct UL_InterferenceOverloadIndication : asn::sequenceof +{ + static constexpr const char* name() {return "UL-InterferenceOverloadIndication";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ExtendedULInterferenceOverloadInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ExtendedULInterferenceOverloadInfo_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}; + + }; + +}; +/* +ExtendedULInterferenceOverloadInfo ::= SEQUENCE { + associatedSubframes BIT STRING (SIZE (5)), + extended-ul-InterferenceOverloadIndication UL-InterferenceOverloadIndication, + iE-Extensions ProtocolExtensionContainer { {ExtendedULInterferenceOverloadInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ExtendedULInterferenceOverloadInfo : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ExtendedULInterferenceOverloadInfo";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct associatedSubframes_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "associatedSubframes_t";} + using parent_t = asn::bstring<>; + + }; + + associatedSubframes_t& ref_associatedSubframes() {return associatedSubframes;} + associatedSubframes_t const& ref_associatedSubframes() const {return associatedSubframes;} + struct extended_ul_InterferenceOverloadIndication_t : UL_InterferenceOverloadIndication + { + static constexpr const char* name() {return "extended_ul_InterferenceOverloadIndication_t";} + using parent_t = UL_InterferenceOverloadIndication; + + }; + extended_ul_InterferenceOverloadIndication_t& ref_extended_ul_InterferenceOverloadIndication() {return extended_ul_InterferenceOverloadIndication;} + extended_ul_InterferenceOverloadIndication_t const& ref_extended_ul_InterferenceOverloadIndication() const {return extended_ul_InterferenceOverloadIndication;} + 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(associatedSubframes); + v(extended_ul_InterferenceOverloadIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(associatedSubframes); + v(extended_ul_InterferenceOverloadIndication); + v(iE_Extensions); + + }; + void clear() + { + associatedSubframes.clear(); + extended_ul_InterferenceOverloadIndication.clear(); + iE_Extensions.clear(); + + }; + private: + associatedSubframes_t associatedSubframes; + extended_ul_InterferenceOverloadIndication_t extended_ul_InterferenceOverloadIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +FiveGS-TAC ::= OCTET STRING (SIZE (3)) +*/ + +struct FiveGS_TAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "FiveGS-TAC";} + using parent_t = asn::ostring<>; + +}; + +/* +ForbiddenInterRATs ::= ENUMERATED { + all, + geran, + utran, + cdma2000, + ..., + geranandutran, + cdma2000andutran + +} +*/ + +struct ForbiddenInterRATs : asn::enumerated<6, 2, true> +{ + static constexpr const char* name() {return "ForbiddenInterRATs";} + using parent_t = asn::enumerated<6, 2, true>; + typedef enum { + all + ,geran + ,utran + ,cdma2000 + ,geranandutran + ,cdma2000andutran + } index_t; + +}; + +/* +LAC ::= OCTET STRING (SIZE (2)) --(EXCEPT ('0000'H|'FFFE'H)) +*/ + +struct LAC : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LAC";} + using parent_t = asn::ostring<>; + +}; + +/* +ForbiddenLACs ::= SEQUENCE (SIZE(1..maxnoofForbLACs)) OF LAC +*/ + +struct ForbiddenLACs_elm : LAC +{ + static constexpr const char* name() {return "ForbiddenLACs_elm";} + using parent_t = LAC; + +}; +struct ForbiddenLACs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenLACs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenLAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ForbiddenLAs_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}; + + }; + +}; +/* +ForbiddenLAs-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + forbiddenLACs ForbiddenLACs, + iE-Extensions ProtocolExtensionContainer { {ForbiddenLAs-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ForbiddenLAs_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ForbiddenLAs-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct forbiddenLACs_t : ForbiddenLACs + { + static constexpr const char* name() {return "forbiddenLACs_t";} + using parent_t = ForbiddenLACs; + + }; + forbiddenLACs_t& ref_forbiddenLACs() {return forbiddenLACs;} + forbiddenLACs_t const& ref_forbiddenLACs() const {return forbiddenLACs;} + 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(pLMN_Identity); + v(forbiddenLACs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(forbiddenLACs); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + forbiddenLACs.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + forbiddenLACs_t forbiddenLACs; + iE_Extensions_t iE_Extensions; + +}; +/* +ForbiddenLAs ::= SEQUENCE (SIZE(1..maxnoofEPLMNsPlusOne)) OF ForbiddenLAs-Item +*/ + +struct ForbiddenLAs_elm : ForbiddenLAs_Item +{ + static constexpr const char* name() {return "ForbiddenLAs_elm";} + using parent_t = ForbiddenLAs_Item; + +}; +struct ForbiddenLAs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenLAs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenTACs ::= SEQUENCE (SIZE(1..maxnoofForbTACs)) OF TAC +*/ + +struct ForbiddenTACs_elm : TAC +{ + static constexpr const char* name() {return "ForbiddenTACs_elm";} + using parent_t = TAC; + +}; +struct ForbiddenTACs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenTACs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ForbiddenTAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ForbiddenTAs_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}; + + }; + +}; +/* +ForbiddenTAs-Item ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + forbiddenTACs ForbiddenTACs, + iE-Extensions ProtocolExtensionContainer { {ForbiddenTAs-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ForbiddenTAs_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ForbiddenTAs-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct forbiddenTACs_t : ForbiddenTACs + { + static constexpr const char* name() {return "forbiddenTACs_t";} + using parent_t = ForbiddenTACs; + + }; + forbiddenTACs_t& ref_forbiddenTACs() {return forbiddenTACs;} + forbiddenTACs_t const& ref_forbiddenTACs() const {return forbiddenTACs;} + 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(pLMN_Identity); + v(forbiddenTACs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(forbiddenTACs); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + forbiddenTACs.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + forbiddenTACs_t forbiddenTACs; + iE_Extensions_t iE_Extensions; + +}; +/* +ForbiddenTAs ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF ForbiddenTAs-Item +*/ + +struct ForbiddenTAs_elm : ForbiddenTAs_Item +{ + static constexpr const char* name() {return "ForbiddenTAs_elm";} + using parent_t = ForbiddenTAs_Item; + +}; +struct ForbiddenTAs : asn::sequenceof +{ + static constexpr const char* name() {return "ForbiddenTAs";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +Fourframes ::= BIT STRING (SIZE (24)) +*/ + +struct Fourframes : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Fourframes";} + using parent_t = asn::bstring<>; + +}; + +/* +FreqBandIndicatorPriority ::= ENUMERATED { + not-broadcasted, + broadcasted, + ... +} +*/ + +struct FreqBandIndicatorPriority : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "FreqBandIndicatorPriority";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + not_broadcasted + ,broadcasted + } index_t; + +}; + +/* +SupportedSULFreqBandItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SupportedSULFreqBandItem_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}; + + }; + +}; +/* +SupportedSULFreqBandItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + iE-Extensions ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SupportedSULFreqBandItem : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "SupportedSULFreqBandItem";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct freqBandIndicatorNr_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "freqBandIndicatorNr_t";} + using parent_t = asn::integer<>; + + }; + + freqBandIndicatorNr_t& ref_freqBandIndicatorNr() {return freqBandIndicatorNr;} + freqBandIndicatorNr_t const& ref_freqBandIndicatorNr() const {return freqBandIndicatorNr;} + 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(freqBandIndicatorNr); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicatorNr); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicatorNr.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicatorNr_t freqBandIndicatorNr; + iE_Extensions_t iE_Extensions; + +}; +/* +FreqBandNrItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct FreqBandNrItem_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}; + + }; + +}; +/* +FreqBandNrItem ::= SEQUENCE { + freqBandIndicatorNr INTEGER (1..1024,...), + supportedSULBandList SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem, + iE-Extensions ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct FreqBandNrItem : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "FreqBandNrItem";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct freqBandIndicatorNr_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "freqBandIndicatorNr_t";} + using parent_t = asn::integer<>; + + }; + + freqBandIndicatorNr_t& ref_freqBandIndicatorNr() {return freqBandIndicatorNr;} + freqBandIndicatorNr_t const& ref_freqBandIndicatorNr() const {return freqBandIndicatorNr;} + struct supportedSULBandList_t_elm : SupportedSULFreqBandItem + { + static constexpr const char* name() {return "supportedSULBandList_t_elm";} + using parent_t = SupportedSULFreqBandItem; + + }; + struct supportedSULBandList_t : asn::sequenceof + { + static constexpr const char* name() {return "supportedSULBandList_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + supportedSULBandList_t& ref_supportedSULBandList() {return supportedSULBandList;} + supportedSULBandList_t const& ref_supportedSULBandList() const {return supportedSULBandList;} + 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(freqBandIndicatorNr); + v(supportedSULBandList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(freqBandIndicatorNr); + v(supportedSULBandList); + v(iE_Extensions); + + }; + void clear() + { + freqBandIndicatorNr.clear(); + supportedSULBandList.clear(); + iE_Extensions.clear(); + + }; + private: + freqBandIndicatorNr_t freqBandIndicatorNr; + supportedSULBandList_t supportedSULBandList; + iE_Extensions_t iE_Extensions; + +}; +/* +GNB-ID ::= CHOICE { + gNB-ID BIT STRING (SIZE (22..32)), + ... +} +*/ + +struct GNB_ID : asn::choice<1, 0, true> +{ + static constexpr const char* name() {return "GNB-ID";} + using parent_t = asn::choice<1, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 2;} + void set_unknown() { set_index(2); } + ~GNB_ID() {clear();} + struct gNB_ID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "gNB_ID_t";} + using parent_t = asn::bstring<>; + + }; + + void clear() + { + switch(get_index()) + { + case 1: 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()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + gNB_ID_t& select_gNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + gNB_ID_t const* get_gNB_ID() const { if(get_index() == 1) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(gNB_ID_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +GNBOverloadInformation ::= ENUMERATED {overloaded, not-overloaded, ...} +*/ + +struct GNBOverloadInformation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "GNBOverloadInformation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + overloaded + ,not_overloaded + } index_t; + +}; + +/* +GTP-TEI ::= OCTET STRING (SIZE (4)) +*/ + +struct GTP_TEI : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "GTP-TEI";} + using parent_t = asn::ostring<>; + +}; + +/* +TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) +*/ + +struct TransportLayerAddress : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TransportLayerAddress";} + using parent_t = asn::bstring<>; + +}; + +/* +GTPtunnelEndpoint-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GTPtunnelEndpoint_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}; + + }; + +}; +/* +GTPtunnelEndpoint ::= SEQUENCE { + transportLayerAddress TransportLayerAddress, + gTP-TEID GTP-TEI, + iE-Extensions ProtocolExtensionContainer { {GTPtunnelEndpoint-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GTPtunnelEndpoint : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GTPtunnelEndpoint";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct transportLayerAddress_t : TransportLayerAddress + { + static constexpr const char* name() {return "transportLayerAddress_t";} + using parent_t = TransportLayerAddress; + + }; + transportLayerAddress_t& ref_transportLayerAddress() {return transportLayerAddress;} + transportLayerAddress_t const& ref_transportLayerAddress() const {return transportLayerAddress;} + struct gTP_TEID_t : GTP_TEI + { + static constexpr const char* name() {return "gTP_TEID_t";} + using parent_t = GTP_TEI; + + }; + gTP_TEID_t& ref_gTP_TEID() {return gTP_TEID;} + gTP_TEID_t const& ref_gTP_TEID() const {return gTP_TEID;} + 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(transportLayerAddress); + v(gTP_TEID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transportLayerAddress); + v(gTP_TEID); + v(iE_Extensions); + + }; + void clear() + { + transportLayerAddress.clear(); + gTP_TEID.clear(); + iE_Extensions.clear(); + + }; + private: + transportLayerAddress_t transportLayerAddress; + gTP_TEID_t gTP_TEID; + iE_Extensions_t iE_Extensions; + +}; +/* +MME-Group-ID ::= OCTET STRING (SIZE (2)) +*/ + +struct MME_Group_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MME-Group-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +GU-Group-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GU_Group_ID_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}; + + }; + +}; +/* +GU-Group-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + mME-Group-ID MME-Group-ID, + iE-Extensions ProtocolExtensionContainer { {GU-Group-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GU_Group_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GU-Group-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct mME_Group_ID_t : MME_Group_ID + { + static constexpr const char* name() {return "mME_Group_ID_t";} + using parent_t = MME_Group_ID; + + }; + mME_Group_ID_t& ref_mME_Group_ID() {return mME_Group_ID;} + mME_Group_ID_t const& ref_mME_Group_ID() const {return mME_Group_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(pLMN_Identity); + v(mME_Group_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(mME_Group_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + mME_Group_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + mME_Group_ID_t mME_Group_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +GUGroupIDList ::= SEQUENCE (SIZE (1..maxPools)) OF GU-Group-ID +*/ + +struct GUGroupIDList_elm : GU_Group_ID +{ + static constexpr const char* name() {return "GUGroupIDList_elm";} + using parent_t = GU_Group_ID; + +}; +struct GUGroupIDList : asn::sequenceof +{ + static constexpr const char* name() {return "GUGroupIDList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MME-Code ::= OCTET STRING (SIZE (1)) +*/ + +struct MME_Code : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MME-Code";} + using parent_t = asn::ostring<>; + +}; + +/* +GUMMEI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GUMMEI_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}; + + }; + +}; +/* +GUMMEI ::= SEQUENCE { + + gU-Group-ID GU-Group-ID, + mME-Code MME-Code, + iE-Extensions ProtocolExtensionContainer { {GUMMEI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GUMMEI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GUMMEI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct gU_Group_ID_t : GU_Group_ID + { + static constexpr const char* name() {return "gU_Group_ID_t";} + using parent_t = GU_Group_ID; + + }; + gU_Group_ID_t& ref_gU_Group_ID() {return gU_Group_ID;} + gU_Group_ID_t const& ref_gU_Group_ID() const {return gU_Group_ID;} + struct mME_Code_t : MME_Code + { + static constexpr const char* name() {return "mME_Code_t";} + using parent_t = MME_Code; + + }; + mME_Code_t& ref_mME_Code() {return mME_Code;} + mME_Code_t const& ref_mME_Code() const {return mME_Code;} + 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(gU_Group_ID); + v(mME_Code); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(gU_Group_ID); + v(mME_Code); + v(iE_Extensions); + + }; + void clear() + { + gU_Group_ID.clear(); + mME_Code.clear(); + iE_Extensions.clear(); + + }; + private: + gU_Group_ID_t gU_Group_ID; + mME_Code_t mME_Code; + iE_Extensions_t iE_Extensions; + +}; +/* +GlobalENB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GlobalENB_ID_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}; + + }; + +}; +/* +GlobalENB-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + eNB-ID ENB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GlobalENB_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GlobalENB-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct eNB_ID_t : ENB_ID + { + static constexpr const char* name() {return "eNB_ID_t";} + using parent_t = ENB_ID; + + }; + eNB_ID_t& ref_eNB_ID() {return eNB_ID;} + eNB_ID_t const& ref_eNB_ID() const {return eNB_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(pLMN_Identity); + v(eNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(eNB_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + eNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + eNB_ID_t eNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +GlobalGNB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct GlobalGNB_ID_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}; + + }; + +}; +/* +GlobalGNB-ID ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + gNB-ID GNB-ID, + iE-Extensions ProtocolExtensionContainer { {GlobalGNB-ID-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct GlobalGNB_ID : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "GlobalGNB-ID";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct gNB_ID_t : GNB_ID + { + static constexpr const char* name() {return "gNB_ID_t";} + using parent_t = GNB_ID; + + }; + gNB_ID_t& ref_gNB_ID() {return gNB_ID;} + gNB_ID_t const& ref_gNB_ID() const {return gNB_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(pLMN_Identity); + v(gNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(gNB_ID); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + gNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + gNB_ID_t gNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +LoadIndicator ::= ENUMERATED { + lowLoad, + mediumLoad, + highLoad, + overLoad, + ... +} +*/ + +struct LoadIndicator : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "LoadIndicator";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + lowLoad + ,mediumLoad + ,highLoad + ,overLoad + } index_t; + +}; + +/* +HWLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct HWLoadIndicator_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}; + + }; + +}; +/* +HWLoadIndicator ::= SEQUENCE { + dLHWLoadIndicator LoadIndicator, + uLHWLoadIndicator LoadIndicator, + iE-Extensions ProtocolExtensionContainer { {HWLoadIndicator-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct HWLoadIndicator : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "HWLoadIndicator";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dLHWLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "dLHWLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + dLHWLoadIndicator_t& ref_dLHWLoadIndicator() {return dLHWLoadIndicator;} + dLHWLoadIndicator_t const& ref_dLHWLoadIndicator() const {return dLHWLoadIndicator;} + struct uLHWLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "uLHWLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + uLHWLoadIndicator_t& ref_uLHWLoadIndicator() {return uLHWLoadIndicator;} + uLHWLoadIndicator_t const& ref_uLHWLoadIndicator() const {return uLHWLoadIndicator;} + 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(dLHWLoadIndicator); + v(uLHWLoadIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dLHWLoadIndicator); + v(uLHWLoadIndicator); + v(iE_Extensions); + + }; + void clear() + { + dLHWLoadIndicator.clear(); + uLHWLoadIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + dLHWLoadIndicator_t dLHWLoadIndicator; + uLHWLoadIndicator_t uLHWLoadIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +HandoverReportType ::= ENUMERATED { + hoTooEarly, + hoToWrongCell, + ..., + interRATpingpong +} +*/ + +struct HandoverReportType : asn::enumerated<3, 1, true> +{ + static constexpr const char* name() {return "HandoverReportType";} + using parent_t = asn::enumerated<3, 1, true>; + typedef enum { + hoTooEarly + ,hoToWrongCell + ,interRATpingpong + } index_t; + +}; + +/* +NRrestrictioninEPSasSecondaryRAT ::= ENUMERATED { + nRrestrictedinEPSasSecondaryRAT, + ... +} +*/ + +struct NRrestrictioninEPSasSecondaryRAT : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NRrestrictioninEPSasSecondaryRAT";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nRrestrictedinEPSasSecondaryRAT + } index_t; + +}; + +/* +NRrestrictionin5GS ::= ENUMERATED { + nRrestrictedin5GS, + ... +} +*/ + +struct NRrestrictionin5GS : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NRrestrictionin5GS";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nRrestrictedin5GS + } index_t; + +}; + +/* +HandoverRestrictionList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NRrestrictioninEPSasSecondaryRAT CRITICALITY ignore EXTENSION NRrestrictioninEPSasSecondaryRAT PRESENCE optional}| + { ID id-CNTypeRestrictions CRITICALITY ignore EXTENSION CNTypeRestrictions PRESENCE optional}| + { ID id-NRrestrictionin5GS CRITICALITY ignore EXTENSION NRrestrictionin5GS PRESENCE optional}, + ... +} +*/ + +struct HandoverRestrictionList_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_NRrestrictioninEPSasSecondaryRAT() { set(id_NRrestrictioninEPSasSecondaryRAT); type=1;} + void select_id_CNTypeRestrictions() { set(id_CNTypeRestrictions); type=2;} + void select_id_NRrestrictionin5GS() { set(id_NRrestrictionin5GS); 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_NRrestrictioninEPSasSecondaryRAT)) { type = 1; return true; } + else if(equal(id_CNTypeRestrictions)) { type = 2; return true; } + else if(equal(id_NRrestrictionin5GS)) { 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_NRrestrictioninEPSasSecondaryRAT);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_CNTypeRestrictions);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_NRrestrictionin5GS);} 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_NRrestrictioninEPSasSecondaryRAT() { set(ignore); type=1;} + void select_id_CNTypeRestrictions() { set(ignore); type=2;} + void select_id_NRrestrictionin5GS() { 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;} + NRrestrictioninEPSasSecondaryRAT& select_id_NRrestrictioninEPSasSecondaryRAT() { return set(1); } + NRrestrictioninEPSasSecondaryRAT const* get_id_NRrestrictioninEPSasSecondaryRAT() const { return get(1); } + CNTypeRestrictions& select_id_CNTypeRestrictions() { return set(2); } + CNTypeRestrictions const* get_id_CNTypeRestrictions() const { return get(2); } + NRrestrictionin5GS& select_id_NRrestrictionin5GS() { return set(3); } + NRrestrictionin5GS const* get_id_NRrestrictionin5GS() 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_NRrestrictioninEPSasSecondaryRAT()); return true; + case 2: v(select_id_CNTypeRestrictions()); return true; + case 3: v(select_id_NRrestrictionin5GS()); 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(CNTypeRestrictions)]; + char dummy2[sizeof(NRrestrictionin5GS)]; + char dummy3[sizeof(NRrestrictioninEPSasSecondaryRAT)]; + + }; + 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_NRrestrictioninEPSasSecondaryRAT() { set(optional); type=1;} + void select_id_CNTypeRestrictions() { set(optional); type=2;} + void select_id_NRrestrictionin5GS() { 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}; + + }; + +}; +/* +HandoverRestrictionList ::= SEQUENCE { + servingPLMN PLMN-Identity, + equivalentPLMNs EPLMNs OPTIONAL, + forbiddenTAs ForbiddenTAs OPTIONAL, + forbiddenLAs ForbiddenLAs OPTIONAL, + forbiddenInterRATs ForbiddenInterRATs OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {HandoverRestrictionList-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct HandoverRestrictionList : asn::sequence<6, 0, true, 5> +{ + static constexpr const char* name() {return "HandoverRestrictionList";} + using parent_t = asn::sequence<6, 0, true, 5>; + struct servingPLMN_t : PLMN_Identity + { + static constexpr const char* name() {return "servingPLMN_t";} + using parent_t = PLMN_Identity; + + }; + servingPLMN_t& ref_servingPLMN() {return servingPLMN;} + servingPLMN_t const& ref_servingPLMN() const {return servingPLMN;} + struct equivalentPLMNs_t : EPLMNs + { + static constexpr const char* name() {return "equivalentPLMNs_t";} + using parent_t = EPLMNs; + static constexpr bool optional = true; + + }; + equivalentPLMNs_t& set_equivalentPLMNs() { equivalentPLMNs.setpresent(true); return equivalentPLMNs;} + equivalentPLMNs_t const* get_equivalentPLMNs() const {return equivalentPLMNs.is_valid() ? &equivalentPLMNs : nullptr;} + struct forbiddenTAs_t : ForbiddenTAs + { + static constexpr const char* name() {return "forbiddenTAs_t";} + using parent_t = ForbiddenTAs; + static constexpr bool optional = true; + + }; + forbiddenTAs_t& set_forbiddenTAs() { forbiddenTAs.setpresent(true); return forbiddenTAs;} + forbiddenTAs_t const* get_forbiddenTAs() const {return forbiddenTAs.is_valid() ? &forbiddenTAs : nullptr;} + struct forbiddenLAs_t : ForbiddenLAs + { + static constexpr const char* name() {return "forbiddenLAs_t";} + using parent_t = ForbiddenLAs; + static constexpr bool optional = true; + + }; + forbiddenLAs_t& set_forbiddenLAs() { forbiddenLAs.setpresent(true); return forbiddenLAs;} + forbiddenLAs_t const* get_forbiddenLAs() const {return forbiddenLAs.is_valid() ? &forbiddenLAs : nullptr;} + struct forbiddenInterRATs_t : ForbiddenInterRATs + { + static constexpr const char* name() {return "forbiddenInterRATs_t";} + using parent_t = ForbiddenInterRATs; + static constexpr bool optional = true; + + }; + forbiddenInterRATs_t& set_forbiddenInterRATs() { forbiddenInterRATs.setpresent(true); return forbiddenInterRATs;} + forbiddenInterRATs_t const* get_forbiddenInterRATs() const {return forbiddenInterRATs.is_valid() ? &forbiddenInterRATs : 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(servingPLMN); + v(equivalentPLMNs); + v(forbiddenTAs); + v(forbiddenLAs); + v(forbiddenInterRATs); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servingPLMN); + v(equivalentPLMNs); + v(forbiddenTAs); + v(forbiddenLAs); + v(forbiddenInterRATs); + v(iE_Extensions); + + }; + void clear() + { + servingPLMN.clear(); + equivalentPLMNs.clear(); + forbiddenTAs.clear(); + forbiddenLAs.clear(); + forbiddenInterRATs.clear(); + iE_Extensions.clear(); + + }; + private: + servingPLMN_t servingPLMN; + equivalentPLMNs_t equivalentPLMNs; + forbiddenTAs_t forbiddenTAs; + forbiddenLAs_t forbiddenLAs; + forbiddenInterRATs_t forbiddenInterRATs; + iE_Extensions_t iE_Extensions; + +}; +/* +IntegrityProtectionAlgorithms ::= BIT STRING (SIZE (16, ...)) +*/ + +struct IntegrityProtectionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "IntegrityProtectionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +InterfacesToTrace ::= BIT STRING (SIZE (8)) +*/ + +struct InterfacesToTrace : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "InterfacesToTrace";} + using parent_t = asn::bstring<>; + +}; + +/* +InvokeIndication ::= ENUMERATED{ + abs-information, + ..., + naics-information-start, + naics-information-stop +} +*/ + +struct InvokeIndication : asn::enumerated<3, 2, true> +{ + static constexpr const char* name() {return "InvokeIndication";} + using parent_t = asn::enumerated<3, 2, true>; + typedef enum { + abs_information + ,naics_information_start + ,naics_information_stop + } index_t; + +}; + +/* +LCID ::= INTEGER(1..32, ...) +*/ + +struct LCID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LCID";} + using parent_t = asn::integer<>; + +}; + +/* +LHN-ID ::= OCTET STRING(SIZE (32..256)) +*/ + +struct LHN_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "LHN-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +Time-UE-StayedInCell ::= INTEGER (0..4095) +*/ + +struct Time_UE_StayedInCell : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Time-UE-StayedInCell";} + using parent_t = asn::integer<>; + +}; + +/* +Time-UE-StayedInCell-EnhancedGranularity ::= INTEGER (0..40950) +*/ + +struct Time_UE_StayedInCell_EnhancedGranularity : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Time-UE-StayedInCell-EnhancedGranularity";} + using parent_t = asn::integer<>; + +}; + +/* +LastVisitedEUTRANCellInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { +-- Extension for Rel-11 to support enhanced granularity for time UE stayed in cell -- + { ID id-Time-UE-StayedInCell-EnhancedGranularity CRITICALITY ignore EXTENSION Time-UE-StayedInCell-EnhancedGranularity PRESENCE optional}| + { ID id-HO-cause CRITICALITY ignore EXTENSION Cause PRESENCE optional}, + ... +} +*/ + +struct LastVisitedEUTRANCellInformation_ExtIEs +{ + 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_Time_UE_StayedInCell_EnhancedGranularity() { set(id_Time_UE_StayedInCell_EnhancedGranularity); type=1;} + void select_id_HO_cause() { set(id_HO_cause); 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_Time_UE_StayedInCell_EnhancedGranularity)) { type = 1; return true; } + else if(equal(id_HO_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_Time_UE_StayedInCell_EnhancedGranularity);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_HO_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_Time_UE_StayedInCell_EnhancedGranularity() { set(ignore); type=1;} + void select_id_HO_cause() { 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;} + Time_UE_StayedInCell_EnhancedGranularity& select_id_Time_UE_StayedInCell_EnhancedGranularity() { return set(1); } + Time_UE_StayedInCell_EnhancedGranularity const* get_id_Time_UE_StayedInCell_EnhancedGranularity() const { return get(1); } + Cause& select_id_HO_cause() { return set(2); } + Cause const* get_id_HO_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_Time_UE_StayedInCell_EnhancedGranularity()); return true; + case 2: v(select_id_HO_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(Time_UE_StayedInCell_EnhancedGranularity)]; + + }; + 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_Time_UE_StayedInCell_EnhancedGranularity() { set(optional); type=1;} + void select_id_HO_cause() { 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}; + + }; + +}; +/* +LastVisitedEUTRANCellInformation ::= SEQUENCE { + global-Cell-ID ECGI, + cellType CellType, + time-UE-StayedInCell Time-UE-StayedInCell, + iE-Extensions ProtocolExtensionContainer { {LastVisitedEUTRANCellInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct LastVisitedEUTRANCellInformation : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "LastVisitedEUTRANCellInformation";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct global_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "global_Cell_ID_t";} + using parent_t = ECGI; + + }; + global_Cell_ID_t& ref_global_Cell_ID() {return global_Cell_ID;} + global_Cell_ID_t const& ref_global_Cell_ID() const {return global_Cell_ID;} + struct cellType_t : CellType + { + static constexpr const char* name() {return "cellType_t";} + using parent_t = CellType; + + }; + cellType_t& ref_cellType() {return cellType;} + cellType_t const& ref_cellType() const {return cellType;} + struct time_UE_StayedInCell_t : Time_UE_StayedInCell + { + static constexpr const char* name() {return "time_UE_StayedInCell_t";} + using parent_t = Time_UE_StayedInCell; + + }; + time_UE_StayedInCell_t& ref_time_UE_StayedInCell() {return time_UE_StayedInCell;} + time_UE_StayedInCell_t const& ref_time_UE_StayedInCell() const {return time_UE_StayedInCell;} + 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(global_Cell_ID); + v(cellType); + v(time_UE_StayedInCell); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(global_Cell_ID); + v(cellType); + v(time_UE_StayedInCell); + v(iE_Extensions); + + }; + void clear() + { + global_Cell_ID.clear(); + cellType.clear(); + time_UE_StayedInCell.clear(); + iE_Extensions.clear(); + + }; + private: + global_Cell_ID_t global_Cell_ID; + cellType_t cellType; + time_UE_StayedInCell_t time_UE_StayedInCell; + iE_Extensions_t iE_Extensions; + +}; +/* +LastVisitedUTRANCellInformation ::= OCTET STRING +*/ + +struct LastVisitedUTRANCellInformation : asn::ostring<> +{ + static constexpr const char* name() {return "LastVisitedUTRANCellInformation";} + using parent_t = asn::ostring<>; + +}; + +/* +LastVisitedGERANCellInformation ::= CHOICE { + undefined NULL, + ... +} +*/ + +struct LastVisitedGERANCellInformation : asn::choice<1, 0, true> +{ + static constexpr const char* name() {return "LastVisitedGERANCellInformation";} + using parent_t = asn::choice<1, 0, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 2;} + void set_unknown() { set_index(2); } + ~LastVisitedGERANCellInformation() {clear();} + struct undefined_t : asn::nulltype + { + static constexpr const char* name() {return "undefined_t";} + using parent_t = asn::nulltype; + + }; + void clear() + { + switch(get_index()) + { + case 1: 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()); + } + return false; + + } + template bool encode(V& v) const + { + switch(get_index()) + { + case 1: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + + } + undefined_t& select_undefined() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + undefined_t const* get_undefined() const { if(get_index() == 1) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(undefined_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +LastVisitedNGRANCellInformation ::= OCTET STRING +*/ + +struct LastVisitedNGRANCellInformation : asn::ostring<> +{ + static constexpr const char* name() {return "LastVisitedNGRANCellInformation";} + using parent_t = asn::ostring<>; + +}; + +/* +LastVisitedCell-Item ::= CHOICE { + e-UTRAN-Cell LastVisitedEUTRANCellInformation, + uTRAN-Cell LastVisitedUTRANCellInformation, + gERAN-Cell LastVisitedGERANCellInformation, + ..., + nG-RAN-Cell LastVisitedNGRANCellInformation +} +*/ + +struct LastVisitedCell_Item : asn::choice<4, 1, true> +{ + static constexpr const char* name() {return "LastVisitedCell-Item";} + using parent_t = asn::choice<4, 1, true>; + index_type get_index() const {return index;} + bool is_unknown() const {return index == 5;} + void set_unknown() { set_index(5); } + ~LastVisitedCell_Item() {clear();} + struct e_UTRAN_Cell_t : LastVisitedEUTRANCellInformation + { + static constexpr const char* name() {return "e_UTRAN_Cell_t";} + using parent_t = LastVisitedEUTRANCellInformation; + + }; + struct uTRAN_Cell_t : LastVisitedUTRANCellInformation + { + static constexpr const char* name() {return "uTRAN_Cell_t";} + using parent_t = LastVisitedUTRANCellInformation; + + }; + struct gERAN_Cell_t : LastVisitedGERANCellInformation + { + static constexpr const char* name() {return "gERAN_Cell_t";} + using parent_t = LastVisitedGERANCellInformation; + + }; + struct nG_RAN_Cell_t : LastVisitedNGRANCellInformation + { + static constexpr const char* name() {return "nG_RAN_Cell_t";} + using parent_t = LastVisitedNGRANCellInformation; + + }; + void clear() + { + switch(get_index()) + { + case 1: var.destroy(); break; + case 2: var.destroy(); break; + case 3: var.destroy(); break; + case 4: 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()); + case 3: set_index(3); return v(var.build()); + case 4: set_index(4); 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()); + case 3: return v(var.as()); + case 4: return v(var.as()); + } + return false; + } + template static inline void enumerate(V& v) + { + v.template operator()(1); + v.template operator()(2); + v.template operator()(3); + v.template operator()(4); + + } + e_UTRAN_Cell_t& select_e_UTRAN_Cell() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + e_UTRAN_Cell_t const* get_e_UTRAN_Cell() const { if(get_index() == 1) { return &var.as();} return nullptr; } + uTRAN_Cell_t& select_uTRAN_Cell() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + uTRAN_Cell_t const* get_uTRAN_Cell() const { if(get_index() == 2) { return &var.as();} return nullptr; } + gERAN_Cell_t& select_gERAN_Cell() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} + gERAN_Cell_t const* get_gERAN_Cell() const { if(get_index() == 3) { return &var.as();} return nullptr; } + nG_RAN_Cell_t& select_nG_RAN_Cell() { if(get_index() != 4) { clear(); set_index(4); return var.build();} return var.as();} + nG_RAN_Cell_t const* get_nG_RAN_Cell() const { if(get_index() == 4) { return &var.as();} return nullptr; } + private: + void set_index(index_type i) {index = i; base::set();} + union union_type + { + char dummy1[sizeof(e_UTRAN_Cell_t)]; + char dummy2[sizeof(uTRAN_Cell_t)]; + char dummy3[sizeof(gERAN_Cell_t)]; + char dummy4[sizeof(nG_RAN_Cell_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +Links-to-log ::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...} +*/ + +struct Links_to_log : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "Links-to-log";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + uplink + ,downlink + ,both_uplink_and_downlink + } index_t; + +}; + +/* +ReportArea ::= ENUMERATED{ + ecgi, + ... +} +*/ + +struct ReportArea : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "ReportArea";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + ecgi + } index_t; + +}; + +/* +LocationReportingInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::={ + ... +} +*/ + +struct LocationReportingInformation_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}; + + }; + +}; +/* +LocationReportingInformation ::= SEQUENCE { + eventType EventType, + reportArea ReportArea, + iE-Extensions ProtocolExtensionContainer { {LocationReportingInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct LocationReportingInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "LocationReportingInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct eventType_t : EventType + { + static constexpr const char* name() {return "eventType_t";} + using parent_t = EventType; + + }; + eventType_t& ref_eventType() {return eventType;} + eventType_t const& ref_eventType() const {return eventType;} + struct reportArea_t : ReportArea + { + static constexpr const char* name() {return "reportArea_t";} + using parent_t = ReportArea; + + }; + reportArea_t& ref_reportArea() {return reportArea;} + reportArea_t const& ref_reportArea() const {return reportArea;} + 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(eventType); + v(reportArea); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eventType); + v(reportArea); + v(iE_Extensions); + + }; + void clear() + { + eventType.clear(); + reportArea.clear(); + iE_Extensions.clear(); + + }; + private: + eventType_t eventType; + reportArea_t reportArea; + iE_Extensions_t iE_Extensions; + +}; +/* +ReportIntervalMDT ::= ENUMERATED {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60} +*/ + +struct ReportIntervalMDT : asn::enumerated<13, 0, false> +{ + static constexpr const char* name() {return "ReportIntervalMDT";} + using parent_t = asn::enumerated<13, 0, false>; + typedef enum { + ms120 + ,ms240 + ,ms480 + ,ms640 + ,ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + ,min6 + ,min12 + ,min30 + ,min60 + } index_t; + +}; + +/* +ReportAmountMDT ::= ENUMERATED{r1, r2, r4, r8, r16, r32, r64, rinfinity} +*/ + +struct ReportAmountMDT : asn::enumerated<8, 0, false> +{ + static constexpr const char* name() {return "ReportAmountMDT";} + using parent_t = asn::enumerated<8, 0, false>; + typedef enum { + r1 + ,r2 + ,r4 + ,r8 + ,r16 + ,r32 + ,r64 + ,rinfinity + } index_t; + +}; + +/* +M1PeriodicReporting-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M1PeriodicReporting_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}; + + }; + +}; +/* +M1PeriodicReporting ::= SEQUENCE { + reportInterval ReportIntervalMDT, + reportAmount ReportAmountMDT, + iE-Extensions ProtocolExtensionContainer { {M1PeriodicReporting-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M1PeriodicReporting : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M1PeriodicReporting";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct reportInterval_t : ReportIntervalMDT + { + static constexpr const char* name() {return "reportInterval_t";} + using parent_t = ReportIntervalMDT; + + }; + reportInterval_t& ref_reportInterval() {return reportInterval;} + reportInterval_t const& ref_reportInterval() const {return reportInterval;} + struct reportAmount_t : ReportAmountMDT + { + static constexpr const char* name() {return "reportAmount_t";} + using parent_t = ReportAmountMDT; + + }; + reportAmount_t& ref_reportAmount() {return reportAmount;} + reportAmount_t const& ref_reportAmount() const {return reportAmount;} + 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(reportInterval); + v(reportAmount); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(reportInterval); + v(reportAmount); + v(iE_Extensions); + + }; + void clear() + { + reportInterval.clear(); + reportAmount.clear(); + iE_Extensions.clear(); + + }; + private: + reportInterval_t reportInterval; + reportAmount_t reportAmount; + iE_Extensions_t iE_Extensions; + +}; +/* +M1ReportingTrigger::= ENUMERATED{ + periodic, + a2eventtriggered, + ..., + a2eventtriggered-periodic +} +*/ + +struct M1ReportingTrigger : asn::enumerated<3, 1, true> +{ + static constexpr const char* name() {return "M1ReportingTrigger";} + using parent_t = asn::enumerated<3, 1, true>; + typedef enum { + periodic + ,a2eventtriggered + ,a2eventtriggered_periodic + } index_t; + +}; + +/* +Threshold-RSRP ::= INTEGER(0..97) +*/ + +struct Threshold_RSRP : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Threshold-RSRP";} + using parent_t = asn::integer<>; + +}; + +/* +Threshold-RSRQ ::= INTEGER(0..34) +*/ + +struct Threshold_RSRQ : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Threshold-RSRQ";} + using parent_t = asn::integer<>; + +}; + +/* +MeasurementThresholdA2 ::= CHOICE { + threshold-RSRP Threshold-RSRP, + threshold-RSRQ Threshold-RSRQ, + ... +} +*/ + +struct MeasurementThresholdA2 : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "MeasurementThresholdA2";} + 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); } + ~MeasurementThresholdA2() {clear();} + struct threshold_RSRP_t : Threshold_RSRP + { + static constexpr const char* name() {return "threshold_RSRP_t";} + using parent_t = Threshold_RSRP; + + }; + struct threshold_RSRQ_t : Threshold_RSRQ + { + static constexpr const char* name() {return "threshold_RSRQ_t";} + using parent_t = Threshold_RSRQ; + + }; + 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); + + } + threshold_RSRP_t& select_threshold_RSRP() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + threshold_RSRP_t const* get_threshold_RSRP() const { if(get_index() == 1) { return &var.as();} return nullptr; } + threshold_RSRQ_t& select_threshold_RSRQ() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + threshold_RSRQ_t const* get_threshold_RSRQ() 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(threshold_RSRP_t)]; + char dummy2[sizeof(threshold_RSRQ_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +M1ThresholdEventA2-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M1ThresholdEventA2_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}; + + }; + +}; +/* +M1ThresholdEventA2 ::= SEQUENCE { + measurementThreshold MeasurementThresholdA2, + iE-Extensions ProtocolExtensionContainer { {M1ThresholdEventA2-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M1ThresholdEventA2 : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "M1ThresholdEventA2";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct measurementThreshold_t : MeasurementThresholdA2 + { + static constexpr const char* name() {return "measurementThreshold_t";} + using parent_t = MeasurementThresholdA2; + + }; + measurementThreshold_t& ref_measurementThreshold() {return measurementThreshold;} + measurementThreshold_t const& ref_measurementThreshold() const {return measurementThreshold;} + 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(measurementThreshold); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(measurementThreshold); + v(iE_Extensions); + + }; + void clear() + { + measurementThreshold.clear(); + iE_Extensions.clear(); + + }; + private: + measurementThreshold_t measurementThreshold; + iE_Extensions_t iE_Extensions; + +}; +/* +M3period ::= ENUMERATED {ms100, ms1000, ms10000, ... } +*/ + +struct M3period : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "M3period";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + ms100 + ,ms1000 + ,ms10000 + } index_t; + +}; + +/* +M3Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M3Configuration_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}; + + }; + +}; +/* +M3Configuration ::= SEQUENCE { + m3period M3period, + iE-Extensions ProtocolExtensionContainer { {M3Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M3Configuration : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "M3Configuration";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct m3period_t : M3period + { + static constexpr const char* name() {return "m3period_t";} + using parent_t = M3period; + + }; + m3period_t& ref_m3period() {return m3period;} + m3period_t const& ref_m3period() const {return m3period;} + 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(m3period); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m3period); + v(iE_Extensions); + + }; + void clear() + { + m3period.clear(); + iE_Extensions.clear(); + + }; + private: + m3period_t m3period; + iE_Extensions_t iE_Extensions; + +}; +/* +M4period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } +*/ + +struct M4period : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "M4period";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + } index_t; + +}; + +/* +M4Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M4Configuration_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}; + + }; + +}; +/* +M4Configuration ::= SEQUENCE { + m4period M4period, + m4-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M4Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M4Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M4Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m4period_t : M4period + { + static constexpr const char* name() {return "m4period_t";} + using parent_t = M4period; + + }; + m4period_t& ref_m4period() {return m4period;} + m4period_t const& ref_m4period() const {return m4period;} + struct m4_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m4_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m4_links_to_log_t& ref_m4_links_to_log() {return m4_links_to_log;} + m4_links_to_log_t const& ref_m4_links_to_log() const {return m4_links_to_log;} + 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(m4period); + v(m4_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m4period); + v(m4_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m4period.clear(); + m4_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m4period_t m4period; + m4_links_to_log_t m4_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M5period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } +*/ + +struct M5period : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "M5period";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + ,min1 + } index_t; + +}; + +/* +M5Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M5Configuration_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}; + + }; + +}; +/* +M5Configuration ::= SEQUENCE { + m5period M5period, + m5-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M5Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M5Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M5Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m5period_t : M5period + { + static constexpr const char* name() {return "m5period_t";} + using parent_t = M5period; + + }; + m5period_t& ref_m5period() {return m5period;} + m5period_t const& ref_m5period() const {return m5period;} + struct m5_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m5_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m5_links_to_log_t& ref_m5_links_to_log() {return m5_links_to_log;} + m5_links_to_log_t const& ref_m5_links_to_log() const {return m5_links_to_log;} + 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(m5period); + v(m5_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m5period); + v(m5_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m5period.clear(); + m5_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m5period_t m5period; + m5_links_to_log_t m5_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M6report-interval ::= ENUMERATED { ms1024, ms2048, ms5120, ms10240, ... } +*/ + +struct M6report_interval : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "M6report-interval";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + ms1024 + ,ms2048 + ,ms5120 + ,ms10240 + } index_t; + +}; + +/* +M6delay-threshold ::= ENUMERATED { ms30, ms40, ms50, ms60, ms70, ms80, ms90, ms100, ms150, ms300, ms500, ms750, ... } +*/ + +struct M6delay_threshold : asn::enumerated<12, 0, true> +{ + static constexpr const char* name() {return "M6delay-threshold";} + using parent_t = asn::enumerated<12, 0, true>; + typedef enum { + ms30 + ,ms40 + ,ms50 + ,ms60 + ,ms70 + ,ms80 + ,ms90 + ,ms100 + ,ms150 + ,ms300 + ,ms500 + ,ms750 + } index_t; + +}; + +/* +M6Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M6Configuration_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}; + + }; + +}; +/* +M6Configuration ::= SEQUENCE { + m6report-interval M6report-interval, + m6delay-threshold M6delay-threshold OPTIONAL, +-- This IE shall be present if the M6 Links to log IE is set to “uplink” or to “both-uplink-and-downlink” -- + m6-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M6Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M6Configuration : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "M6Configuration";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct m6report_interval_t : M6report_interval + { + static constexpr const char* name() {return "m6report_interval_t";} + using parent_t = M6report_interval; + + }; + m6report_interval_t& ref_m6report_interval() {return m6report_interval;} + m6report_interval_t const& ref_m6report_interval() const {return m6report_interval;} + struct m6delay_threshold_t : M6delay_threshold + { + static constexpr const char* name() {return "m6delay_threshold_t";} + using parent_t = M6delay_threshold; + static constexpr bool optional = true; + + }; + m6delay_threshold_t& set_m6delay_threshold() { m6delay_threshold.setpresent(true); return m6delay_threshold;} + m6delay_threshold_t const* get_m6delay_threshold() const {return m6delay_threshold.is_valid() ? &m6delay_threshold : nullptr;} + struct m6_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m6_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m6_links_to_log_t& ref_m6_links_to_log() {return m6_links_to_log;} + m6_links_to_log_t const& ref_m6_links_to_log() const {return m6_links_to_log;} + 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(m6report_interval); + v(m6delay_threshold); + v(m6_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m6report_interval); + v(m6delay_threshold); + v(m6_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m6report_interval.clear(); + m6delay_threshold.clear(); + m6_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m6report_interval_t m6report_interval; + m6delay_threshold_t m6delay_threshold; + m6_links_to_log_t m6_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +M7period ::= INTEGER(1..60, ...) +*/ + +struct M7period : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "M7period";} + using parent_t = asn::integer<>; + +}; + +/* +M7Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct M7Configuration_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}; + + }; + +}; +/* +M7Configuration ::= SEQUENCE { + m7period M7period, + m7-links-to-log Links-to-log, + iE-Extensions ProtocolExtensionContainer { {M7Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct M7Configuration : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "M7Configuration";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct m7period_t : M7period + { + static constexpr const char* name() {return "m7period_t";} + using parent_t = M7period; + + }; + m7period_t& ref_m7period() {return m7period;} + m7period_t const& ref_m7period() const {return m7period;} + struct m7_links_to_log_t : Links_to_log + { + static constexpr const char* name() {return "m7_links_to_log_t";} + using parent_t = Links_to_log; + + }; + m7_links_to_log_t& ref_m7_links_to_log() {return m7_links_to_log;} + m7_links_to_log_t const& ref_m7_links_to_log() const {return m7_links_to_log;} + 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(m7period); + v(m7_links_to_log); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(m7period); + v(m7_links_to_log); + v(iE_Extensions); + + }; + void clear() + { + m7period.clear(); + m7_links_to_log.clear(); + iE_Extensions.clear(); + + }; + private: + m7period_t m7period; + m7_links_to_log_t m7_links_to_log; + iE_Extensions_t iE_Extensions; + +}; +/* +MBMS-Service-Area-Identity ::= OCTET STRING (SIZE (2)) +*/ + +struct MBMS_Service_Area_Identity : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MBMS-Service-Area-Identity";} + using parent_t = asn::ostring<>; + +}; + +/* +MBMS-Service-Area-Identity-List ::= SEQUENCE (SIZE(1.. maxnoofMBMSServiceAreaIdentities)) OF MBMS-Service-Area-Identity +*/ + +struct MBMS_Service_Area_Identity_List_elm : MBMS_Service_Area_Identity +{ + static constexpr const char* name() {return "MBMS_Service_Area_Identity_List_elm";} + using parent_t = MBMS_Service_Area_Identity; + +}; +struct MBMS_Service_Area_Identity_List : asn::sequenceof +{ + static constexpr const char* name() {return "MBMS-Service-Area-Identity-List";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RadioframeAllocationPeriod ::= ENUMERATED{ + n1, + n2, + n4, + n8, + n16, + n32, + ... +} +*/ + +struct RadioframeAllocationPeriod : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "RadioframeAllocationPeriod";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + n1 + ,n2 + ,n4 + ,n8 + ,n16 + ,n32 + } index_t; + +}; + +/* +RadioframeAllocationOffset ::= INTEGER (0..7, ...) +*/ + +struct RadioframeAllocationOffset : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "RadioframeAllocationOffset";} + using parent_t = asn::integer<>; + +}; + +/* +Oneframe ::= BIT STRING (SIZE (6)) +*/ + +struct Oneframe : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Oneframe";} + using parent_t = asn::bstring<>; + +}; + +/* +SubframeAllocation ::= CHOICE { + oneframe Oneframe, + fourframes Fourframes, + ... +} +*/ + +struct SubframeAllocation : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "SubframeAllocation";} + 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); } + ~SubframeAllocation() {clear();} + struct oneframe_t : Oneframe + { + static constexpr const char* name() {return "oneframe_t";} + using parent_t = Oneframe; + + }; + struct fourframes_t : Fourframes + { + static constexpr const char* name() {return "fourframes_t";} + using parent_t = Fourframes; + + }; + 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); + + } + oneframe_t& select_oneframe() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + oneframe_t const* get_oneframe() const { if(get_index() == 1) { return &var.as();} return nullptr; } + fourframes_t& select_fourframes() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + fourframes_t const* get_fourframes() 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(oneframe_t)]; + char dummy2[sizeof(fourframes_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +MBSFN-Subframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct MBSFN_Subframe_Info_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}; + + }; + +}; +/* +MBSFN-Subframe-Info ::= SEQUENCE { + radioframeAllocationPeriod RadioframeAllocationPeriod, + radioframeAllocationOffset RadioframeAllocationOffset, + subframeAllocation SubframeAllocation, + iE-Extensions ProtocolExtensionContainer { {MBSFN-Subframe-Info-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MBSFN_Subframe_Info : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "MBSFN-Subframe-Info";} + using parent_t = asn::sequence<4, 0, true, 1>; + struct radioframeAllocationPeriod_t : RadioframeAllocationPeriod + { + static constexpr const char* name() {return "radioframeAllocationPeriod_t";} + using parent_t = RadioframeAllocationPeriod; + + }; + radioframeAllocationPeriod_t& ref_radioframeAllocationPeriod() {return radioframeAllocationPeriod;} + radioframeAllocationPeriod_t const& ref_radioframeAllocationPeriod() const {return radioframeAllocationPeriod;} + struct radioframeAllocationOffset_t : RadioframeAllocationOffset + { + static constexpr const char* name() {return "radioframeAllocationOffset_t";} + using parent_t = RadioframeAllocationOffset; + + }; + radioframeAllocationOffset_t& ref_radioframeAllocationOffset() {return radioframeAllocationOffset;} + radioframeAllocationOffset_t const& ref_radioframeAllocationOffset() const {return radioframeAllocationOffset;} + struct subframeAllocation_t : SubframeAllocation + { + static constexpr const char* name() {return "subframeAllocation_t";} + using parent_t = SubframeAllocation; + + }; + subframeAllocation_t& ref_subframeAllocation() {return subframeAllocation;} + subframeAllocation_t const& ref_subframeAllocation() const {return subframeAllocation;} + 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(radioframeAllocationPeriod); + v(radioframeAllocationOffset); + v(subframeAllocation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(radioframeAllocationPeriod); + v(radioframeAllocationOffset); + v(subframeAllocation); + v(iE_Extensions); + + }; + void clear() + { + radioframeAllocationPeriod.clear(); + radioframeAllocationOffset.clear(); + subframeAllocation.clear(); + iE_Extensions.clear(); + + }; + private: + radioframeAllocationPeriod_t radioframeAllocationPeriod; + radioframeAllocationOffset_t radioframeAllocationOffset; + subframeAllocation_t subframeAllocation; + iE_Extensions_t iE_Extensions; + +}; +/* +MBSFN-Subframe-Infolist::= SEQUENCE (SIZE(1.. maxnoofMBSFN)) OF MBSFN-Subframe-Info +*/ + +struct MBSFN_Subframe_Infolist_elm : MBSFN_Subframe_Info +{ + static constexpr const char* name() {return "MBSFN_Subframe_Infolist_elm";} + using parent_t = MBSFN_Subframe_Info; + +}; +struct MBSFN_Subframe_Infolist : asn::sequenceof +{ + static constexpr const char* name() {return "MBSFN-Subframe-Infolist";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +MDT-Activation ::= ENUMERATED { + immediate-MDT-only, + immediate-MDT-and-Trace, + ... +} +*/ + +struct MDT_Activation : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "MDT-Activation";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + immediate_MDT_only + ,immediate_MDT_and_Trace + } index_t; + +}; + +/* +MeasurementsToActivate::= BIT STRING (SIZE (8)) +*/ + +struct MeasurementsToActivate : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MeasurementsToActivate";} + using parent_t = asn::bstring<>; + +}; + +/* +MDT-Location-Info ::= BIT STRING (SIZE (8)) +*/ + +struct MDT_Location_Info : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "MDT-Location-Info";} + using parent_t = asn::bstring<>; + +}; + +/* +MDTPLMNList ::= SEQUENCE (SIZE(1..maxnoofMDTPLMNs)) OF PLMN-Identity +*/ + +struct MDTPLMNList_elm : PLMN_Identity +{ + static constexpr const char* name() {return "MDTPLMNList_elm";} + using parent_t = PLMN_Identity; + +}; +struct MDTPLMNList : asn::sequenceof +{ + static constexpr const char* name() {return "MDTPLMNList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +WLANMeasConfig::= ENUMERATED {setup,...} +*/ + +struct WLANMeasConfig : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "WLANMeasConfig";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + setup + } index_t; + +}; + +/* +WLANName ::= OCTET STRING (SIZE (1..32)) +*/ + +struct WLANName : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WLANName";} + using parent_t = asn::ostring<>; + +}; + +/* +WLANMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofWLANName)) OF WLANName +*/ + +struct WLANMeasConfigNameList_elm : WLANName +{ + static constexpr const char* name() {return "WLANMeasConfigNameList_elm";} + using parent_t = WLANName; + +}; +struct WLANMeasConfigNameList : asn::sequenceof +{ + static constexpr const char* name() {return "WLANMeasConfigNameList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +WLANMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct WLANMeasurementConfiguration_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}; + + }; + +}; +/* +WLANMeasurementConfiguration ::= SEQUENCE { + wlanMeasConfig WLANMeasConfig, + wlanMeasConfigNameList WLANMeasConfigNameList OPTIONAL, + wlan-rssi ENUMERATED {true, ...} OPTIONAL, + wlan-rtt ENUMERATED {true, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {WLANMeasurementConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct WLANMeasurementConfiguration : asn::sequence<5, 0, true, 4> +{ + static constexpr const char* name() {return "WLANMeasurementConfiguration";} + using parent_t = asn::sequence<5, 0, true, 4>; + struct wlanMeasConfig_t : WLANMeasConfig + { + static constexpr const char* name() {return "wlanMeasConfig_t";} + using parent_t = WLANMeasConfig; + + }; + wlanMeasConfig_t& ref_wlanMeasConfig() {return wlanMeasConfig;} + wlanMeasConfig_t const& ref_wlanMeasConfig() const {return wlanMeasConfig;} + struct wlanMeasConfigNameList_t : WLANMeasConfigNameList + { + static constexpr const char* name() {return "wlanMeasConfigNameList_t";} + using parent_t = WLANMeasConfigNameList; + static constexpr bool optional = true; + + }; + wlanMeasConfigNameList_t& set_wlanMeasConfigNameList() { wlanMeasConfigNameList.setpresent(true); return wlanMeasConfigNameList;} + wlanMeasConfigNameList_t const* get_wlanMeasConfigNameList() const {return wlanMeasConfigNameList.is_valid() ? &wlanMeasConfigNameList : nullptr;} + struct wlan_rssi_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "wlan_rssi_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + wlan_rssi_t& set_wlan_rssi() { wlan_rssi.setpresent(true); return wlan_rssi;} + wlan_rssi_t const* get_wlan_rssi() const {return wlan_rssi.is_valid() ? &wlan_rssi : nullptr;} + struct wlan_rtt_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "wlan_rtt_t";} + using parent_t = asn::enumerated<1, 0, true>; + static constexpr bool optional = true; + typedef enum { + True + } index_t; + + }; + + wlan_rtt_t& set_wlan_rtt() { wlan_rtt.setpresent(true); return wlan_rtt;} + wlan_rtt_t const* get_wlan_rtt() const {return wlan_rtt.is_valid() ? &wlan_rtt : 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(wlanMeasConfig); + v(wlanMeasConfigNameList); + v(wlan_rssi); + v(wlan_rtt); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(wlanMeasConfig); + v(wlanMeasConfigNameList); + v(wlan_rssi); + v(wlan_rtt); + v(iE_Extensions); + + }; + void clear() + { + wlanMeasConfig.clear(); + wlanMeasConfigNameList.clear(); + wlan_rssi.clear(); + wlan_rtt.clear(); + iE_Extensions.clear(); + + }; + private: + wlanMeasConfig_t wlanMeasConfig; + wlanMeasConfigNameList_t wlanMeasConfigNameList; + wlan_rssi_t wlan_rssi; + wlan_rtt_t wlan_rtt; + iE_Extensions_t iE_Extensions; + +}; +/* +MDT-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-M3Configuration CRITICALITY ignore EXTENSION M3Configuration PRESENCE conditional}| + {ID id-M4Configuration CRITICALITY ignore EXTENSION M4Configuration PRESENCE conditional}| + {ID id-M5Configuration CRITICALITY ignore EXTENSION M5Configuration PRESENCE conditional}| + {ID id-MDT-Location-Info CRITICALITY ignore EXTENSION MDT-Location-Info PRESENCE optional}| + {ID id-SignallingBasedMDTPLMNList CRITICALITY ignore EXTENSION MDTPLMNList PRESENCE optional}| + {ID id-M6Configuration CRITICALITY ignore EXTENSION M6Configuration PRESENCE conditional}| + {ID id-M7Configuration CRITICALITY ignore EXTENSION M7Configuration PRESENCE conditional}| + { ID id-BluetoothMeasurementConfiguration CRITICALITY ignore EXTENSION BluetoothMeasurementConfiguration PRESENCE optional}| + { ID id-WLANMeasurementConfiguration CRITICALITY ignore EXTENSION WLANMeasurementConfiguration PRESENCE optional}, + ... +} +*/ + +struct MDT_Configuration_ExtIEs +{ + 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_M3Configuration() { set(id_M3Configuration); type=1;} + void select_id_M4Configuration() { set(id_M4Configuration); type=2;} + void select_id_M5Configuration() { set(id_M5Configuration); type=3;} + void select_id_MDT_Location_Info() { set(id_MDT_Location_Info); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(id_SignallingBasedMDTPLMNList); type=5;} + void select_id_M6Configuration() { set(id_M6Configuration); type=6;} + void select_id_M7Configuration() { set(id_M7Configuration); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(id_BluetoothMeasurementConfiguration); type=8;} + void select_id_WLANMeasurementConfiguration() { set(id_WLANMeasurementConfiguration); type=9;} + 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_M3Configuration)) { type = 1; return true; } + else if(equal(id_M4Configuration)) { type = 2; return true; } + else if(equal(id_M5Configuration)) { type = 3; return true; } + else if(equal(id_MDT_Location_Info)) { type = 4; return true; } + else if(equal(id_SignallingBasedMDTPLMNList)) { type = 5; return true; } + else if(equal(id_M6Configuration)) { type = 6; return true; } + else if(equal(id_M7Configuration)) { type = 7; return true; } + else if(equal(id_BluetoothMeasurementConfiguration)) { type = 8; return true; } + else if(equal(id_WLANMeasurementConfiguration)) { 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_M3Configuration);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_M4Configuration);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_M5Configuration);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_MDT_Location_Info);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_SignallingBasedMDTPLMNList);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_M6Configuration);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_M7Configuration);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_BluetoothMeasurementConfiguration);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_WLANMeasurementConfiguration);} 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_M3Configuration() { set(ignore); type=1;} + void select_id_M4Configuration() { set(ignore); type=2;} + void select_id_M5Configuration() { set(ignore); type=3;} + void select_id_MDT_Location_Info() { set(ignore); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(ignore); type=5;} + void select_id_M6Configuration() { set(ignore); type=6;} + void select_id_M7Configuration() { set(ignore); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(ignore); type=8;} + void select_id_WLANMeasurementConfiguration() { set(ignore); type=9;} + 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 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(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; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + 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;} + M3Configuration& select_id_M3Configuration() { return set(1); } + M3Configuration const* get_id_M3Configuration() const { return get(1); } + M4Configuration& select_id_M4Configuration() { return set(2); } + M4Configuration const* get_id_M4Configuration() const { return get(2); } + M5Configuration& select_id_M5Configuration() { return set(3); } + M5Configuration const* get_id_M5Configuration() const { return get(3); } + MDT_Location_Info& select_id_MDT_Location_Info() { return set(4); } + MDT_Location_Info const* get_id_MDT_Location_Info() const { return get(4); } + MDTPLMNList& select_id_SignallingBasedMDTPLMNList() { return set(5); } + MDTPLMNList const* get_id_SignallingBasedMDTPLMNList() const { return get(5); } + M6Configuration& select_id_M6Configuration() { return set(6); } + M6Configuration const* get_id_M6Configuration() const { return get(6); } + M7Configuration& select_id_M7Configuration() { return set(7); } + M7Configuration const* get_id_M7Configuration() const { return get(7); } + BluetoothMeasurementConfiguration& select_id_BluetoothMeasurementConfiguration() { return set(8); } + BluetoothMeasurementConfiguration const* get_id_BluetoothMeasurementConfiguration() const { return get(8); } + WLANMeasurementConfiguration& select_id_WLANMeasurementConfiguration() { return set(9); } + WLANMeasurementConfiguration const* get_id_WLANMeasurementConfiguration() 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_M3Configuration()); return true; + case 2: v(select_id_M4Configuration()); return true; + case 3: v(select_id_M5Configuration()); return true; + case 4: v(select_id_MDT_Location_Info()); return true; + case 5: v(select_id_SignallingBasedMDTPLMNList()); return true; + case 6: v(select_id_M6Configuration()); return true; + case 7: v(select_id_M7Configuration()); return true; + case 8: v(select_id_BluetoothMeasurementConfiguration()); return true; + case 9: v(select_id_WLANMeasurementConfiguration()); 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(BluetoothMeasurementConfiguration)]; + char dummy2[sizeof(M3Configuration)]; + char dummy3[sizeof(M4Configuration)]; + char dummy4[sizeof(M5Configuration)]; + char dummy5[sizeof(M6Configuration)]; + char dummy6[sizeof(M7Configuration)]; + char dummy7[sizeof(MDTPLMNList)]; + char dummy8[sizeof(MDT_Location_Info)]; + char dummy9[sizeof(WLANMeasurementConfiguration)]; + + }; + 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_M3Configuration() { set(conditional); type=1;} + void select_id_M4Configuration() { set(conditional); type=2;} + void select_id_M5Configuration() { set(conditional); type=3;} + void select_id_MDT_Location_Info() { set(optional); type=4;} + void select_id_SignallingBasedMDTPLMNList() { set(optional); type=5;} + void select_id_M6Configuration() { set(conditional); type=6;} + void select_id_M7Configuration() { set(conditional); type=7;} + void select_id_BluetoothMeasurementConfiguration() { set(optional); type=8;} + void select_id_WLANMeasurementConfiguration() { set(optional); type=9;} + 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(conditional)) { type = 1; return true; } + else if(equal(conditional)) { type = 2; return true; } + else if(equal(conditional)) { type = 3; return true; } + else if(equal(optional)) { type = 4; return true; } + else if(equal(optional)) { type = 5; return true; } + else if(equal(conditional)) { type = 6; return true; } + else if(equal(conditional)) { 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(conditional);} 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(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(conditional);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(conditional);} 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}; + + }; + +}; +/* +MDT-Configuration ::= SEQUENCE { + mdt-Activation MDT-Activation, + areaScopeOfMDT AreaScopeOfMDT, + measurementsToActivate MeasurementsToActivate, + m1reportingTrigger M1ReportingTrigger, + m1thresholdeventA2 M1ThresholdEventA2 OPTIONAL, +-- Included in case of event-triggered, or event-triggered periodic reporting for measurement M1 + m1periodicReporting M1PeriodicReporting OPTIONAL, +-- Included in case of periodic, or event-triggered periodic reporting for measurement M1 + iE-Extensions ProtocolExtensionContainer { {MDT-Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct MDT_Configuration : asn::sequence<7, 0, true, 3> +{ + static constexpr const char* name() {return "MDT-Configuration";} + using parent_t = asn::sequence<7, 0, true, 3>; + struct mdt_Activation_t : MDT_Activation + { + static constexpr const char* name() {return "mdt_Activation_t";} + using parent_t = MDT_Activation; + + }; + mdt_Activation_t& ref_mdt_Activation() {return mdt_Activation;} + mdt_Activation_t const& ref_mdt_Activation() const {return mdt_Activation;} + struct areaScopeOfMDT_t : AreaScopeOfMDT + { + static constexpr const char* name() {return "areaScopeOfMDT_t";} + using parent_t = AreaScopeOfMDT; + + }; + areaScopeOfMDT_t& ref_areaScopeOfMDT() {return areaScopeOfMDT;} + areaScopeOfMDT_t const& ref_areaScopeOfMDT() const {return areaScopeOfMDT;} + struct measurementsToActivate_t : MeasurementsToActivate + { + static constexpr const char* name() {return "measurementsToActivate_t";} + using parent_t = MeasurementsToActivate; + + }; + measurementsToActivate_t& ref_measurementsToActivate() {return measurementsToActivate;} + measurementsToActivate_t const& ref_measurementsToActivate() const {return measurementsToActivate;} + struct m1reportingTrigger_t : M1ReportingTrigger + { + static constexpr const char* name() {return "m1reportingTrigger_t";} + using parent_t = M1ReportingTrigger; + + }; + m1reportingTrigger_t& ref_m1reportingTrigger() {return m1reportingTrigger;} + m1reportingTrigger_t const& ref_m1reportingTrigger() const {return m1reportingTrigger;} + struct m1thresholdeventA2_t : M1ThresholdEventA2 + { + static constexpr const char* name() {return "m1thresholdeventA2_t";} + using parent_t = M1ThresholdEventA2; + static constexpr bool optional = true; + + }; + m1thresholdeventA2_t& set_m1thresholdeventA2() { m1thresholdeventA2.setpresent(true); return m1thresholdeventA2;} + m1thresholdeventA2_t const* get_m1thresholdeventA2() const {return m1thresholdeventA2.is_valid() ? &m1thresholdeventA2 : nullptr;} + struct m1periodicReporting_t : M1PeriodicReporting + { + static constexpr const char* name() {return "m1periodicReporting_t";} + using parent_t = M1PeriodicReporting; + static constexpr bool optional = true; + + }; + m1periodicReporting_t& set_m1periodicReporting() { m1periodicReporting.setpresent(true); return m1periodicReporting;} + m1periodicReporting_t const* get_m1periodicReporting() const {return m1periodicReporting.is_valid() ? &m1periodicReporting : 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(mdt_Activation); + v(areaScopeOfMDT); + v(measurementsToActivate); + v(m1reportingTrigger); + v(m1thresholdeventA2); + v(m1periodicReporting); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(mdt_Activation); + v(areaScopeOfMDT); + v(measurementsToActivate); + v(m1reportingTrigger); + v(m1thresholdeventA2); + v(m1periodicReporting); + v(iE_Extensions); + + }; + void clear() + { + mdt_Activation.clear(); + areaScopeOfMDT.clear(); + measurementsToActivate.clear(); + m1reportingTrigger.clear(); + m1thresholdeventA2.clear(); + m1periodicReporting.clear(); + iE_Extensions.clear(); + + }; + private: + mdt_Activation_t mdt_Activation; + areaScopeOfMDT_t areaScopeOfMDT; + measurementsToActivate_t measurementsToActivate; + m1reportingTrigger_t m1reportingTrigger; + m1thresholdeventA2_t m1thresholdeventA2; + m1periodicReporting_t m1periodicReporting; + iE_Extensions_t iE_Extensions; + +}; +/* +MakeBeforeBreakIndicator::= ENUMERATED {true, ...} +*/ + +struct MakeBeforeBreakIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "MakeBeforeBreakIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +ManagementBasedMDTallowed ::= ENUMERATED {allowed, ...} +*/ + +struct ManagementBasedMDTallowed : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "ManagementBasedMDTallowed";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + allowed + } index_t; + +}; + +/* +Masked-IMEISV ::= BIT STRING (SIZE (64)) +*/ + +struct Masked_IMEISV : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Masked-IMEISV";} + using parent_t = asn::bstring<>; + +}; + +/* +MeNBCoordinationAssistanceInformation ::= ENUMERATED{ + coordination-not-required, + ... +} +*/ + +struct MeNBCoordinationAssistanceInformation : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "MeNBCoordinationAssistanceInformation";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + coordination_not_required + } index_t; + +}; + +/* +NRCellIdentifier ::= BIT STRING (SIZE (36)) +*/ + +struct NRCellIdentifier : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRCellIdentifier";} + using parent_t = asn::bstring<>; + +}; + +/* +NRCGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRCGI_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}; + + }; + +}; +/* +NRCGI ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + nRcellIdentifier NRCellIdentifier, + iE-Extensions ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NRCGI : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NRCGI";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct nRcellIdentifier_t : NRCellIdentifier + { + static constexpr const char* name() {return "nRcellIdentifier_t";} + using parent_t = NRCellIdentifier; + + }; + nRcellIdentifier_t& ref_nRcellIdentifier() {return nRcellIdentifier;} + nRcellIdentifier_t const& ref_nRcellIdentifier() const {return nRcellIdentifier;} + 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(pLMN_Identity); + v(nRcellIdentifier); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(nRcellIdentifier); + v(iE_Extensions); + + }; + void clear() + { + pLMN_Identity.clear(); + nRcellIdentifier.clear(); + iE_Extensions.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + nRcellIdentifier_t nRcellIdentifier; + iE_Extensions_t iE_Extensions; + +}; +/* +MeNBResourceCoordinationInformationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NRCGI CRITICALITY ignore EXTENSION NRCGI PRESENCE optional}| + { ID id-MeNBCoordinationAssistanceInformation CRITICALITY reject EXTENSION MeNBCoordinationAssistanceInformation PRESENCE optional}, + ... +} +*/ + +struct MeNBResourceCoordinationInformationExtIEs +{ + 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_NRCGI() { set(id_NRCGI); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(id_MeNBCoordinationAssistanceInformation); 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_NRCGI)) { type = 1; return true; } + else if(equal(id_MeNBCoordinationAssistanceInformation)) { 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_NRCGI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_MeNBCoordinationAssistanceInformation);} 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_NRCGI() { set(ignore); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { set(reject); 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(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(ignore);} 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 Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + NRCGI& select_id_NRCGI() { return set(1); } + NRCGI const* get_id_NRCGI() const { return get(1); } + MeNBCoordinationAssistanceInformation& select_id_MeNBCoordinationAssistanceInformation() { return set(2); } + MeNBCoordinationAssistanceInformation const* get_id_MeNBCoordinationAssistanceInformation() 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_NRCGI()); return true; + case 2: v(select_id_MeNBCoordinationAssistanceInformation()); 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(MeNBCoordinationAssistanceInformation)]; + char dummy2[sizeof(NRCGI)]; + + }; + 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_NRCGI() { set(optional); type=1;} + void select_id_MeNBCoordinationAssistanceInformation() { 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}; + + }; + +}; +/* +MeNBResourceCoordinationInformation ::= SEQUENCE { + eUTRA-Cell-ID ECGI, + uLCoordinationInformation BIT STRING (SIZE(6..4400, ...)), + dLCoordinationInformation BIT STRING (SIZE(6..4400, ...)) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {MeNBResourceCoordinationInformationExtIEs} } OPTIONAL, + ... +} +*/ + +struct MeNBResourceCoordinationInformation : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "MeNBResourceCoordinationInformation";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct eUTRA_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "eUTRA_Cell_ID_t";} + using parent_t = ECGI; + + }; + eUTRA_Cell_ID_t& ref_eUTRA_Cell_ID() {return eUTRA_Cell_ID;} + eUTRA_Cell_ID_t const& ref_eUTRA_Cell_ID() const {return eUTRA_Cell_ID;} + struct uLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + + }; + + uLCoordinationInformation_t& ref_uLCoordinationInformation() {return uLCoordinationInformation;} + uLCoordinationInformation_t const& ref_uLCoordinationInformation() const {return uLCoordinationInformation;} + struct dLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dLCoordinationInformation_t& set_dLCoordinationInformation() { dLCoordinationInformation.setpresent(true); return dLCoordinationInformation;} + dLCoordinationInformation_t const* get_dLCoordinationInformation() const {return dLCoordinationInformation.is_valid() ? &dLCoordinationInformation : 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(eUTRA_Cell_ID); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eUTRA_Cell_ID); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + void clear() + { + eUTRA_Cell_ID.clear(); + uLCoordinationInformation.clear(); + dLCoordinationInformation.clear(); + iE_Extensions.clear(); + + }; + private: + eUTRA_Cell_ID_t eUTRA_Cell_ID; + uLCoordinationInformation_t uLCoordinationInformation; + dLCoordinationInformation_t dLCoordinationInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +MeNBtoSeNBContainer ::= OCTET STRING +*/ + +struct MeNBtoSeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "MeNBtoSeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +MeNBtoSgNBContainer ::= OCTET STRING +*/ + +struct MeNBtoSgNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "MeNBtoSgNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +Measurement-ID ::= INTEGER (1..4095, ...) +*/ + +struct Measurement_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Measurement-ID";} + using parent_t = asn::integer<>; + +}; + +/* +MobilityParametersInformation ::= SEQUENCE { + handoverTriggerChange INTEGER (-20..20), + ... +} +*/ + +struct MobilityParametersInformation : asn::sequence<1, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityParametersInformation";} + using parent_t = asn::sequence<1, 0, true, 0>; + struct handoverTriggerChange_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChange_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChange_t& ref_handoverTriggerChange() {return handoverTriggerChange;} + handoverTriggerChange_t const& ref_handoverTriggerChange() const {return handoverTriggerChange;} + template void decode(V& v) + { + v(handoverTriggerChange); + + }; + template void encode(V& v) const + { + v(handoverTriggerChange); + + }; + void clear() + { + handoverTriggerChange.clear(); + + }; + private: + handoverTriggerChange_t handoverTriggerChange; + +}; +/* +MobilityParametersModificationRange ::= SEQUENCE { + handoverTriggerChangeLowerLimit INTEGER (-20..20), + handoverTriggerChangeUpperLimit INTEGER (-20..20), + ... +} +*/ + +struct MobilityParametersModificationRange : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "MobilityParametersModificationRange";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct handoverTriggerChangeLowerLimit_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChangeLowerLimit_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChangeLowerLimit_t& ref_handoverTriggerChangeLowerLimit() {return handoverTriggerChangeLowerLimit;} + handoverTriggerChangeLowerLimit_t const& ref_handoverTriggerChangeLowerLimit() const {return handoverTriggerChangeLowerLimit;} + struct handoverTriggerChangeUpperLimit_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "handoverTriggerChangeUpperLimit_t";} + using parent_t = asn::integer<>; + + }; + + handoverTriggerChangeUpperLimit_t& ref_handoverTriggerChangeUpperLimit() {return handoverTriggerChangeUpperLimit;} + handoverTriggerChangeUpperLimit_t const& ref_handoverTriggerChangeUpperLimit() const {return handoverTriggerChangeUpperLimit;} + template void decode(V& v) + { + v(handoverTriggerChangeLowerLimit); + v(handoverTriggerChangeUpperLimit); + + }; + template void encode(V& v) const + { + v(handoverTriggerChangeLowerLimit); + v(handoverTriggerChangeUpperLimit); + + }; + void clear() + { + handoverTriggerChangeLowerLimit.clear(); + handoverTriggerChangeUpperLimit.clear(); + + }; + private: + handoverTriggerChangeLowerLimit_t handoverTriggerChangeLowerLimit; + handoverTriggerChangeUpperLimit_t handoverTriggerChangeUpperLimit; + +}; +/* +MultibandInfoList ::= SEQUENCE (SIZE(1..maxnoofBands)) OF BandInfo +*/ + +struct MultibandInfoList_elm : BandInfo +{ + static constexpr const char* name() {return "MultibandInfoList_elm";} + using parent_t = BandInfo; + +}; +struct MultibandInfoList : asn::sequenceof +{ + static constexpr const char* name() {return "MultibandInfoList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +NRSCS ::= ENUMERATED { scs15, scs30, scs60, scs120, ...} +*/ + +struct NRSCS : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "NRSCS";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + scs15 + ,scs30 + ,scs60 + ,scs120 + } index_t; + +}; + +/* +NRNRB ::= ENUMERATED { nrb11, nrb18, nrb24, nrb25, nrb31, nrb32, nrb38, nrb51, nrb52, nrb65, nrb66, nrb78, nrb79, nrb93, nrb106, nrb107, nrb121, nrb132, nrb133, nrb135, nrb160, nrb162, nrb189, nrb216, nrb217, nrb245, nrb264, nrb270, nrb273, ...} +*/ + +struct NRNRB : asn::enumerated<29, 0, true> +{ + static constexpr const char* name() {return "NRNRB";} + using parent_t = asn::enumerated<29, 0, true>; + typedef enum { + nrb11 + ,nrb18 + ,nrb24 + ,nrb25 + ,nrb31 + ,nrb32 + ,nrb38 + ,nrb51 + ,nrb52 + ,nrb65 + ,nrb66 + ,nrb78 + ,nrb79 + ,nrb93 + ,nrb106 + ,nrb107 + ,nrb121 + ,nrb132 + ,nrb133 + ,nrb135 + ,nrb160 + ,nrb162 + ,nrb189 + ,nrb216 + ,nrb217 + ,nrb245 + ,nrb264 + ,nrb270 + ,nrb273 + } index_t; + +}; + +/* +NR-TxBW-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NR_TxBW_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}; + + }; + +}; +/* +NR-TxBW ::= SEQUENCE { + nRSCS NRSCS, + nRNRB NRNRB, + iE-Extensions ProtocolExtensionContainer { {NR-TxBW-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct NR_TxBW : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NR-TxBW";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRSCS_t : NRSCS + { + static constexpr const char* name() {return "nRSCS_t";} + using parent_t = NRSCS; + + }; + nRSCS_t& ref_nRSCS() {return nRSCS;} + nRSCS_t const& ref_nRSCS() const {return nRSCS;} + struct nRNRB_t : NRNRB + { + static constexpr const char* name() {return "nRNRB_t";} + using parent_t = NRNRB; + + }; + nRNRB_t& ref_nRNRB() {return nRNRB;} + nRNRB_t const& ref_nRNRB() const {return nRNRB;} + 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(nRSCS); + v(nRNRB); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRSCS); + v(nRNRB); + v(iE_Extensions); + + }; + void clear() + { + nRSCS.clear(); + nRNRB.clear(); + iE_Extensions.clear(); + + }; + private: + nRSCS_t nRSCS; + nRNRB_t nRNRB; + iE_Extensions_t iE_Extensions; + +}; +/* +SULInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SULInformation_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}; + + }; + +}; +/* +SULInformation ::= SEQUENCE { + sUL-ARFCN INTEGER (0.. 3279165), + sUL-TxBW NR-TxBW, + iE-Extensions ProtocolExtensionContainer { {SULInformation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SULInformation : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "SULInformation";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct sUL_ARFCN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "sUL_ARFCN_t";} + using parent_t = asn::integer<>; + + }; + + sUL_ARFCN_t& ref_sUL_ARFCN() {return sUL_ARFCN;} + sUL_ARFCN_t const& ref_sUL_ARFCN() const {return sUL_ARFCN;} + struct sUL_TxBW_t : NR_TxBW + { + static constexpr const char* name() {return "sUL_TxBW_t";} + using parent_t = NR_TxBW; + + }; + sUL_TxBW_t& ref_sUL_TxBW() {return sUL_TxBW;} + sUL_TxBW_t const& ref_sUL_TxBW() const {return sUL_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(sUL_ARFCN); + v(sUL_TxBW); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(sUL_ARFCN); + v(sUL_TxBW); + v(iE_Extensions); + + }; + void clear() + { + sUL_ARFCN.clear(); + sUL_TxBW.clear(); + iE_Extensions.clear(); + + }; + private: + sUL_ARFCN_t sUL_ARFCN; + sUL_TxBW_t sUL_TxBW; + iE_Extensions_t iE_Extensions; + +}; +/* +NRFreqInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRFreqInfo_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}; + + }; + +}; +/* +NRFreqInfo ::= SEQUENCE{ + nRARFCN INTEGER (0.. 3279165), + freqBandListNr SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem, + sULInformation SULInformation OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {NRFreqInfo-ExtIEs} } OPTIONAL, + + ... +} +*/ + +struct NRFreqInfo : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "NRFreqInfo";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct nRARFCN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "nRARFCN_t";} + using parent_t = asn::integer<>; + + }; + + nRARFCN_t& ref_nRARFCN() {return nRARFCN;} + nRARFCN_t const& ref_nRARFCN() const {return nRARFCN;} + struct freqBandListNr_t_elm : FreqBandNrItem + { + static constexpr const char* name() {return "freqBandListNr_t_elm";} + using parent_t = FreqBandNrItem; + + }; + struct freqBandListNr_t : asn::sequenceof + { + static constexpr const char* name() {return "freqBandListNr_t";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + + }; + freqBandListNr_t& ref_freqBandListNr() {return freqBandListNr;} + freqBandListNr_t const& ref_freqBandListNr() const {return freqBandListNr;} + struct sULInformation_t : SULInformation + { + static constexpr const char* name() {return "sULInformation_t";} + using parent_t = SULInformation; + static constexpr bool optional = true; + + }; + sULInformation_t& set_sULInformation() { sULInformation.setpresent(true); return sULInformation;} + sULInformation_t const* get_sULInformation() const {return sULInformation.is_valid() ? &sULInformation : 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(nRARFCN); + v(freqBandListNr); + v(sULInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRARFCN); + v(freqBandListNr); + v(sULInformation); + v(iE_Extensions); + + }; + void clear() + { + nRARFCN.clear(); + freqBandListNr.clear(); + sULInformation.clear(); + iE_Extensions.clear(); + + }; + private: + nRARFCN_t nRARFCN; + freqBandListNr_t freqBandListNr; + sULInformation_t sULInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +NRPCI ::= INTEGER (0..1007) +*/ + +struct NRPCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRPCI";} + using parent_t = asn::integer<>; + +}; + +/* +NRencryptionAlgorithms ::= BIT STRING (SIZE (16,...)) +*/ + +struct NRencryptionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRencryptionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +NRintegrityProtectionAlgorithms ::= BIT STRING (SIZE (16,...)) +*/ + +struct NRintegrityProtectionAlgorithms : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "NRintegrityProtectionAlgorithms";} + using parent_t = asn::bstring<>; + +}; + +/* +NRUESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct NRUESecurityCapabilities_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}; + + }; + +}; +/* +NRUESecurityCapabilities ::= SEQUENCE { + nRencryptionAlgorithms NRencryptionAlgorithms, + nRintegrityProtectionAlgorithms NRintegrityProtectionAlgorithms, + iE-Extensions ProtocolExtensionContainer { {NRUESecurityCapabilities-ExtIEs} } OPTIONAL, +... +} +*/ + +struct NRUESecurityCapabilities : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "NRUESecurityCapabilities";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct nRencryptionAlgorithms_t : NRencryptionAlgorithms + { + static constexpr const char* name() {return "nRencryptionAlgorithms_t";} + using parent_t = NRencryptionAlgorithms; + + }; + nRencryptionAlgorithms_t& ref_nRencryptionAlgorithms() {return nRencryptionAlgorithms;} + nRencryptionAlgorithms_t const& ref_nRencryptionAlgorithms() const {return nRencryptionAlgorithms;} + struct nRintegrityProtectionAlgorithms_t : NRintegrityProtectionAlgorithms + { + static constexpr const char* name() {return "nRintegrityProtectionAlgorithms_t";} + using parent_t = NRintegrityProtectionAlgorithms; + + }; + nRintegrityProtectionAlgorithms_t& ref_nRintegrityProtectionAlgorithms() {return nRintegrityProtectionAlgorithms;} + nRintegrityProtectionAlgorithms_t const& ref_nRintegrityProtectionAlgorithms() const {return nRintegrityProtectionAlgorithms;} + 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(nRencryptionAlgorithms); + v(nRintegrityProtectionAlgorithms); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nRencryptionAlgorithms); + v(nRintegrityProtectionAlgorithms); + v(iE_Extensions); + + }; + void clear() + { + nRencryptionAlgorithms.clear(); + nRintegrityProtectionAlgorithms.clear(); + iE_Extensions.clear(); + + }; + private: + nRencryptionAlgorithms_t nRencryptionAlgorithms; + nRintegrityProtectionAlgorithms_t nRintegrityProtectionAlgorithms; + iE_Extensions_t iE_Extensions; + +}; +/* +PCI ::= INTEGER (0..503, ...) +*/ + +struct PCI : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "PCI";} + using parent_t = asn::integer<>; + +}; + +/* +Neighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-NeighbourTAC CRITICALITY ignore EXTENSION TAC PRESENCE optional}| + { ID id-eARFCNExtension CRITICALITY reject EXTENSION EARFCNExtension PRESENCE optional}, + ... +} +*/ + +struct Neighbour_Information_ExtIEs +{ + 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_NeighbourTAC() { set(id_NeighbourTAC); type=1;} + void select_id_eARFCNExtension() { set(id_eARFCNExtension); 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_NeighbourTAC)) { type = 1; return true; } + else if(equal(id_eARFCNExtension)) { 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_NeighbourTAC);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_eARFCNExtension);} 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_NeighbourTAC() { set(ignore); type=1;} + void select_id_eARFCNExtension() { set(reject); 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(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(ignore);} 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 Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + TAC& select_id_NeighbourTAC() { return set(1); } + TAC const* get_id_NeighbourTAC() const { return get(1); } + EARFCNExtension& select_id_eARFCNExtension() { return set(2); } + EARFCNExtension const* get_id_eARFCNExtension() 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_NeighbourTAC()); return true; + case 2: v(select_id_eARFCNExtension()); 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(EARFCNExtension)]; + char dummy2[sizeof(TAC)]; + + }; + 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_NeighbourTAC() { set(optional); type=1;} + void select_id_eARFCNExtension() { 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}; + + }; + +}; +/* +Neighbour-Information ::= SEQUENCE (SIZE (0..maxnoofNeighbours)) OF SEQUENCE { + eCGI ECGI, + pCI PCI, + eARFCN EARFCN, + iE-Extensions ProtocolExtensionContainer { {Neighbour-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Neighbour_Information_elm : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "Neighbour_Information_elm";} + using parent_t = asn::sequence<4, 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 pCI_t : PCI + { + static constexpr const char* name() {return "pCI_t";} + using parent_t = PCI; + + }; + pCI_t& ref_pCI() {return pCI;} + pCI_t const& ref_pCI() const {return pCI;} + struct eARFCN_t : EARFCN + { + static constexpr const char* name() {return "eARFCN_t";} + using parent_t = EARFCN; + + }; + eARFCN_t& ref_eARFCN() {return eARFCN;} + eARFCN_t const& ref_eARFCN() const {return eARFCN;} + 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(pCI); + v(eARFCN); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eCGI); + v(pCI); + v(eARFCN); + v(iE_Extensions); + + }; + void clear() + { + eCGI.clear(); + pCI.clear(); + eARFCN.clear(); + iE_Extensions.clear(); + + }; + private: + eCGI_t eCGI; + pCI_t pCI; + eARFCN_t eARFCN; + iE_Extensions_t iE_Extensions; + +}; +struct Neighbour_Information : asn::sequenceof +{ + static constexpr const char* name() {return "Neighbour-Information";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +NewDRBIDrequest::= ENUMERATED {true, ...} +*/ + +struct NewDRBIDrequest : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "NewDRBIDrequest";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +Number-of-Antennaports ::= ENUMERATED { + an1, + an2, + an4, + ... +} +*/ + +struct Number_of_Antennaports : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "Number-of-Antennaports";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + an1 + ,an2 + ,an4 + } index_t; + +}; + +/* +PDCPChangeIndication ::= ENUMERATED {s-KgNB-update-required, pDCP-data-recovery-required,...} +*/ + +struct PDCPChangeIndication : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PDCPChangeIndication";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + s_KgNB_update_required + ,pDCP_data_recovery_required + } index_t; + +}; + +/* +PDCPSnLength ::= ENUMERATED {twelve-bits,eighteen-bits,...} +*/ + +struct PDCPSnLength : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PDCPSnLength";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + twelve_bits + ,eighteen_bits + } index_t; + +}; + +/* +PRACH-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct PRACH_Configuration_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}; + + }; + +}; +/* +PRACH-Configuration ::= SEQUENCE { + rootSequenceIndex INTEGER (0..837), + zeroCorrelationIndex INTEGER (0..15), + highSpeedFlag BOOLEAN, + prach-FreqOffset INTEGER (0..94), + prach-ConfigIndex INTEGER (0..63) OPTIONAL, -- present for TDD -- + iE-Extensions ProtocolExtensionContainer { {PRACH-Configuration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct PRACH_Configuration : asn::sequence<6, 0, true, 2> +{ + static constexpr const char* name() {return "PRACH-Configuration";} + using parent_t = asn::sequence<6, 0, true, 2>; + struct rootSequenceIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rootSequenceIndex_t";} + using parent_t = asn::integer<>; + + }; + + rootSequenceIndex_t& ref_rootSequenceIndex() {return rootSequenceIndex;} + rootSequenceIndex_t const& ref_rootSequenceIndex() const {return rootSequenceIndex;} + struct zeroCorrelationIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "zeroCorrelationIndex_t";} + using parent_t = asn::integer<>; + + }; + + zeroCorrelationIndex_t& ref_zeroCorrelationIndex() {return zeroCorrelationIndex;} + zeroCorrelationIndex_t const& ref_zeroCorrelationIndex() const {return zeroCorrelationIndex;} + struct highSpeedFlag_t : asn::boolean + { + static constexpr const char* name() {return "highSpeedFlag_t";} + using parent_t = asn::boolean; + + }; + highSpeedFlag_t& ref_highSpeedFlag() {return highSpeedFlag;} + highSpeedFlag_t const& ref_highSpeedFlag() const {return highSpeedFlag;} + struct prach_FreqOffset_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "prach_FreqOffset_t";} + using parent_t = asn::integer<>; + + }; + + prach_FreqOffset_t& ref_prach_FreqOffset() {return prach_FreqOffset;} + prach_FreqOffset_t const& ref_prach_FreqOffset() const {return prach_FreqOffset;} + struct prach_ConfigIndex_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "prach_ConfigIndex_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + prach_ConfigIndex_t& set_prach_ConfigIndex() { prach_ConfigIndex.setpresent(true); return prach_ConfigIndex;} + prach_ConfigIndex_t const* get_prach_ConfigIndex() const {return prach_ConfigIndex.is_valid() ? &prach_ConfigIndex : 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(rootSequenceIndex); + v(zeroCorrelationIndex); + v(highSpeedFlag); + v(prach_FreqOffset); + v(prach_ConfigIndex); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rootSequenceIndex); + v(zeroCorrelationIndex); + v(highSpeedFlag); + v(prach_FreqOffset); + v(prach_ConfigIndex); + v(iE_Extensions); + + }; + void clear() + { + rootSequenceIndex.clear(); + zeroCorrelationIndex.clear(); + highSpeedFlag.clear(); + prach_FreqOffset.clear(); + prach_ConfigIndex.clear(); + iE_Extensions.clear(); + + }; + private: + rootSequenceIndex_t rootSequenceIndex; + zeroCorrelationIndex_t zeroCorrelationIndex; + highSpeedFlag_t highSpeedFlag; + prach_FreqOffset_t prach_FreqOffset; + prach_ConfigIndex_t prach_ConfigIndex; + iE_Extensions_t iE_Extensions; + +}; +/* +PedestrianUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct PedestrianUE : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "PedestrianUE";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +Port-Number ::= OCTET STRING (SIZE (2)) +*/ + +struct Port_Number : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "Port-Number";} + using parent_t = asn::ostring<>; + +}; + +/* +ProSeDirectDiscovery ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeDirectDiscovery : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeDirectDiscovery";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeDirectCommunication ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeDirectCommunication : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeDirectCommunication";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeUEtoNetworkRelaying ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct ProSeUEtoNetworkRelaying : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ProSeUEtoNetworkRelaying";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +ProSeAuthorized-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ProSeUEtoNetworkRelaying CRITICALITY ignore EXTENSION ProSeUEtoNetworkRelaying PRESENCE optional}, + ... +} +*/ + +struct ProSeAuthorized_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_ProSeUEtoNetworkRelaying() { set(id_ProSeUEtoNetworkRelaying); 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_ProSeUEtoNetworkRelaying)) { 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_ProSeUEtoNetworkRelaying);} 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_ProSeUEtoNetworkRelaying() { 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;} + ProSeUEtoNetworkRelaying& select_id_ProSeUEtoNetworkRelaying() { return set(1); } + ProSeUEtoNetworkRelaying const* get_id_ProSeUEtoNetworkRelaying() 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_ProSeUEtoNetworkRelaying()); 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(ProSeUEtoNetworkRelaying)]; + + }; + 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_ProSeUEtoNetworkRelaying() { 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}; + + }; + +}; +/* +ProSeAuthorized ::= SEQUENCE { + proSeDirectDiscovery ProSeDirectDiscovery OPTIONAL, + proSeDirectCommunication ProSeDirectCommunication OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ProSeAuthorized-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProSeAuthorized : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "ProSeAuthorized";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct proSeDirectDiscovery_t : ProSeDirectDiscovery + { + static constexpr const char* name() {return "proSeDirectDiscovery_t";} + using parent_t = ProSeDirectDiscovery; + static constexpr bool optional = true; + + }; + proSeDirectDiscovery_t& set_proSeDirectDiscovery() { proSeDirectDiscovery.setpresent(true); return proSeDirectDiscovery;} + proSeDirectDiscovery_t const* get_proSeDirectDiscovery() const {return proSeDirectDiscovery.is_valid() ? &proSeDirectDiscovery : nullptr;} + struct proSeDirectCommunication_t : ProSeDirectCommunication + { + static constexpr const char* name() {return "proSeDirectCommunication_t";} + using parent_t = ProSeDirectCommunication; + static constexpr bool optional = true; + + }; + proSeDirectCommunication_t& set_proSeDirectCommunication() { proSeDirectCommunication.setpresent(true); return proSeDirectCommunication;} + proSeDirectCommunication_t const* get_proSeDirectCommunication() const {return proSeDirectCommunication.is_valid() ? &proSeDirectCommunication : 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(proSeDirectDiscovery); + v(proSeDirectCommunication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(proSeDirectDiscovery); + v(proSeDirectCommunication); + v(iE_Extensions); + + }; + void clear() + { + proSeDirectDiscovery.clear(); + proSeDirectCommunication.clear(); + iE_Extensions.clear(); + + }; + private: + proSeDirectDiscovery_t proSeDirectDiscovery; + proSeDirectCommunication_t proSeDirectCommunication; + iE_Extensions_t iE_Extensions; + +}; +/* +ResourceType ::= ENUMERATED { + downlinknonCRS, + cRS, + uplink, + ... +} +*/ + +struct ResourceType : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "ResourceType";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + downlinknonCRS + ,cRS + ,uplink + } index_t; + +}; + +/* +ProtectedFootprintTimePattern-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ProtectedFootprintTimePattern_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}; + + }; + +}; +/* +ProtectedFootprintTimePattern ::= SEQUENCE { + protectedFootprintTimePeriodicity INTEGER (1..320, ...), + protectedFootprintStartTime INTEGER (1..20, ...), + iE-Extensions ProtocolExtensionContainer { {ProtectedFootprintTimePattern-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedFootprintTimePattern : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "ProtectedFootprintTimePattern";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct protectedFootprintTimePeriodicity_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintTimePeriodicity_t";} + using parent_t = asn::integer<>; + + }; + + protectedFootprintTimePeriodicity_t& ref_protectedFootprintTimePeriodicity() {return protectedFootprintTimePeriodicity;} + protectedFootprintTimePeriodicity_t const& ref_protectedFootprintTimePeriodicity() const {return protectedFootprintTimePeriodicity;} + struct protectedFootprintStartTime_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintStartTime_t";} + using parent_t = asn::integer<>; + + }; + + protectedFootprintStartTime_t& ref_protectedFootprintStartTime() {return protectedFootprintStartTime;} + protectedFootprintStartTime_t const& ref_protectedFootprintStartTime() const {return protectedFootprintStartTime;} + 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(protectedFootprintTimePeriodicity); + v(protectedFootprintStartTime); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(protectedFootprintTimePeriodicity); + v(protectedFootprintStartTime); + v(iE_Extensions); + + }; + void clear() + { + protectedFootprintTimePeriodicity.clear(); + protectedFootprintStartTime.clear(); + iE_Extensions.clear(); + + }; + private: + protectedFootprintTimePeriodicity_t protectedFootprintTimePeriodicity; + protectedFootprintStartTime_t protectedFootprintStartTime; + iE_Extensions_t iE_Extensions; + +}; +/* +ProtectedResourceList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ProtectedResourceList_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}; + + }; + +}; +/* +ProtectedResourceList-Item ::= SEQUENCE { + resourceType ResourceType, + intraPRBProtectedResourceFootprint BIT STRING (SIZE(84, ...)), + protectedFootprintFrequencyPattern BIT STRING (SIZE(6..110, ...)), + protectedFootprintTimePattern ProtectedFootprintTimePattern, + iE-Extensions ProtocolExtensionContainer { {ProtectedResourceList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedResourceList_Item : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "ProtectedResourceList-Item";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct resourceType_t : ResourceType + { + static constexpr const char* name() {return "resourceType_t";} + using parent_t = ResourceType; + + }; + resourceType_t& ref_resourceType() {return resourceType;} + resourceType_t const& ref_resourceType() const {return resourceType;} + struct intraPRBProtectedResourceFootprint_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "intraPRBProtectedResourceFootprint_t";} + using parent_t = asn::bstring<>; + + }; + + intraPRBProtectedResourceFootprint_t& ref_intraPRBProtectedResourceFootprint() {return intraPRBProtectedResourceFootprint;} + intraPRBProtectedResourceFootprint_t const& ref_intraPRBProtectedResourceFootprint() const {return intraPRBProtectedResourceFootprint;} + struct protectedFootprintFrequencyPattern_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "protectedFootprintFrequencyPattern_t";} + using parent_t = asn::bstring<>; + + }; + + protectedFootprintFrequencyPattern_t& ref_protectedFootprintFrequencyPattern() {return protectedFootprintFrequencyPattern;} + protectedFootprintFrequencyPattern_t const& ref_protectedFootprintFrequencyPattern() const {return protectedFootprintFrequencyPattern;} + struct protectedFootprintTimePattern_t : ProtectedFootprintTimePattern + { + static constexpr const char* name() {return "protectedFootprintTimePattern_t";} + using parent_t = ProtectedFootprintTimePattern; + + }; + protectedFootprintTimePattern_t& ref_protectedFootprintTimePattern() {return protectedFootprintTimePattern;} + protectedFootprintTimePattern_t const& ref_protectedFootprintTimePattern() const {return protectedFootprintTimePattern;} + 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(resourceType); + v(intraPRBProtectedResourceFootprint); + v(protectedFootprintFrequencyPattern); + v(protectedFootprintTimePattern); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(resourceType); + v(intraPRBProtectedResourceFootprint); + v(protectedFootprintFrequencyPattern); + v(protectedFootprintTimePattern); + v(iE_Extensions); + + }; + void clear() + { + resourceType.clear(); + intraPRBProtectedResourceFootprint.clear(); + protectedFootprintFrequencyPattern.clear(); + protectedFootprintTimePattern.clear(); + iE_Extensions.clear(); + + }; + private: + resourceType_t resourceType; + intraPRBProtectedResourceFootprint_t intraPRBProtectedResourceFootprint; + protectedFootprintFrequencyPattern_t protectedFootprintFrequencyPattern; + protectedFootprintTimePattern_t protectedFootprintTimePattern; + iE_Extensions_t iE_Extensions; + +}; +/* +ProtectedResourceList ::= SEQUENCE (SIZE(1.. maxnoofProtectedResourcePatterns)) OF ProtectedResourceList-Item +*/ + +struct ProtectedResourceList_elm : ProtectedResourceList_Item +{ + static constexpr const char* name() {return "ProtectedResourceList_elm";} + using parent_t = ProtectedResourceList_Item; + +}; +struct ProtectedResourceList : asn::sequenceof +{ + static constexpr const char* name() {return "ProtectedResourceList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ProtectedEUTRAResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} -- Rapporteur: missing extension -- +*/ + +struct ProtectedEUTRAResourceIndication_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}; + + }; + +}; +/* +ProtectedEUTRAResourceIndication::= SEQUENCE { + activationSFN INTEGER (0..1023), + protectedResourceList ProtectedResourceList, + mBSFNControlRegionLength INTEGER (0..3) OPTIONAL, + pDCCHRegionLength INTEGER (1..3) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ProtectedEUTRAResourceIndication-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ProtectedEUTRAResourceIndication : asn::sequence<5, 0, true, 3> +{ + static constexpr const char* name() {return "ProtectedEUTRAResourceIndication";} + using parent_t = asn::sequence<5, 0, true, 3>; + struct activationSFN_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "activationSFN_t";} + using parent_t = asn::integer<>; + + }; + + activationSFN_t& ref_activationSFN() {return activationSFN;} + activationSFN_t const& ref_activationSFN() const {return activationSFN;} + struct protectedResourceList_t : ProtectedResourceList + { + static constexpr const char* name() {return "protectedResourceList_t";} + using parent_t = ProtectedResourceList; + + }; + protectedResourceList_t& ref_protectedResourceList() {return protectedResourceList;} + protectedResourceList_t const& ref_protectedResourceList() const {return protectedResourceList;} + struct mBSFNControlRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "mBSFNControlRegionLength_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + mBSFNControlRegionLength_t& set_mBSFNControlRegionLength() { mBSFNControlRegionLength.setpresent(true); return mBSFNControlRegionLength;} + mBSFNControlRegionLength_t const* get_mBSFNControlRegionLength() const {return mBSFNControlRegionLength.is_valid() ? &mBSFNControlRegionLength : nullptr;} + struct pDCCHRegionLength_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pDCCHRegionLength_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + pDCCHRegionLength_t& set_pDCCHRegionLength() { pDCCHRegionLength.setpresent(true); return pDCCHRegionLength;} + pDCCHRegionLength_t const* get_pDCCHRegionLength() const {return pDCCHRegionLength.is_valid() ? &pDCCHRegionLength : 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(activationSFN); + v(protectedResourceList); + v(mBSFNControlRegionLength); + v(pDCCHRegionLength); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(activationSFN); + v(protectedResourceList); + v(mBSFNControlRegionLength); + v(pDCCHRegionLength); + v(iE_Extensions); + + }; + void clear() + { + activationSFN.clear(); + protectedResourceList.clear(); + mBSFNControlRegionLength.clear(); + pDCCHRegionLength.clear(); + iE_Extensions.clear(); + + }; + private: + activationSFN_t activationSFN; + protectedResourceList_t protectedResourceList; + mBSFNControlRegionLength_t mBSFNControlRegionLength; + pDCCHRegionLength_t pDCCHRegionLength; + iE_Extensions_t iE_Extensions; + +}; +/* +Reestablishment-Indication ::= ENUMERATED { + reestablished, + ... +} +*/ + +struct Reestablishment_Indication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "Reestablishment-Indication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + reestablished + } index_t; + +}; + +/* +RLC-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RLC_Status_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}; + + }; + +}; +/* +RLC-Status ::= SEQUENCE { + reestablishment-Indication Reestablishment-Indication, + iE-Extensions ProtocolExtensionContainer { {RLC-Status-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RLC_Status : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "RLC-Status";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct reestablishment_Indication_t : Reestablishment_Indication + { + static constexpr const char* name() {return "reestablishment_Indication_t";} + using parent_t = Reestablishment_Indication; + + }; + reestablishment_Indication_t& ref_reestablishment_Indication() {return reestablishment_Indication;} + reestablishment_Indication_t const& ref_reestablishment_Indication() const {return reestablishment_Indication;} + 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(reestablishment_Indication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(reestablishment_Indication); + v(iE_Extensions); + + }; + void clear() + { + reestablishment_Indication.clear(); + iE_Extensions.clear(); + + }; + private: + reestablishment_Indication_t reestablishment_Indication; + iE_Extensions_t iE_Extensions; + +}; +/* +RLCMode ::= ENUMERATED { + rlc-am, + rlc-um-bidirectional, + rlc-um-unidirectional-ul, + rlc-um-unidirectional-dl, + ... +} +*/ + +struct RLCMode : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "RLCMode";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + rlc_am + ,rlc_um_bidirectional + ,rlc_um_unidirectional_ul + ,rlc_um_unidirectional_dl + } index_t; + +}; + +/* +RRC-Config-Ind ::= ENUMERATED { + full-config, + delta-config, + ... +} +*/ + +struct RRC_Config_Ind : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "RRC-Config-Ind";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + full_config + ,delta_config + } index_t; + +}; + +/* +RRC-Context ::= OCTET STRING +*/ + +struct RRC_Context : asn::ostring<> +{ + static constexpr const char* name() {return "RRC-Context";} + using parent_t = asn::ostring<>; + +}; + +/* +RRCConnReestabIndicator ::= ENUMERATED { + reconfigurationFailure, handoverFailure, otherFailure, ... +} +*/ + +struct RRCConnReestabIndicator : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "RRCConnReestabIndicator";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + reconfigurationFailure + ,handoverFailure + ,otherFailure + } index_t; + +}; + +/* +RRCConnSetupIndicator::= ENUMERATED { + rrcConnSetup, + ... +} +*/ + +struct RRCConnSetupIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "RRCConnSetupIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + rrcConnSetup + } index_t; + +}; + +/* +RRCContainer ::= OCTET STRING +*/ + +struct RRCContainer : asn::ostring<> +{ + static constexpr const char* name() {return "RRCContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +RSRPMeasurementResult-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct RSRPMeasurementResult_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}; + + }; + +}; +/* +RSRPMeasurementResult ::= SEQUENCE (SIZE(1..maxCellReport)) OF + SEQUENCE { + rSRPCellID ECGI, + rSRPMeasured INTEGER (0..97, ...), + iE-Extensions ProtocolExtensionContainer { {RSRPMeasurementResult-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct RSRPMeasurementResult_elm : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "RSRPMeasurementResult_elm";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct rSRPCellID_t : ECGI + { + static constexpr const char* name() {return "rSRPCellID_t";} + using parent_t = ECGI; + + }; + rSRPCellID_t& ref_rSRPCellID() {return rSRPCellID;} + rSRPCellID_t const& ref_rSRPCellID() const {return rSRPCellID;} + struct rSRPMeasured_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rSRPMeasured_t";} + using parent_t = asn::integer<>; + + }; + + rSRPMeasured_t& ref_rSRPMeasured() {return rSRPMeasured;} + rSRPMeasured_t const& ref_rSRPMeasured() const {return rSRPMeasured;} + 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(rSRPCellID); + v(rSRPMeasured); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rSRPCellID); + v(rSRPMeasured); + v(iE_Extensions); + + }; + void clear() + { + rSRPCellID.clear(); + rSRPMeasured.clear(); + iE_Extensions.clear(); + + }; + private: + rSRPCellID_t rSRPCellID; + rSRPMeasured_t rSRPMeasured; + iE_Extensions_t iE_Extensions; + +}; +struct RSRPMeasurementResult : asn::sequenceof +{ + static constexpr const char* name() {return "RSRPMeasurementResult";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +RSRPMRList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-UEID CRITICALITY ignore EXTENSION UEID PRESENCE optional}, + ... +} +*/ + +struct RSRPMRList_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_UEID() { set(id_UEID); 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_UEID)) { 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_UEID);} 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_UEID() { 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;} + UEID& select_id_UEID() { return set(1); } + UEID const* get_id_UEID() 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_UEID()); 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(UEID)]; + + }; + 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_UEID() { 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}; + + }; + +}; +/* +RSRPMRList ::= SEQUENCE (SIZE(1..maxUEReport)) OF + SEQUENCE { + rSRPMeasurementResult RSRPMeasurementResult, + iE-Extensions ProtocolExtensionContainer { {RSRPMRList-ExtIEs} } OPTIONAL, + ... + } +*/ + +struct RSRPMRList_elm : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "RSRPMRList_elm";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct rSRPMeasurementResult_t : RSRPMeasurementResult + { + static constexpr const char* name() {return "rSRPMeasurementResult_t";} + using parent_t = RSRPMeasurementResult; + + }; + rSRPMeasurementResult_t& ref_rSRPMeasurementResult() {return rSRPMeasurementResult;} + rSRPMeasurementResult_t const& ref_rSRPMeasurementResult() const {return rSRPMeasurementResult;} + 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(rSRPMeasurementResult); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rSRPMeasurementResult); + v(iE_Extensions); + + }; + void clear() + { + rSRPMeasurementResult.clear(); + iE_Extensions.clear(); + + }; + private: + rSRPMeasurementResult_t rSRPMeasurementResult; + iE_Extensions_t iE_Extensions; + +}; +struct RSRPMRList : asn::sequenceof +{ + static constexpr const char* name() {return "RSRPMRList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-non-GBR-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_non_GBR_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-non-GBR-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-Total-PRB-usage::= INTEGER (0..100) +*/ + +struct UL_Total_PRB_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-Total-PRB-usage";} + using parent_t = asn::integer<>; + +}; + +/* +UL-scheduling-PDCCH-CCE-usage::= INTEGER (0..100) +*/ + +struct UL_scheduling_PDCCH_CCE_usage : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-scheduling-PDCCH-CCE-usage";} + using parent_t = asn::integer<>; + +}; + +/* +RadioResourceStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-DL-scheduling-PDCCH-CCE-usage CRITICALITY ignore EXTENSION DL-scheduling-PDCCH-CCE-usage PRESENCE optional}| + + {ID id-UL-scheduling-PDCCH-CCE-usage CRITICALITY ignore EXTENSION UL-scheduling-PDCCH-CCE-usage PRESENCE optional}, + ... +} +*/ + +struct RadioResourceStatus_ExtIEs +{ + 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_DL_scheduling_PDCCH_CCE_usage() { set(id_DL_scheduling_PDCCH_CCE_usage); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { set(id_UL_scheduling_PDCCH_CCE_usage); 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_DL_scheduling_PDCCH_CCE_usage)) { type = 1; return true; } + else if(equal(id_UL_scheduling_PDCCH_CCE_usage)) { 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_DL_scheduling_PDCCH_CCE_usage);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UL_scheduling_PDCCH_CCE_usage);} 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_DL_scheduling_PDCCH_CCE_usage() { set(ignore); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { 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;} + DL_scheduling_PDCCH_CCE_usage& select_id_DL_scheduling_PDCCH_CCE_usage() { return set(1); } + DL_scheduling_PDCCH_CCE_usage const* get_id_DL_scheduling_PDCCH_CCE_usage() const { return get(1); } + UL_scheduling_PDCCH_CCE_usage& select_id_UL_scheduling_PDCCH_CCE_usage() { return set(2); } + UL_scheduling_PDCCH_CCE_usage const* get_id_UL_scheduling_PDCCH_CCE_usage() 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_DL_scheduling_PDCCH_CCE_usage()); return true; + case 2: v(select_id_UL_scheduling_PDCCH_CCE_usage()); 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_scheduling_PDCCH_CCE_usage)]; + char dummy2[sizeof(UL_scheduling_PDCCH_CCE_usage)]; + + }; + 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_DL_scheduling_PDCCH_CCE_usage() { set(optional); type=1;} + void select_id_UL_scheduling_PDCCH_CCE_usage() { 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}; + + }; + +}; +/* +RadioResourceStatus ::= SEQUENCE { + dL-GBR-PRB-usage DL-GBR-PRB-usage, + uL-GBR-PRB-usage UL-GBR-PRB-usage, + dL-non-GBR-PRB-usage DL-non-GBR-PRB-usage, + uL-non-GBR-PRB-usage UL-non-GBR-PRB-usage, + dL-Total-PRB-usage DL-Total-PRB-usage, + uL-Total-PRB-usage UL-Total-PRB-usage, + iE-Extensions ProtocolExtensionContainer { {RadioResourceStatus-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RadioResourceStatus : asn::sequence<7, 0, true, 1> +{ + static constexpr const char* name() {return "RadioResourceStatus";} + using parent_t = asn::sequence<7, 0, true, 1>; + struct dL_GBR_PRB_usage_t : DL_GBR_PRB_usage + { + static constexpr const char* name() {return "dL_GBR_PRB_usage_t";} + using parent_t = DL_GBR_PRB_usage; + + }; + dL_GBR_PRB_usage_t& ref_dL_GBR_PRB_usage() {return dL_GBR_PRB_usage;} + dL_GBR_PRB_usage_t const& ref_dL_GBR_PRB_usage() const {return dL_GBR_PRB_usage;} + struct uL_GBR_PRB_usage_t : UL_GBR_PRB_usage + { + static constexpr const char* name() {return "uL_GBR_PRB_usage_t";} + using parent_t = UL_GBR_PRB_usage; + + }; + uL_GBR_PRB_usage_t& ref_uL_GBR_PRB_usage() {return uL_GBR_PRB_usage;} + uL_GBR_PRB_usage_t const& ref_uL_GBR_PRB_usage() const {return uL_GBR_PRB_usage;} + struct dL_non_GBR_PRB_usage_t : DL_non_GBR_PRB_usage + { + static constexpr const char* name() {return "dL_non_GBR_PRB_usage_t";} + using parent_t = DL_non_GBR_PRB_usage; + + }; + dL_non_GBR_PRB_usage_t& ref_dL_non_GBR_PRB_usage() {return dL_non_GBR_PRB_usage;} + dL_non_GBR_PRB_usage_t const& ref_dL_non_GBR_PRB_usage() const {return dL_non_GBR_PRB_usage;} + struct uL_non_GBR_PRB_usage_t : UL_non_GBR_PRB_usage + { + static constexpr const char* name() {return "uL_non_GBR_PRB_usage_t";} + using parent_t = UL_non_GBR_PRB_usage; + + }; + uL_non_GBR_PRB_usage_t& ref_uL_non_GBR_PRB_usage() {return uL_non_GBR_PRB_usage;} + uL_non_GBR_PRB_usage_t const& ref_uL_non_GBR_PRB_usage() const {return uL_non_GBR_PRB_usage;} + struct dL_Total_PRB_usage_t : DL_Total_PRB_usage + { + static constexpr const char* name() {return "dL_Total_PRB_usage_t";} + using parent_t = DL_Total_PRB_usage; + + }; + dL_Total_PRB_usage_t& ref_dL_Total_PRB_usage() {return dL_Total_PRB_usage;} + dL_Total_PRB_usage_t const& ref_dL_Total_PRB_usage() const {return dL_Total_PRB_usage;} + struct uL_Total_PRB_usage_t : UL_Total_PRB_usage + { + static constexpr const char* name() {return "uL_Total_PRB_usage_t";} + using parent_t = UL_Total_PRB_usage; + + }; + uL_Total_PRB_usage_t& ref_uL_Total_PRB_usage() {return uL_Total_PRB_usage;} + uL_Total_PRB_usage_t const& ref_uL_Total_PRB_usage() const {return uL_Total_PRB_usage;} + 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_GBR_PRB_usage); + v(uL_GBR_PRB_usage); + v(dL_non_GBR_PRB_usage); + v(uL_non_GBR_PRB_usage); + v(dL_Total_PRB_usage); + v(uL_Total_PRB_usage); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dL_GBR_PRB_usage); + v(uL_GBR_PRB_usage); + v(dL_non_GBR_PRB_usage); + v(uL_non_GBR_PRB_usage); + v(dL_Total_PRB_usage); + v(uL_Total_PRB_usage); + v(iE_Extensions); + + }; + void clear() + { + dL_GBR_PRB_usage.clear(); + uL_GBR_PRB_usage.clear(); + dL_non_GBR_PRB_usage.clear(); + uL_non_GBR_PRB_usage.clear(); + dL_Total_PRB_usage.clear(); + uL_Total_PRB_usage.clear(); + iE_Extensions.clear(); + + }; + private: + dL_GBR_PRB_usage_t dL_GBR_PRB_usage; + uL_GBR_PRB_usage_t uL_GBR_PRB_usage; + dL_non_GBR_PRB_usage_t dL_non_GBR_PRB_usage; + uL_non_GBR_PRB_usage_t uL_non_GBR_PRB_usage; + dL_Total_PRB_usage_t dL_Total_PRB_usage; + uL_Total_PRB_usage_t uL_Total_PRB_usage; + iE_Extensions_t iE_Extensions; + +}; +/* +ReceiveStatusOfULPDCPSDUsExtended ::= BIT STRING (SIZE(1..16384)) +*/ + +struct ReceiveStatusOfULPDCPSDUsExtended : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusOfULPDCPSDUsExtended";} + using parent_t = asn::bstring<>; + +}; + +/* +ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 ::= BIT STRING (SIZE(1..131072)) +*/ + +struct ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusOfULPDCPSDUsPDCP-SNlength18";} + using parent_t = asn::bstring<>; + +}; + +/* +ReceiveStatusofULPDCPSDUs ::= BIT STRING (SIZE(4096)) +*/ + +struct ReceiveStatusofULPDCPSDUs : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReceiveStatusofULPDCPSDUs";} + using parent_t = asn::bstring<>; + +}; + +/* +Registration-Request ::= ENUMERATED { + start, + stop, + ..., + partial-stop, + add +} +*/ + +struct Registration_Request : asn::enumerated<4, 2, true> +{ + static constexpr const char* name() {return "Registration-Request";} + using parent_t = asn::enumerated<4, 2, true>; + typedef enum { + start + ,stop + ,partial_stop + ,add + } index_t; + +}; + +/* +RelativeNarrowbandTxPower-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-enhancedRNTP CRITICALITY ignore EXTENSION EnhancedRNTP PRESENCE optional }, + ... +} +*/ + +struct RelativeNarrowbandTxPower_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_enhancedRNTP() { set(id_enhancedRNTP); 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_enhancedRNTP)) { 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_enhancedRNTP);} 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_enhancedRNTP() { 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;} + EnhancedRNTP& select_id_enhancedRNTP() { return set(1); } + EnhancedRNTP const* get_id_enhancedRNTP() 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_enhancedRNTP()); 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(EnhancedRNTP)]; + + }; + 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_enhancedRNTP() { 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}; + + }; + +}; +/* +RelativeNarrowbandTxPower ::= SEQUENCE { + + rNTP-PerPRB BIT STRING (SIZE(6..110, ...)), + rNTP-Threshold RNTP-Threshold, + numberOfCellSpecificAntennaPorts ENUMERATED {one, two, four, ...}, + p-B INTEGER (0..3,...), + pDCCH-InterferenceImpact INTEGER (0..4,...), + iE-Extensions ProtocolExtensionContainer { {RelativeNarrowbandTxPower-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct RelativeNarrowbandTxPower : asn::sequence<6, 0, true, 1> +{ + static constexpr const char* name() {return "RelativeNarrowbandTxPower";} + using parent_t = asn::sequence<6, 0, true, 1>; + struct rNTP_PerPRB_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "rNTP_PerPRB_t";} + using parent_t = asn::bstring<>; + + }; + + rNTP_PerPRB_t& ref_rNTP_PerPRB() {return rNTP_PerPRB;} + rNTP_PerPRB_t const& ref_rNTP_PerPRB() const {return rNTP_PerPRB;} + struct rNTP_Threshold_t : RNTP_Threshold + { + static constexpr const char* name() {return "rNTP_Threshold_t";} + using parent_t = RNTP_Threshold; + + }; + rNTP_Threshold_t& ref_rNTP_Threshold() {return rNTP_Threshold;} + rNTP_Threshold_t const& ref_rNTP_Threshold() const {return rNTP_Threshold;} + struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + one + ,two + ,four + } index_t; + + }; + + numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;} + numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;} + struct p_B_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "p_B_t";} + using parent_t = asn::integer<>; + + }; + + p_B_t& ref_p_B() {return p_B;} + p_B_t const& ref_p_B() const {return p_B;} + struct pDCCH_InterferenceImpact_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "pDCCH_InterferenceImpact_t";} + using parent_t = asn::integer<>; + + }; + + pDCCH_InterferenceImpact_t& ref_pDCCH_InterferenceImpact() {return pDCCH_InterferenceImpact;} + pDCCH_InterferenceImpact_t const& ref_pDCCH_InterferenceImpact() const {return pDCCH_InterferenceImpact;} + 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(rNTP_PerPRB); + v(rNTP_Threshold); + v(numberOfCellSpecificAntennaPorts); + v(p_B); + v(pDCCH_InterferenceImpact); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rNTP_PerPRB); + v(rNTP_Threshold); + v(numberOfCellSpecificAntennaPorts); + v(p_B); + v(pDCCH_InterferenceImpact); + v(iE_Extensions); + + }; + void clear() + { + rNTP_PerPRB.clear(); + rNTP_Threshold.clear(); + numberOfCellSpecificAntennaPorts.clear(); + p_B.clear(); + pDCCH_InterferenceImpact.clear(); + iE_Extensions.clear(); + + }; + private: + rNTP_PerPRB_t rNTP_PerPRB; + rNTP_Threshold_t rNTP_Threshold; + numberOfCellSpecificAntennaPorts_t numberOfCellSpecificAntennaPorts; + p_B_t p_B; + pDCCH_InterferenceImpact_t pDCCH_InterferenceImpact; + iE_Extensions_t iE_Extensions; + +}; +/* +ReportCharacteristics ::= BIT STRING (SIZE (32)) +*/ + +struct ReportCharacteristics : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ReportCharacteristics";} + using parent_t = asn::bstring<>; + +}; + +/* +ReportingPeriodicityCSIR ::= ENUMERATED { + ms5, + ms10, + ms20, + ms40, + ms80, +... +} +*/ + +struct ReportingPeriodicityCSIR : asn::enumerated<5, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicityCSIR";} + using parent_t = asn::enumerated<5, 0, true>; + typedef enum { + ms5 + ,ms10 + ,ms20 + ,ms40 + ,ms80 + } index_t; + +}; + +/* +ReportingPeriodicityRSRPMR ::= ENUMERATED { + one-hundred-20-ms, + two-hundred-40-ms, + four-hundred-80-ms, + six-hundred-40-ms, +... +} +*/ + +struct ReportingPeriodicityRSRPMR : asn::enumerated<4, 0, true> +{ + static constexpr const char* name() {return "ReportingPeriodicityRSRPMR";} + using parent_t = asn::enumerated<4, 0, true>; + typedef enum { + one_hundred_20_ms + ,two_hundred_40_ms + ,four_hundred_80_ms + ,six_hundred_40_ms + } index_t; + +}; + +/* +ResumeID ::= CHOICE { + non-truncated BIT STRING(SIZE(40)), + truncated BIT STRING(SIZE(24)), + ... +} +*/ + +struct ResumeID : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "ResumeID";} + 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); } + ~ResumeID() {clear();} + struct non_truncated_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "non_truncated_t";} + using parent_t = asn::bstring<>; + + }; + + struct truncated_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "truncated_t";} + using parent_t = asn::bstring<>; + + }; + + 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); + + } + non_truncated_t& select_non_truncated() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + non_truncated_t const* get_non_truncated() const { if(get_index() == 1) { return &var.as();} return nullptr; } + truncated_t& select_truncated() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + truncated_t const* get_truncated() 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(non_truncated_t)]; + char dummy2[sizeof(truncated_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +S1TNLLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct S1TNLLoadIndicator_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}; + + }; + +}; +/* +S1TNLLoadIndicator ::= SEQUENCE { + dLS1TNLLoadIndicator LoadIndicator, + uLS1TNLLoadIndicator LoadIndicator, + iE-Extensions ProtocolExtensionContainer { {S1TNLLoadIndicator-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct S1TNLLoadIndicator : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "S1TNLLoadIndicator";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct dLS1TNLLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "dLS1TNLLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + dLS1TNLLoadIndicator_t& ref_dLS1TNLLoadIndicator() {return dLS1TNLLoadIndicator;} + dLS1TNLLoadIndicator_t const& ref_dLS1TNLLoadIndicator() const {return dLS1TNLLoadIndicator;} + struct uLS1TNLLoadIndicator_t : LoadIndicator + { + static constexpr const char* name() {return "uLS1TNLLoadIndicator_t";} + using parent_t = LoadIndicator; + + }; + uLS1TNLLoadIndicator_t& ref_uLS1TNLLoadIndicator() {return uLS1TNLLoadIndicator;} + uLS1TNLLoadIndicator_t const& ref_uLS1TNLLoadIndicator() const {return uLS1TNLLoadIndicator;} + 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(dLS1TNLLoadIndicator); + v(uLS1TNLLoadIndicator); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dLS1TNLLoadIndicator); + v(uLS1TNLLoadIndicator); + v(iE_Extensions); + + }; + void clear() + { + dLS1TNLLoadIndicator.clear(); + uLS1TNLLoadIndicator.clear(); + iE_Extensions.clear(); + + }; + private: + dLS1TNLLoadIndicator_t dLS1TNLLoadIndicator; + uLS1TNLLoadIndicator_t uLS1TNLLoadIndicator; + iE_Extensions_t iE_Extensions; + +}; +/* +SCGChangeIndication ::= ENUMERATED {pDCPCountWrapAround, pSCellChange, other, ...} +*/ + +struct SCGChangeIndication : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SCGChangeIndication";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + pDCPCountWrapAround + ,pSCellChange + ,other + } index_t; + +}; + +/* +SCGConfigurationQuery ::= ENUMERATED {true,...} +*/ + +struct SCGConfigurationQuery : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SCGConfigurationQuery";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +SGNB-Addition-Trigger-Ind ::= ENUMERATED { + sn-change, + inter-eNB-HO, + intra-eNB-HO, + ... +} +*/ + +struct SGNB_Addition_Trigger_Ind : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SGNB-Addition-Trigger-Ind";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + sn_change + ,inter_eNB_HO + ,intra_eNB_HO + } index_t; + +}; + +/* +SIPTOBearerDeactivationIndication ::= ENUMERATED { + true, + ... +} +*/ + +struct SIPTOBearerDeactivationIndication : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SIPTOBearerDeactivationIndication";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +SRBType ::= ENUMERATED {srb1, srb2, ...} +*/ + +struct SRBType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "SRBType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + srb1 + ,srb2 + } index_t; + +}; + +/* +SRVCCOperationPossible ::= ENUMERATED { + possible, + ... +} +*/ + +struct SRVCCOperationPossible : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SRVCCOperationPossible";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + possible + } index_t; + +}; + +/* +ScheduledCommunicationTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ScheduledCommunicationTime_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}; + + }; + +}; +/* +ScheduledCommunicationTime ::= SEQUENCE { + dayofWeek BIT STRING (SIZE(7)) OPTIONAL, + timeofDayStart INTEGER (0..86399, ...) OPTIONAL, + timeofDayEnd INTEGER (0..86399, ...) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { ScheduledCommunicationTime-ExtIEs}} OPTIONAL, + ... +} +*/ + +struct ScheduledCommunicationTime : asn::sequence<4, 0, true, 4> +{ + static constexpr const char* name() {return "ScheduledCommunicationTime";} + using parent_t = asn::sequence<4, 0, true, 4>; + struct dayofWeek_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dayofWeek_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dayofWeek_t& set_dayofWeek() { dayofWeek.setpresent(true); return dayofWeek;} + dayofWeek_t const* get_dayofWeek() const {return dayofWeek.is_valid() ? &dayofWeek : nullptr;} + struct timeofDayStart_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "timeofDayStart_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + timeofDayStart_t& set_timeofDayStart() { timeofDayStart.setpresent(true); return timeofDayStart;} + timeofDayStart_t const* get_timeofDayStart() const {return timeofDayStart.is_valid() ? &timeofDayStart : nullptr;} + struct timeofDayEnd_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "timeofDayEnd_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + timeofDayEnd_t& set_timeofDayEnd() { timeofDayEnd.setpresent(true); return timeofDayEnd;} + timeofDayEnd_t const* get_timeofDayEnd() const {return timeofDayEnd.is_valid() ? &timeofDayEnd : 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(dayofWeek); + v(timeofDayStart); + v(timeofDayEnd); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(dayofWeek); + v(timeofDayStart); + v(timeofDayEnd); + v(iE_Extensions); + + }; + void clear() + { + dayofWeek.clear(); + timeofDayStart.clear(); + timeofDayEnd.clear(); + iE_Extensions.clear(); + + }; + private: + dayofWeek_t dayofWeek; + timeofDayStart_t timeofDayStart; + timeofDayEnd_t timeofDayEnd; + iE_Extensions_t iE_Extensions; + +}; +/* +SeNBSecurityKey ::= BIT STRING (SIZE(256)) +*/ + +struct SeNBSecurityKey : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SeNBSecurityKey";} + using parent_t = asn::bstring<>; + +}; + +/* +SeNBtoMeNBContainer ::= OCTET STRING +*/ + +struct SeNBtoMeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "SeNBtoMeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +SecondaryRATUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SecondaryRATUsageReport_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}; + + }; + +}; +/* +SecondaryRATUsageReport-Item ::= SEQUENCE { + e-RAB-ID E-RAB-ID, + secondaryRATType ENUMERATED {nr, ...}, + e-RABUsageReportList E-RABUsageReportList, + iE-Extensions ProtocolExtensionContainer { {SecondaryRATUsageReport-Item-ExtIEs} } OPTIONAL, +... +} +*/ + +struct SecondaryRATUsageReport_Item : asn::sequence<4, 0, true, 1> +{ + static constexpr const char* name() {return "SecondaryRATUsageReport-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 secondaryRATType_t : asn::enumerated<1, 0, true> + { + static constexpr const char* name() {return "secondaryRATType_t";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + nr + } index_t; + + }; + + secondaryRATType_t& ref_secondaryRATType() {return secondaryRATType;} + secondaryRATType_t const& ref_secondaryRATType() const {return secondaryRATType;} + struct e_RABUsageReportList_t : E_RABUsageReportList + { + static constexpr const char* name() {return "e_RABUsageReportList_t";} + using parent_t = E_RABUsageReportList; + + }; + e_RABUsageReportList_t& ref_e_RABUsageReportList() {return e_RABUsageReportList;} + e_RABUsageReportList_t const& ref_e_RABUsageReportList() const {return e_RABUsageReportList;} + 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(secondaryRATType); + v(e_RABUsageReportList); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(e_RAB_ID); + v(secondaryRATType); + v(e_RABUsageReportList); + v(iE_Extensions); + + }; + void clear() + { + e_RAB_ID.clear(); + secondaryRATType.clear(); + e_RABUsageReportList.clear(); + iE_Extensions.clear(); + + }; + private: + e_RAB_ID_t e_RAB_ID; + secondaryRATType_t secondaryRATType; + e_RABUsageReportList_t e_RABUsageReportList; + iE_Extensions_t iE_Extensions; + +}; +/* +SecondaryRATUsageReport-ItemIEs X2AP-PROTOCOL-IES ::= { + { ID id-SecondaryRATUsageReport-Item CRITICALITY reject TYPE SecondaryRATUsageReport-Item PRESENCE mandatory}, + ... +} +*/ + +struct SecondaryRATUsageReport_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_SecondaryRATUsageReport_Item() { set(id_SecondaryRATUsageReport_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_SecondaryRATUsageReport_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_SecondaryRATUsageReport_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_SecondaryRATUsageReport_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;} + SecondaryRATUsageReport_Item& select_id_SecondaryRATUsageReport_Item() { return set(1); } + SecondaryRATUsageReport_Item const* get_id_SecondaryRATUsageReport_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_SecondaryRATUsageReport_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(SecondaryRATUsageReport_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_SecondaryRATUsageReport_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}; + + }; + +}; +/* +SecondaryRATUsageReportList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container {{SecondaryRATUsageReport-ItemIEs}} +*/ + +struct SecondaryRATUsageReportList_elm : ProtocolIE_Single_Container +{ + static constexpr const char* name() {return "SecondaryRATUsageReportList_elm";} + using parent_t = ProtocolIE_Single_Container; + +}; +struct SecondaryRATUsageReportList : asn::sequenceof +{ + static constexpr const char* name() {return "SecondaryRATUsageReportList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServedCell-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ServedCell_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}; + + }; + +}; +/* +ServedCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-Number-of-Antennaports CRITICALITY ignore EXTENSION Number-of-Antennaports PRESENCE optional}| + { ID id-PRACH-Configuration CRITICALITY ignore EXTENSION PRACH-Configuration PRESENCE optional}| + { ID id-MBSFN-Subframe-Info CRITICALITY ignore EXTENSION MBSFN-Subframe-Infolist PRESENCE optional}| + { ID id-CSG-Id CRITICALITY ignore EXTENSION CSG-Id PRESENCE optional}| + { ID id-MBMS-Service-Area-List CRITICALITY ignore EXTENSION MBMS-Service-Area-Identity-List PRESENCE optional}| + { ID id-MultibandInfoList CRITICALITY ignore EXTENSION MultibandInfoList PRESENCE optional}| + { ID id-FreqBandIndicatorPriority CRITICALITY ignore EXTENSION FreqBandIndicatorPriority PRESENCE optional}| + { ID id-BandwidthReducedSI CRITICALITY ignore EXTENSION BandwidthReducedSI PRESENCE optional}| + { ID id-ProtectedEUTRAResourceIndication CRITICALITY ignore EXTENSION ProtectedEUTRAResourceIndication PRESENCE optional}, + ... +} +*/ + +struct ServedCell_Information_ExtIEs +{ + 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_Number_of_Antennaports() { set(id_Number_of_Antennaports); type=1;} + void select_id_PRACH_Configuration() { set(id_PRACH_Configuration); type=2;} + void select_id_MBSFN_Subframe_Info() { set(id_MBSFN_Subframe_Info); type=3;} + void select_id_CSG_Id() { set(id_CSG_Id); type=4;} + void select_id_MBMS_Service_Area_List() { set(id_MBMS_Service_Area_List); type=5;} + void select_id_MultibandInfoList() { set(id_MultibandInfoList); type=6;} + void select_id_FreqBandIndicatorPriority() { set(id_FreqBandIndicatorPriority); type=7;} + void select_id_BandwidthReducedSI() { set(id_BandwidthReducedSI); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(id_ProtectedEUTRAResourceIndication); type=9;} + 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_Number_of_Antennaports)) { type = 1; return true; } + else if(equal(id_PRACH_Configuration)) { type = 2; return true; } + else if(equal(id_MBSFN_Subframe_Info)) { type = 3; return true; } + else if(equal(id_CSG_Id)) { type = 4; return true; } + else if(equal(id_MBMS_Service_Area_List)) { type = 5; return true; } + else if(equal(id_MultibandInfoList)) { type = 6; return true; } + else if(equal(id_FreqBandIndicatorPriority)) { type = 7; return true; } + else if(equal(id_BandwidthReducedSI)) { type = 8; return true; } + else if(equal(id_ProtectedEUTRAResourceIndication)) { 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_Number_of_Antennaports);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_PRACH_Configuration);} return false; + case 3: type = 3; if(v(ref_nested())) { return equal(id_MBSFN_Subframe_Info);} return false; + case 4: type = 4; if(v(ref_nested())) { return equal(id_CSG_Id);} return false; + case 5: type = 5; if(v(ref_nested())) { return equal(id_MBMS_Service_Area_List);} return false; + case 6: type = 6; if(v(ref_nested())) { return equal(id_MultibandInfoList);} return false; + case 7: type = 7; if(v(ref_nested())) { return equal(id_FreqBandIndicatorPriority);} return false; + case 8: type = 8; if(v(ref_nested())) { return equal(id_BandwidthReducedSI);} return false; + case 9: type = 9; if(v(ref_nested())) { return equal(id_ProtectedEUTRAResourceIndication);} 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_Number_of_Antennaports() { set(ignore); type=1;} + void select_id_PRACH_Configuration() { set(ignore); type=2;} + void select_id_MBSFN_Subframe_Info() { set(ignore); type=3;} + void select_id_CSG_Id() { set(ignore); type=4;} + void select_id_MBMS_Service_Area_List() { set(ignore); type=5;} + void select_id_MultibandInfoList() { set(ignore); type=6;} + void select_id_FreqBandIndicatorPriority() { set(ignore); type=7;} + void select_id_BandwidthReducedSI() { set(ignore); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(ignore); type=9;} + 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 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(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; return v(ref_nested()); + ref_nested().clear(); + } + return false; + + } + 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;} + Number_of_Antennaports& select_id_Number_of_Antennaports() { return set(1); } + Number_of_Antennaports const* get_id_Number_of_Antennaports() const { return get(1); } + PRACH_Configuration& select_id_PRACH_Configuration() { return set(2); } + PRACH_Configuration const* get_id_PRACH_Configuration() const { return get(2); } + MBSFN_Subframe_Infolist& select_id_MBSFN_Subframe_Info() { return set(3); } + MBSFN_Subframe_Infolist const* get_id_MBSFN_Subframe_Info() const { return get(3); } + CSG_Id& select_id_CSG_Id() { return set(4); } + CSG_Id const* get_id_CSG_Id() const { return get(4); } + MBMS_Service_Area_Identity_List& select_id_MBMS_Service_Area_List() { return set(5); } + MBMS_Service_Area_Identity_List const* get_id_MBMS_Service_Area_List() const { return get(5); } + MultibandInfoList& select_id_MultibandInfoList() { return set(6); } + MultibandInfoList const* get_id_MultibandInfoList() const { return get(6); } + FreqBandIndicatorPriority& select_id_FreqBandIndicatorPriority() { return set(7); } + FreqBandIndicatorPriority const* get_id_FreqBandIndicatorPriority() const { return get(7); } + BandwidthReducedSI& select_id_BandwidthReducedSI() { return set(8); } + BandwidthReducedSI const* get_id_BandwidthReducedSI() const { return get(8); } + ProtectedEUTRAResourceIndication& select_id_ProtectedEUTRAResourceIndication() { return set(9); } + ProtectedEUTRAResourceIndication const* get_id_ProtectedEUTRAResourceIndication() 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_Number_of_Antennaports()); return true; + case 2: v(select_id_PRACH_Configuration()); return true; + case 3: v(select_id_MBSFN_Subframe_Info()); return true; + case 4: v(select_id_CSG_Id()); return true; + case 5: v(select_id_MBMS_Service_Area_List()); return true; + case 6: v(select_id_MultibandInfoList()); return true; + case 7: v(select_id_FreqBandIndicatorPriority()); return true; + case 8: v(select_id_BandwidthReducedSI()); return true; + case 9: v(select_id_ProtectedEUTRAResourceIndication()); 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(BandwidthReducedSI)]; + char dummy2[sizeof(CSG_Id)]; + char dummy3[sizeof(FreqBandIndicatorPriority)]; + char dummy4[sizeof(MBMS_Service_Area_Identity_List)]; + char dummy5[sizeof(MBSFN_Subframe_Infolist)]; + char dummy6[sizeof(MultibandInfoList)]; + char dummy7[sizeof(Number_of_Antennaports)]; + char dummy8[sizeof(PRACH_Configuration)]; + char dummy9[sizeof(ProtectedEUTRAResourceIndication)]; + + }; + 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_Number_of_Antennaports() { set(optional); type=1;} + void select_id_PRACH_Configuration() { set(optional); type=2;} + void select_id_MBSFN_Subframe_Info() { set(optional); type=3;} + void select_id_CSG_Id() { set(optional); type=4;} + void select_id_MBMS_Service_Area_List() { set(optional); type=5;} + void select_id_MultibandInfoList() { set(optional); type=6;} + void select_id_FreqBandIndicatorPriority() { set(optional); type=7;} + void select_id_BandwidthReducedSI() { set(optional); type=8;} + void select_id_ProtectedEUTRAResourceIndication() { set(optional); type=9;} + 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 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(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; 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}; + + }; + +}; +/* +ServedCell-Information ::= SEQUENCE { + pCI PCI, + cellId ECGI, + tAC TAC, + broadcastPLMNs BroadcastPLMNs-Item, + eUTRA-Mode-Info EUTRA-Mode-Info, + iE-Extensions ProtocolExtensionContainer { {ServedCell-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCell_Information : asn::sequence<6, 0, true, 1> +{ + static constexpr const char* name() {return "ServedCell-Information";} + using parent_t = asn::sequence<6, 0, true, 1>; + struct pCI_t : PCI + { + static constexpr const char* name() {return "pCI_t";} + using parent_t = PCI; + + }; + pCI_t& ref_pCI() {return pCI;} + pCI_t const& ref_pCI() const {return pCI;} + struct cellId_t : ECGI + { + static constexpr const char* name() {return "cellId_t";} + using parent_t = ECGI; + + }; + cellId_t& ref_cellId() {return cellId;} + cellId_t const& ref_cellId() const {return cellId;} + struct tAC_t : TAC + { + static constexpr const char* name() {return "tAC_t";} + using parent_t = TAC; + + }; + tAC_t& ref_tAC() {return tAC;} + tAC_t const& ref_tAC() const {return tAC;} + 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 eUTRA_Mode_Info_t : EUTRA_Mode_Info + { + static constexpr const char* name() {return "eUTRA_Mode_Info_t";} + using parent_t = EUTRA_Mode_Info; + + }; + eUTRA_Mode_Info_t& ref_eUTRA_Mode_Info() {return eUTRA_Mode_Info;} + eUTRA_Mode_Info_t const& ref_eUTRA_Mode_Info() const {return eUTRA_Mode_Info;} + 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(pCI); + v(cellId); + v(tAC); + v(broadcastPLMNs); + v(eUTRA_Mode_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(pCI); + v(cellId); + v(tAC); + v(broadcastPLMNs); + v(eUTRA_Mode_Info); + v(iE_Extensions); + + }; + void clear() + { + pCI.clear(); + cellId.clear(); + tAC.clear(); + broadcastPLMNs.clear(); + eUTRA_Mode_Info.clear(); + iE_Extensions.clear(); + + }; + private: + pCI_t pCI; + cellId_t cellId; + tAC_t tAC; + broadcastPLMNs_t broadcastPLMNs; + eUTRA_Mode_Info_t eUTRA_Mode_Info; + iE_Extensions_t iE_Extensions; + +}; +/* +ServedCells ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE { + servedCellInfo ServedCell-Information, + neighbour-Info Neighbour-Information OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {ServedCell-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ServedCells_elm : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "ServedCells_elm";} + using parent_t = asn::sequence<3, 0, true, 2>; + 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(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(servedCellInfo); + v(neighbour_Info); + v(iE_Extensions); + + }; + void clear() + { + servedCellInfo.clear(); + neighbour_Info.clear(); + iE_Extensions.clear(); + + }; + private: + servedCellInfo_t servedCellInfo; + neighbour_Info_t neighbour_Info; + iE_Extensions_t iE_Extensions; + +}; +struct ServedCells : asn::sequenceof +{ + static constexpr const char* name() {return "ServedCells";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +ServiceType ::= ENUMERATED{ + qMC-for-streaming-service, + qMC-for-MTSI-service, + ... +} +*/ + +struct ServiceType : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "ServiceType";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + qMC_for_streaming_service + ,qMC_for_MTSI_service + } index_t; + +}; + +/* +SgNB-UE-X2AP-ID ::= INTEGER (0..4294967295) +*/ + +struct SgNB_UE_X2AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SgNB-UE-X2AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +SgNBCoordinationAssistanceInformation ::= ENUMERATED{ + coordination-not-required, + ... +} +*/ + +struct SgNBCoordinationAssistanceInformation : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "SgNBCoordinationAssistanceInformation";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + coordination_not_required + } index_t; + +}; + +/* +SgNBResourceCoordinationInformationExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-ECGI CRITICALITY ignore EXTENSION ECGI PRESENCE optional}| + { ID id-SgNBCoordinationAssistanceInformation CRITICALITY reject EXTENSION SgNBCoordinationAssistanceInformation PRESENCE optional}, + ... +} +*/ + +struct SgNBResourceCoordinationInformationExtIEs +{ + 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_ECGI() { set(id_ECGI); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(id_SgNBCoordinationAssistanceInformation); 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_ECGI)) { type = 1; return true; } + else if(equal(id_SgNBCoordinationAssistanceInformation)) { 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_ECGI);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNBCoordinationAssistanceInformation);} 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_ECGI() { set(ignore); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { set(reject); 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(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(ignore);} 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 Extension_t : asn::typefield + { + ~Extension_t() {clear();} + size_t get_index() const {return type;} + ECGI& select_id_ECGI() { return set(1); } + ECGI const* get_id_ECGI() const { return get(1); } + SgNBCoordinationAssistanceInformation& select_id_SgNBCoordinationAssistanceInformation() { return set(2); } + SgNBCoordinationAssistanceInformation const* get_id_SgNBCoordinationAssistanceInformation() 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_ECGI()); return true; + case 2: v(select_id_SgNBCoordinationAssistanceInformation()); 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(ECGI)]; + char dummy2[sizeof(SgNBCoordinationAssistanceInformation)]; + + }; + 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_ECGI() { set(optional); type=1;} + void select_id_SgNBCoordinationAssistanceInformation() { 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}; + + }; + +}; +/* +SgNBResourceCoordinationInformation ::= SEQUENCE { + nR-CGI NRCGI, + uLCoordinationInformation BIT STRING (SIZE(6..4400, ...)), + dLCoordinationInformation BIT STRING (SIZE(6..4400, ...)) OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SgNBResourceCoordinationInformationExtIEs} } OPTIONAL, + ... +} +*/ + +struct SgNBResourceCoordinationInformation : asn::sequence<4, 0, true, 2> +{ + static constexpr const char* name() {return "SgNBResourceCoordinationInformation";} + using parent_t = asn::sequence<4, 0, true, 2>; + struct nR_CGI_t : NRCGI + { + static constexpr const char* name() {return "nR_CGI_t";} + using parent_t = NRCGI; + + }; + nR_CGI_t& ref_nR_CGI() {return nR_CGI;} + nR_CGI_t const& ref_nR_CGI() const {return nR_CGI;} + struct uLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "uLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + + }; + + uLCoordinationInformation_t& ref_uLCoordinationInformation() {return uLCoordinationInformation;} + uLCoordinationInformation_t const& ref_uLCoordinationInformation() const {return uLCoordinationInformation;} + struct dLCoordinationInformation_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "dLCoordinationInformation_t";} + using parent_t = asn::bstring<>; + static constexpr bool optional = true; + + }; + + dLCoordinationInformation_t& set_dLCoordinationInformation() { dLCoordinationInformation.setpresent(true); return dLCoordinationInformation;} + dLCoordinationInformation_t const* get_dLCoordinationInformation() const {return dLCoordinationInformation.is_valid() ? &dLCoordinationInformation : 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(nR_CGI); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(nR_CGI); + v(uLCoordinationInformation); + v(dLCoordinationInformation); + v(iE_Extensions); + + }; + void clear() + { + nR_CGI.clear(); + uLCoordinationInformation.clear(); + dLCoordinationInformation.clear(); + iE_Extensions.clear(); + + }; + private: + nR_CGI_t nR_CGI; + uLCoordinationInformation_t uLCoordinationInformation; + dLCoordinationInformation_t dLCoordinationInformation; + iE_Extensions_t iE_Extensions; + +}; +/* +SgNBSecurityKey ::= BIT STRING (SIZE(256)) +*/ + +struct SgNBSecurityKey : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SgNBSecurityKey";} + using parent_t = asn::bstring<>; + +}; + +/* +SgNBtoMeNBContainer ::= OCTET STRING +*/ + +struct SgNBtoMeNBContainer : asn::ostring<> +{ + static constexpr const char* name() {return "SgNBtoMeNBContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +ShortMAC-I ::= BIT STRING (SIZE(16)) +*/ + +struct ShortMAC_I : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "ShortMAC-I";} + using parent_t = asn::bstring<>; + +}; + +/* +SpectrumSharingGroupID ::= INTEGER (1..maxCellineNB) +*/ + +struct SpectrumSharingGroupID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SpectrumSharingGroupID";} + using parent_t = asn::integer<>; + +}; + +/* +SplitSRB-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct SplitSRB_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}; + + }; + +}; +/* +SplitSRB ::= SEQUENCE { + rrcContainer RRCContainer OPTIONAL, + srbType SRBType, + deliveryStatus DeliveryStatus OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {SplitSRB-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct SplitSRB : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "SplitSRB";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct rrcContainer_t : RRCContainer + { + static constexpr const char* name() {return "rrcContainer_t";} + using parent_t = RRCContainer; + static constexpr bool optional = true; + + }; + rrcContainer_t& set_rrcContainer() { rrcContainer.setpresent(true); return rrcContainer;} + rrcContainer_t const* get_rrcContainer() const {return rrcContainer.is_valid() ? &rrcContainer : nullptr;} + struct srbType_t : SRBType + { + static constexpr const char* name() {return "srbType_t";} + using parent_t = SRBType; + + }; + srbType_t& ref_srbType() {return srbType;} + srbType_t const& ref_srbType() const {return srbType;} + struct deliveryStatus_t : DeliveryStatus + { + static constexpr const char* name() {return "deliveryStatus_t";} + using parent_t = DeliveryStatus; + static constexpr bool optional = true; + + }; + deliveryStatus_t& set_deliveryStatus() { deliveryStatus.setpresent(true); return deliveryStatus;} + deliveryStatus_t const* get_deliveryStatus() const {return deliveryStatus.is_valid() ? &deliveryStatus : 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(rrcContainer); + v(srbType); + v(deliveryStatus); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(rrcContainer); + v(srbType); + v(deliveryStatus); + v(iE_Extensions); + + }; + void clear() + { + rrcContainer.clear(); + srbType.clear(); + deliveryStatus.clear(); + iE_Extensions.clear(); + + }; + private: + rrcContainer_t rrcContainer; + srbType_t srbType; + deliveryStatus_t deliveryStatus; + iE_Extensions_t iE_Extensions; + +}; +/* +SplitSRBs ::= ENUMERATED {srb1, srb2, srb1and2, ...} +*/ + +struct SplitSRBs : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "SplitSRBs";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + srb1 + ,srb2 + ,srb1and2 + } index_t; + +}; + +/* +SubscriberProfileIDforRFP ::= INTEGER (1..256) +*/ + +struct SubscriberProfileIDforRFP : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "SubscriberProfileIDforRFP";} + using parent_t = asn::integer<>; + +}; + +/* +Subscription-Based-UE-DifferentiationInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Subscription_Based_UE_DifferentiationInfo_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}; + + }; + +}; +/* +Subscription-Based-UE-DifferentiationInfo ::= SEQUENCE { + periodicCommunicationIndicator ENUMERATED {periodically, ondemand, ...} OPTIONAL, + periodicTime INTEGER (1..3600, ...) OPTIONAL, + scheduledCommunicationTime ScheduledCommunicationTime OPTIONAL, + stationaryIndication ENUMERATED {stationary, mobile, ...} OPTIONAL, + trafficProfile ENUMERATED {single-packet, dual-packets, multiple-packets, ...} OPTIONAL, + batteryIndication ENUMERATED {battery-powered, battery-powered-not-rechargeable-or-replaceable, not-battery-powered, ...} OPTIONAL, + iE-Extensions ProtocolExtensionContainer { { Subscription-Based-UE-DifferentiationInfo-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct Subscription_Based_UE_DifferentiationInfo : asn::sequence<7, 0, true, 7> +{ + static constexpr const char* name() {return "Subscription-Based-UE-DifferentiationInfo";} + using parent_t = asn::sequence<7, 0, true, 7>; + struct periodicCommunicationIndicator_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "periodicCommunicationIndicator_t";} + using parent_t = asn::enumerated<2, 0, true>; + static constexpr bool optional = true; + typedef enum { + periodically + ,ondemand + } index_t; + + }; + + periodicCommunicationIndicator_t& set_periodicCommunicationIndicator() { periodicCommunicationIndicator.setpresent(true); return periodicCommunicationIndicator;} + periodicCommunicationIndicator_t const* get_periodicCommunicationIndicator() const {return periodicCommunicationIndicator.is_valid() ? &periodicCommunicationIndicator : nullptr;} + struct periodicTime_t : asn::integer<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "periodicTime_t";} + using parent_t = asn::integer<>; + static constexpr bool optional = true; + + }; + + periodicTime_t& set_periodicTime() { periodicTime.setpresent(true); return periodicTime;} + periodicTime_t const* get_periodicTime() const {return periodicTime.is_valid() ? &periodicTime : nullptr;} + struct scheduledCommunicationTime_t : ScheduledCommunicationTime + { + static constexpr const char* name() {return "scheduledCommunicationTime_t";} + using parent_t = ScheduledCommunicationTime; + static constexpr bool optional = true; + + }; + scheduledCommunicationTime_t& set_scheduledCommunicationTime() { scheduledCommunicationTime.setpresent(true); return scheduledCommunicationTime;} + scheduledCommunicationTime_t const* get_scheduledCommunicationTime() const {return scheduledCommunicationTime.is_valid() ? &scheduledCommunicationTime : nullptr;} + struct stationaryIndication_t : asn::enumerated<2, 0, true> + { + static constexpr const char* name() {return "stationaryIndication_t";} + using parent_t = asn::enumerated<2, 0, true>; + static constexpr bool optional = true; + typedef enum { + stationary + ,mobile + } index_t; + + }; + + stationaryIndication_t& set_stationaryIndication() { stationaryIndication.setpresent(true); return stationaryIndication;} + stationaryIndication_t const* get_stationaryIndication() const {return stationaryIndication.is_valid() ? &stationaryIndication : nullptr;} + struct trafficProfile_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "trafficProfile_t";} + using parent_t = asn::enumerated<3, 0, true>; + static constexpr bool optional = true; + typedef enum { + single_packet + ,dual_packets + ,multiple_packets + } index_t; + + }; + + trafficProfile_t& set_trafficProfile() { trafficProfile.setpresent(true); return trafficProfile;} + trafficProfile_t const* get_trafficProfile() const {return trafficProfile.is_valid() ? &trafficProfile : nullptr;} + struct batteryIndication_t : asn::enumerated<3, 0, true> + { + static constexpr const char* name() {return "batteryIndication_t";} + using parent_t = asn::enumerated<3, 0, true>; + static constexpr bool optional = true; + typedef enum { + battery_powered + ,battery_powered_not_rechargeable_or_replaceable + ,not_battery_powered + } index_t; + + }; + + batteryIndication_t& set_batteryIndication() { batteryIndication.setpresent(true); return batteryIndication;} + batteryIndication_t const* get_batteryIndication() const {return batteryIndication.is_valid() ? &batteryIndication : 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(periodicCommunicationIndicator); + v(periodicTime); + v(scheduledCommunicationTime); + v(stationaryIndication); + v(trafficProfile); + v(batteryIndication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(periodicCommunicationIndicator); + v(periodicTime); + v(scheduledCommunicationTime); + v(stationaryIndication); + v(trafficProfile); + v(batteryIndication); + v(iE_Extensions); + + }; + void clear() + { + periodicCommunicationIndicator.clear(); + periodicTime.clear(); + scheduledCommunicationTime.clear(); + stationaryIndication.clear(); + trafficProfile.clear(); + batteryIndication.clear(); + iE_Extensions.clear(); + + }; + private: + periodicCommunicationIndicator_t periodicCommunicationIndicator; + periodicTime_t periodicTime; + scheduledCommunicationTime_t scheduledCommunicationTime; + stationaryIndication_t stationaryIndication; + trafficProfile_t trafficProfile; + batteryIndication_t batteryIndication; + iE_Extensions_t iE_Extensions; + +}; +/* +TargetCellInUTRAN ::= OCTET STRING -- This IE is to be encoded according to the UTRAN Cell ID in the Last Visited UTRAN Cell Information IE in TS 25.413 [24] +*/ + +struct TargetCellInUTRAN : asn::ostring<> +{ + static constexpr const char* name() {return "TargetCellInUTRAN";} + using parent_t = asn::ostring<>; + +}; + +/* +TargeteNBtoSource-eNBTransparentContainer ::= OCTET STRING +*/ + +struct TargeteNBtoSource_eNBTransparentContainer : asn::ostring<> +{ + static constexpr const char* name() {return "TargeteNBtoSource-eNBTransparentContainer";} + using parent_t = asn::ostring<>; + +}; + +/* +TimeToWait ::= ENUMERATED { + v1s, + v2s, + v5s, + v10s, + v20s, + v60s, + ... +} +*/ + +struct TimeToWait : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "TimeToWait";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + v1s + ,v2s + ,v5s + ,v10s + ,v20s + ,v60s + } index_t; + +}; + +/* +TraceDepth ::= ENUMERATED { + minimum, + medium, + maximum, + minimumWithoutVendorSpecificExtension, + mediumWithoutVendorSpecificExtension, + maximumWithoutVendorSpecificExtension, + ... +} +*/ + +struct TraceDepth : asn::enumerated<6, 0, true> +{ + static constexpr const char* name() {return "TraceDepth";} + using parent_t = asn::enumerated<6, 0, true>; + typedef enum { + minimum + ,medium + ,maximum + ,minimumWithoutVendorSpecificExtension + ,mediumWithoutVendorSpecificExtension + ,maximumWithoutVendorSpecificExtension + } index_t; + +}; + +/* +TraceCollectionEntityIPAddress ::= BIT STRING (SIZE(1..160, ...)) +*/ + +struct TraceCollectionEntityIPAddress : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "TraceCollectionEntityIPAddress";} + using parent_t = asn::bstring<>; + +}; + +/* +UEAppLayerMeasConfig-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + {ID id-serviceType CRITICALITY ignore EXTENSION ServiceType PRESENCE optional}, + ... +} +*/ + +struct UEAppLayerMeasConfig_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_serviceType() { set(id_serviceType); 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_serviceType)) { 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_serviceType);} 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_serviceType() { 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;} + ServiceType& select_id_serviceType() { return set(1); } + ServiceType const* get_id_serviceType() 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_serviceType()); 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(ServiceType)]; + + }; + 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_serviceType() { 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}; + + }; + +}; +/* +UEAppLayerMeasConfig ::= SEQUENCE { + containerForAppLayerMeasConfig OCTET STRING (SIZE(1..1000)), + areaScopeOfQMC AreaScopeOfQMC, + iE-Extensions ProtocolExtensionContainer { {UEAppLayerMeasConfig-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEAppLayerMeasConfig : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UEAppLayerMeasConfig";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct containerForAppLayerMeasConfig_t : asn::ostring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "containerForAppLayerMeasConfig_t";} + using parent_t = asn::ostring<>; + + }; + + containerForAppLayerMeasConfig_t& ref_containerForAppLayerMeasConfig() {return containerForAppLayerMeasConfig;} + containerForAppLayerMeasConfig_t const& ref_containerForAppLayerMeasConfig() const {return containerForAppLayerMeasConfig;} + struct areaScopeOfQMC_t : AreaScopeOfQMC + { + static constexpr const char* name() {return "areaScopeOfQMC_t";} + using parent_t = AreaScopeOfQMC; + + }; + areaScopeOfQMC_t& ref_areaScopeOfQMC() {return areaScopeOfQMC;} + areaScopeOfQMC_t const& ref_areaScopeOfQMC() const {return areaScopeOfQMC;} + 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(containerForAppLayerMeasConfig); + v(areaScopeOfQMC); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(containerForAppLayerMeasConfig); + v(areaScopeOfQMC); + v(iE_Extensions); + + }; + void clear() + { + containerForAppLayerMeasConfig.clear(); + areaScopeOfQMC.clear(); + iE_Extensions.clear(); + + }; + private: + containerForAppLayerMeasConfig_t containerForAppLayerMeasConfig; + areaScopeOfQMC_t areaScopeOfQMC; + iE_Extensions_t iE_Extensions; + +}; +/* +TraceActivation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-MDTConfiguration CRITICALITY ignore EXTENSION MDT-Configuration PRESENCE optional}| + { ID id-UEAppLayerMeasConfig CRITICALITY ignore EXTENSION UEAppLayerMeasConfig PRESENCE optional}, + ... +} +*/ + +struct TraceActivation_ExtIEs +{ + 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_MDTConfiguration() { set(id_MDTConfiguration); type=1;} + void select_id_UEAppLayerMeasConfig() { set(id_UEAppLayerMeasConfig); 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_MDTConfiguration)) { type = 1; return true; } + else if(equal(id_UEAppLayerMeasConfig)) { 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_MDTConfiguration);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_UEAppLayerMeasConfig);} 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_MDTConfiguration() { set(ignore); type=1;} + void select_id_UEAppLayerMeasConfig() { 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;} + MDT_Configuration& select_id_MDTConfiguration() { return set(1); } + MDT_Configuration const* get_id_MDTConfiguration() const { return get(1); } + UEAppLayerMeasConfig& select_id_UEAppLayerMeasConfig() { return set(2); } + UEAppLayerMeasConfig const* get_id_UEAppLayerMeasConfig() 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_MDTConfiguration()); return true; + case 2: v(select_id_UEAppLayerMeasConfig()); 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(MDT_Configuration)]; + char dummy2[sizeof(UEAppLayerMeasConfig)]; + + }; + 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_MDTConfiguration() { set(optional); type=1;} + void select_id_UEAppLayerMeasConfig() { 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}; + + }; + +}; +/* +TraceActivation ::= SEQUENCE { + eUTRANTraceID EUTRANTraceID, + interfacesToTrace InterfacesToTrace, +traceDepth TraceDepth, +traceCollectionEntityIPAddress TraceCollectionEntityIPAddress, + iE-Extensions ProtocolExtensionContainer { {TraceActivation-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TraceActivation : asn::sequence<5, 0, true, 1> +{ + static constexpr const char* name() {return "TraceActivation";} + using parent_t = asn::sequence<5, 0, true, 1>; + struct eUTRANTraceID_t : EUTRANTraceID + { + static constexpr const char* name() {return "eUTRANTraceID_t";} + using parent_t = EUTRANTraceID; + + }; + eUTRANTraceID_t& ref_eUTRANTraceID() {return eUTRANTraceID;} + eUTRANTraceID_t const& ref_eUTRANTraceID() const {return eUTRANTraceID;} + struct interfacesToTrace_t : InterfacesToTrace + { + static constexpr const char* name() {return "interfacesToTrace_t";} + using parent_t = InterfacesToTrace; + + }; + interfacesToTrace_t& ref_interfacesToTrace() {return interfacesToTrace;} + interfacesToTrace_t const& ref_interfacesToTrace() const {return interfacesToTrace;} + struct traceDepth_t : TraceDepth + { + static constexpr const char* name() {return "traceDepth_t";} + using parent_t = TraceDepth; + + }; + traceDepth_t& ref_traceDepth() {return traceDepth;} + traceDepth_t const& ref_traceDepth() const {return traceDepth;} + struct traceCollectionEntityIPAddress_t : TraceCollectionEntityIPAddress + { + static constexpr const char* name() {return "traceCollectionEntityIPAddress_t";} + using parent_t = TraceCollectionEntityIPAddress; + + }; + traceCollectionEntityIPAddress_t& ref_traceCollectionEntityIPAddress() {return traceCollectionEntityIPAddress;} + traceCollectionEntityIPAddress_t const& ref_traceCollectionEntityIPAddress() const {return traceCollectionEntityIPAddress;} + 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(eUTRANTraceID); + v(interfacesToTrace); + v(traceDepth); + v(traceCollectionEntityIPAddress); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(eUTRANTraceID); + v(interfacesToTrace); + v(traceDepth); + v(traceCollectionEntityIPAddress); + v(iE_Extensions); + + }; + void clear() + { + eUTRANTraceID.clear(); + interfacesToTrace.clear(); + traceDepth.clear(); + traceCollectionEntityIPAddress.clear(); + iE_Extensions.clear(); + + }; + private: + eUTRANTraceID_t eUTRANTraceID; + interfacesToTrace_t interfacesToTrace; + traceDepth_t traceDepth; + traceCollectionEntityIPAddress_t traceCollectionEntityIPAddress; + iE_Extensions_t iE_Extensions; + +}; +/* +Tunnel-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct Tunnel_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}; + + }; + +}; +/* +TunnelInformation ::= SEQUENCE { + transportLayerAddress TransportLayerAddress, + uDP-Port-Number Port-Number OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {Tunnel-Information-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct TunnelInformation : asn::sequence<3, 0, true, 2> +{ + static constexpr const char* name() {return "TunnelInformation";} + using parent_t = asn::sequence<3, 0, true, 2>; + struct transportLayerAddress_t : TransportLayerAddress + { + static constexpr const char* name() {return "transportLayerAddress_t";} + using parent_t = TransportLayerAddress; + + }; + transportLayerAddress_t& ref_transportLayerAddress() {return transportLayerAddress;} + transportLayerAddress_t const& ref_transportLayerAddress() const {return transportLayerAddress;} + struct uDP_Port_Number_t : Port_Number + { + static constexpr const char* name() {return "uDP_Port_Number_t";} + using parent_t = Port_Number; + static constexpr bool optional = true; + + }; + uDP_Port_Number_t& set_uDP_Port_Number() { uDP_Port_Number.setpresent(true); return uDP_Port_Number;} + uDP_Port_Number_t const* get_uDP_Port_Number() const {return uDP_Port_Number.is_valid() ? &uDP_Port_Number : 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(transportLayerAddress); + v(uDP_Port_Number); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(transportLayerAddress); + v(uDP_Port_Number); + v(iE_Extensions); + + }; + void clear() + { + transportLayerAddress.clear(); + uDP_Port_Number.clear(); + iE_Extensions.clear(); + + }; + private: + transportLayerAddress_t transportLayerAddress; + uDP_Port_Number_t uDP_Port_Number; + iE_Extensions_t iE_Extensions; + +}; +/* +UE-ContextKeptIndicator ::= ENUMERATED { + true, + ... +} +*/ + +struct UE_ContextKeptIndicator : asn::enumerated<1, 0, true> +{ + static constexpr const char* name() {return "UE-ContextKeptIndicator";} + using parent_t = asn::enumerated<1, 0, true>; + typedef enum { + True + } index_t; + +}; + +/* +UE-HistoryInformation ::= SEQUENCE (SIZE(1..maxnoofCells)) OF LastVisitedCell-Item +*/ + +struct UE_HistoryInformation_elm : LastVisitedCell_Item +{ + static constexpr const char* name() {return "UE_HistoryInformation_elm";} + using parent_t = LastVisitedCell_Item; + +}; +struct UE_HistoryInformation : asn::sequenceof +{ + static constexpr const char* name() {return "UE-HistoryInformation";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UE-HistoryInformationFromTheUE ::= OCTET STRING +*/ + +struct UE_HistoryInformationFromTheUE : asn::ostring<> +{ + static constexpr const char* name() {return "UE-HistoryInformationFromTheUE";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-RLF-Report-Container::= OCTET STRING +*/ + +struct UE_RLF_Report_Container : asn::ostring<> +{ + static constexpr const char* name() {return "UE-RLF-Report-Container";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-RLF-Report-Container-for-extended-bands ::= OCTET STRING +*/ + +struct UE_RLF_Report_Container_for_extended_bands : asn::ostring<> +{ + static constexpr const char* name() {return "UE-RLF-Report-Container-for-extended-bands";} + using parent_t = asn::ostring<>; + +}; + +/* +UE-S1AP-ID ::= INTEGER (0.. 4294967295) +*/ + +struct UE_S1AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-S1AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UE_Sidelink_Aggregate_MaximumBitRate_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}; + + }; + +}; +/* +UE-X2AP-ID ::= INTEGER (0..4095) +*/ + +struct UE_X2AP_ID : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-X2AP-ID";} + using parent_t = asn::integer<>; + +}; + +/* +UE-X2AP-ID-Extension ::= INTEGER (0..4095, ...) +*/ + +struct UE_X2AP_ID_Extension : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UE-X2AP-ID-Extension";} + using parent_t = asn::integer<>; + +}; + +/* +UEAggregate-MaximumBitrate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + { ID id-extended-uEaggregateMaximumBitRateDownlink CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}| + { ID id-extended-uEaggregateMaximumBitRateUplink CRITICALITY ignore EXTENSION ExtendedBitRate PRESENCE optional}, + ... +} +*/ + +struct UEAggregate_MaximumBitrate_ExtIEs +{ + 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_extended_uEaggregateMaximumBitRateDownlink() { set(id_extended_uEaggregateMaximumBitRateDownlink); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { set(id_extended_uEaggregateMaximumBitRateUplink); 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_extended_uEaggregateMaximumBitRateDownlink)) { type = 1; return true; } + else if(equal(id_extended_uEaggregateMaximumBitRateUplink)) { 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_extended_uEaggregateMaximumBitRateDownlink);} return false; + case 2: type = 2; if(v(ref_nested())) { return equal(id_extended_uEaggregateMaximumBitRateUplink);} 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_extended_uEaggregateMaximumBitRateDownlink() { set(ignore); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { 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;} + ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateDownlink() { return set(1); } + ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateDownlink() const { return get(1); } + ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateUplink() { return set(2); } + ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateUplink() 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_extended_uEaggregateMaximumBitRateDownlink()); return true; + case 2: v(select_id_extended_uEaggregateMaximumBitRateUplink()); 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(ExtendedBitRate)]; + + }; + 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_extended_uEaggregateMaximumBitRateDownlink() { set(optional); type=1;} + void select_id_extended_uEaggregateMaximumBitRateUplink() { 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}; + + }; + +}; +/* +UEAggregateMaximumBitRate ::= SEQUENCE { + uEaggregateMaximumBitRateDownlink BitRate, + uEaggregateMaximumBitRateUplink BitRate, + iE-Extensions ProtocolExtensionContainer { {UEAggregate-MaximumBitrate-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEAggregateMaximumBitRate : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UEAggregateMaximumBitRate";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct uEaggregateMaximumBitRateDownlink_t : BitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRateDownlink_t";} + using parent_t = BitRate; + + }; + uEaggregateMaximumBitRateDownlink_t& ref_uEaggregateMaximumBitRateDownlink() {return uEaggregateMaximumBitRateDownlink;} + uEaggregateMaximumBitRateDownlink_t const& ref_uEaggregateMaximumBitRateDownlink() const {return uEaggregateMaximumBitRateDownlink;} + struct uEaggregateMaximumBitRateUplink_t : BitRate + { + static constexpr const char* name() {return "uEaggregateMaximumBitRateUplink_t";} + using parent_t = BitRate; + + }; + uEaggregateMaximumBitRateUplink_t& ref_uEaggregateMaximumBitRateUplink() {return uEaggregateMaximumBitRateUplink;} + uEaggregateMaximumBitRateUplink_t const& ref_uEaggregateMaximumBitRateUplink() const {return uEaggregateMaximumBitRateUplink;} + 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(uEaggregateMaximumBitRateDownlink); + v(uEaggregateMaximumBitRateUplink); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uEaggregateMaximumBitRateDownlink); + v(uEaggregateMaximumBitRateUplink); + v(iE_Extensions); + + }; + void clear() + { + uEaggregateMaximumBitRateDownlink.clear(); + uEaggregateMaximumBitRateUplink.clear(); + iE_Extensions.clear(); + + }; + private: + uEaggregateMaximumBitRateDownlink_t uEaggregateMaximumBitRateDownlink; + uEaggregateMaximumBitRateUplink_t uEaggregateMaximumBitRateUplink; + iE_Extensions_t iE_Extensions; + +}; +/* +UENRMeasurement-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UENRMeasurement_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}; + + }; + +}; +/* +UENRMeasurement ::= SEQUENCE { + uENRMeasurements RRCContainer, + iE-Extensions ProtocolExtensionContainer { {UENRMeasurement-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UENRMeasurement : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UENRMeasurement";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uENRMeasurements_t : RRCContainer + { + static constexpr const char* name() {return "uENRMeasurements_t";} + using parent_t = RRCContainer; + + }; + uENRMeasurements_t& ref_uENRMeasurements() {return uENRMeasurements;} + uENRMeasurements_t const& ref_uENRMeasurements() const {return uENRMeasurements;} + 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(uENRMeasurements); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uENRMeasurements); + v(iE_Extensions); + + }; + void clear() + { + uENRMeasurements.clear(); + iE_Extensions.clear(); + + }; + private: + uENRMeasurements_t uENRMeasurements; + iE_Extensions_t iE_Extensions; + +}; +/* +UESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UESecurityCapabilities_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}; + + }; + +}; +/* +UESecurityCapabilities ::= SEQUENCE { + encryptionAlgorithms EncryptionAlgorithms, + integrityProtectionAlgorithms IntegrityProtectionAlgorithms, + iE-Extensions ProtocolExtensionContainer { {UESecurityCapabilities-ExtIEs} } OPTIONAL, +... +} +*/ + +struct UESecurityCapabilities : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UESecurityCapabilities";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct encryptionAlgorithms_t : EncryptionAlgorithms + { + static constexpr const char* name() {return "encryptionAlgorithms_t";} + using parent_t = EncryptionAlgorithms; + + }; + encryptionAlgorithms_t& ref_encryptionAlgorithms() {return encryptionAlgorithms;} + encryptionAlgorithms_t const& ref_encryptionAlgorithms() const {return encryptionAlgorithms;} + struct integrityProtectionAlgorithms_t : IntegrityProtectionAlgorithms + { + static constexpr const char* name() {return "integrityProtectionAlgorithms_t";} + using parent_t = IntegrityProtectionAlgorithms; + + }; + integrityProtectionAlgorithms_t& ref_integrityProtectionAlgorithms() {return integrityProtectionAlgorithms;} + integrityProtectionAlgorithms_t const& ref_integrityProtectionAlgorithms() const {return integrityProtectionAlgorithms;} + 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(encryptionAlgorithms); + v(integrityProtectionAlgorithms); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(encryptionAlgorithms); + v(integrityProtectionAlgorithms); + v(iE_Extensions); + + }; + void clear() + { + encryptionAlgorithms.clear(); + integrityProtectionAlgorithms.clear(); + iE_Extensions.clear(); + + }; + private: + encryptionAlgorithms_t encryptionAlgorithms; + integrityProtectionAlgorithms_t integrityProtectionAlgorithms; + iE_Extensions_t iE_Extensions; + +}; +/* +UESidelinkAggregateMaximumBitRate ::= SEQUENCE { + uESidelinkAggregateMaximumBitRate BitRate, + iE-Extensions ProtocolExtensionContainer { {UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UESidelinkAggregateMaximumBitRate : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "UESidelinkAggregateMaximumBitRate";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uESidelinkAggregateMaximumBitRate_t : BitRate + { + static constexpr const char* name() {return "uESidelinkAggregateMaximumBitRate_t";} + using parent_t = BitRate; + + }; + uESidelinkAggregateMaximumBitRate_t& ref_uESidelinkAggregateMaximumBitRate() {return uESidelinkAggregateMaximumBitRate;} + uESidelinkAggregateMaximumBitRate_t const& ref_uESidelinkAggregateMaximumBitRate() const {return uESidelinkAggregateMaximumBitRate;} + 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(uESidelinkAggregateMaximumBitRate); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uESidelinkAggregateMaximumBitRate); + v(iE_Extensions); + + }; + void clear() + { + uESidelinkAggregateMaximumBitRate.clear(); + iE_Extensions.clear(); + + }; + private: + uESidelinkAggregateMaximumBitRate_t uESidelinkAggregateMaximumBitRate; + iE_Extensions_t iE_Extensions; + +}; +/* +UEsToBeResetList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UEsToBeResetList_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}; + + }; + +}; +/* +UEsToBeResetList-Item::= SEQUENCE { + meNB-ID UE-X2AP-ID, + meNB-ID-ext UE-X2AP-ID-Extension OPTIONAL, + sgNB-ID SgNB-UE-X2AP-ID OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {UEsToBeResetList-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UEsToBeResetList_Item : asn::sequence<4, 0, true, 3> +{ + static constexpr const char* name() {return "UEsToBeResetList-Item";} + using parent_t = asn::sequence<4, 0, true, 3>; + struct meNB_ID_t : UE_X2AP_ID + { + static constexpr const char* name() {return "meNB_ID_t";} + using parent_t = UE_X2AP_ID; + + }; + meNB_ID_t& ref_meNB_ID() {return meNB_ID;} + meNB_ID_t const& ref_meNB_ID() const {return meNB_ID;} + struct meNB_ID_ext_t : UE_X2AP_ID_Extension + { + static constexpr const char* name() {return "meNB_ID_ext_t";} + using parent_t = UE_X2AP_ID_Extension; + static constexpr bool optional = true; + + }; + meNB_ID_ext_t& set_meNB_ID_ext() { meNB_ID_ext.setpresent(true); return meNB_ID_ext;} + meNB_ID_ext_t const* get_meNB_ID_ext() const {return meNB_ID_ext.is_valid() ? &meNB_ID_ext : nullptr;} + struct sgNB_ID_t : SgNB_UE_X2AP_ID + { + static constexpr const char* name() {return "sgNB_ID_t";} + using parent_t = SgNB_UE_X2AP_ID; + static constexpr bool optional = true; + + }; + sgNB_ID_t& set_sgNB_ID() { sgNB_ID.setpresent(true); return sgNB_ID;} + sgNB_ID_t const* get_sgNB_ID() const {return sgNB_ID.is_valid() ? &sgNB_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(meNB_ID); + v(meNB_ID_ext); + v(sgNB_ID); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(meNB_ID); + v(meNB_ID_ext); + v(sgNB_ID); + v(iE_Extensions); + + }; + void clear() + { + meNB_ID.clear(); + meNB_ID_ext.clear(); + sgNB_ID.clear(); + iE_Extensions.clear(); + + }; + private: + meNB_ID_t meNB_ID; + meNB_ID_ext_t meNB_ID_ext; + sgNB_ID_t sgNB_ID; + iE_Extensions_t iE_Extensions; + +}; +/* +UEsToBeResetList ::= SEQUENCE (SIZE (1.. maxUEsinengNBDU)) OF UEsToBeResetList-Item +*/ + +struct UEsToBeResetList_elm : UEsToBeResetList_Item +{ + static constexpr const char* name() {return "UEsToBeResetList_elm";} + using parent_t = UEsToBeResetList_Item; + +}; +struct UEsToBeResetList : asn::sequenceof +{ + static constexpr const char* name() {return "UEsToBeResetList";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-HighInterferenceIndication ::= BIT STRING (SIZE(1..110, ...)) +*/ + +struct UL_HighInterferenceIndication : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "UL-HighInterferenceIndication";} + using parent_t = asn::bstring<>; + +}; + +/* +UL-HighInterferenceIndicationInfo-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct UL_HighInterferenceIndicationInfo_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}; + + }; + +}; +/* +UL-HighInterferenceIndicationInfo-Item ::= SEQUENCE { + target-Cell-ID ECGI, + ul-interferenceindication UL-HighInterferenceIndication, + iE-Extensions ProtocolExtensionContainer { {UL-HighInterferenceIndicationInfo-Item-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct UL_HighInterferenceIndicationInfo_Item : asn::sequence<3, 0, true, 1> +{ + static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo-Item";} + using parent_t = asn::sequence<3, 0, true, 1>; + struct target_Cell_ID_t : ECGI + { + static constexpr const char* name() {return "target_Cell_ID_t";} + using parent_t = ECGI; + + }; + target_Cell_ID_t& ref_target_Cell_ID() {return target_Cell_ID;} + target_Cell_ID_t const& ref_target_Cell_ID() const {return target_Cell_ID;} + struct ul_interferenceindication_t : UL_HighInterferenceIndication + { + static constexpr const char* name() {return "ul_interferenceindication_t";} + using parent_t = UL_HighInterferenceIndication; + + }; + ul_interferenceindication_t& ref_ul_interferenceindication() {return ul_interferenceindication;} + ul_interferenceindication_t const& ref_ul_interferenceindication() const {return ul_interferenceindication;} + 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(target_Cell_ID); + v(ul_interferenceindication); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(target_Cell_ID); + v(ul_interferenceindication); + v(iE_Extensions); + + }; + void clear() + { + target_Cell_ID.clear(); + ul_interferenceindication.clear(); + iE_Extensions.clear(); + + }; + private: + target_Cell_ID_t target_Cell_ID; + ul_interferenceindication_t ul_interferenceindication; + iE_Extensions_t iE_Extensions; + +}; +/* +UL-HighInterferenceIndicationInfo ::= SEQUENCE (SIZE(1..maxCellineNB)) OF UL-HighInterferenceIndicationInfo-Item +*/ + +struct UL_HighInterferenceIndicationInfo_elm : UL_HighInterferenceIndicationInfo_Item +{ + static constexpr const char* name() {return "UL_HighInterferenceIndicationInfo_elm";} + using parent_t = UL_HighInterferenceIndicationInfo_Item; + +}; +struct UL_HighInterferenceIndicationInfo : asn::sequenceof +{ + static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo";} + using parent_t = asn::sequenceof; + using constraint_t = asn::constraints>; + +}; +/* +UL-UE-Configuration::= ENUMERATED { no-data, shared, only, ... } +*/ + +struct UL_UE_Configuration : asn::enumerated<3, 0, true> +{ + static constexpr const char* name() {return "UL-UE-Configuration";} + using parent_t = asn::enumerated<3, 0, true>; + typedef enum { + no_data + ,shared + ,only + } index_t; + +}; + +/* +ULConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct ULConfiguration_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}; + + }; + +}; +/* +ULConfiguration::= SEQUENCE { + uL-PDCP UL-UE-Configuration, + iE-Extensions ProtocolExtensionContainer { {ULConfiguration-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct ULConfiguration : asn::sequence<2, 0, true, 1> +{ + static constexpr const char* name() {return "ULConfiguration";} + using parent_t = asn::sequence<2, 0, true, 1>; + struct uL_PDCP_t : UL_UE_Configuration + { + static constexpr const char* name() {return "uL_PDCP_t";} + using parent_t = UL_UE_Configuration; + + }; + uL_PDCP_t& ref_uL_PDCP() {return uL_PDCP;} + uL_PDCP_t const& ref_uL_PDCP() const {return uL_PDCP;} + 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_PDCP); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(uL_PDCP); + v(iE_Extensions); + + }; + void clear() + { + uL_PDCP.clear(); + iE_Extensions.clear(); + + }; + private: + uL_PDCP_t uL_PDCP; + iE_Extensions_t iE_Extensions; + +}; +/* +VehicleUE ::= ENUMERATED { + authorized, + not-authorized, + ... +} +*/ + +struct VehicleUE : asn::enumerated<2, 0, true> +{ + static constexpr const char* name() {return "VehicleUE";} + using parent_t = asn::enumerated<2, 0, true>; + typedef enum { + authorized + ,not_authorized + } index_t; + +}; + +/* +V2XServicesAuthorized-ExtIEs X2AP-PROTOCOL-EXTENSION ::= { + ... +} +*/ + +struct V2XServicesAuthorized_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}; + + }; + +}; +/* +V2XServicesAuthorized ::= SEQUENCE { + vehicleUE VehicleUE OPTIONAL, +pedestrianUE PedestrianUE OPTIONAL, + iE-Extensions ProtocolExtensionContainer { {V2XServicesAuthorized-ExtIEs} } OPTIONAL, + ... +} +*/ + +struct V2XServicesAuthorized : asn::sequence<3, 0, true, 3> +{ + static constexpr const char* name() {return "V2XServicesAuthorized";} + using parent_t = asn::sequence<3, 0, true, 3>; + struct vehicleUE_t : VehicleUE + { + static constexpr const char* name() {return "vehicleUE_t";} + using parent_t = VehicleUE; + static constexpr bool optional = true; + + }; + vehicleUE_t& set_vehicleUE() { vehicleUE.setpresent(true); return vehicleUE;} + vehicleUE_t const* get_vehicleUE() const {return vehicleUE.is_valid() ? &vehicleUE : nullptr;} + struct pedestrianUE_t : PedestrianUE + { + static constexpr const char* name() {return "pedestrianUE_t";} + using parent_t = PedestrianUE; + static constexpr bool optional = true; + + }; + pedestrianUE_t& set_pedestrianUE() { pedestrianUE.setpresent(true); return pedestrianUE;} + pedestrianUE_t const* get_pedestrianUE() const {return pedestrianUE.is_valid() ? &pedestrianUE : 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(vehicleUE); + v(pedestrianUE); + v(iE_Extensions); + + }; + template void encode(V& v) const + { + v(vehicleUE); + v(pedestrianUE); + v(iE_Extensions); + + }; + void clear() + { + vehicleUE.clear(); + pedestrianUE.clear(); + iE_Extensions.clear(); + + }; + private: + vehicleUE_t vehicleUE; + pedestrianUE_t pedestrianUE; + iE_Extensions_t iE_Extensions; + +}; +/* +WT-UE-XwAP-ID ::= OCTET STRING (SIZE (3)) +*/ + +struct WT_UE_XwAP_ID : asn::ostring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WT-UE-XwAP-ID";} + using parent_t = asn::ostring<>; + +}; + +/* +WTID-Type1 ::= SEQUENCE { + pLMN-Identity PLMN-Identity, + shortWTID BIT STRING (SIZE(24)), + ... +} +*/ + +struct WTID_Type1 : asn::sequence<2, 0, true, 0> +{ + static constexpr const char* name() {return "WTID-Type1";} + using parent_t = asn::sequence<2, 0, true, 0>; + struct pLMN_Identity_t : PLMN_Identity + { + static constexpr const char* name() {return "pLMN_Identity_t";} + using parent_t = PLMN_Identity; + + }; + pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;} + pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;} + struct shortWTID_t : asn::bstring<> + { + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "shortWTID_t";} + using parent_t = asn::bstring<>; + + }; + + shortWTID_t& ref_shortWTID() {return shortWTID;} + shortWTID_t const& ref_shortWTID() const {return shortWTID;} + template void decode(V& v) + { + v(pLMN_Identity); + v(shortWTID); + + }; + template void encode(V& v) const + { + v(pLMN_Identity); + v(shortWTID); + + }; + void clear() + { + pLMN_Identity.clear(); + shortWTID.clear(); + + }; + private: + pLMN_Identity_t pLMN_Identity; + shortWTID_t shortWTID; + +}; +/* +WTID-Long-Type2 ::= BIT STRING (SIZE(48)) +*/ + +struct WTID_Long_Type2 : asn::bstring<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "WTID-Long-Type2";} + using parent_t = asn::bstring<>; + +}; + +/* +WTID ::= CHOICE { + wTID-Type1 WTID-Type1, + wTID-Type2 WTID-Long-Type2, + ... +} +*/ + +struct WTID : asn::choice<2, 0, true> +{ + static constexpr const char* name() {return "WTID";} + 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); } + ~WTID() {clear();} + struct wTID_Type1_t : WTID_Type1 + { + static constexpr const char* name() {return "wTID_Type1_t";} + using parent_t = WTID_Type1; + + }; + struct wTID_Type2_t : WTID_Long_Type2 + { + static constexpr const char* name() {return "wTID_Type2_t";} + using parent_t = WTID_Long_Type2; + + }; + 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); + + } + wTID_Type1_t& select_wTID_Type1() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} + wTID_Type1_t const* get_wTID_Type1() const { if(get_index() == 1) { return &var.as();} return nullptr; } + wTID_Type2_t& select_wTID_Type2() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} + wTID_Type2_t const* get_wTID_Type2() 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(wTID_Type1_t)]; + char dummy2[sizeof(wTID_Type2_t)]; + + }; + asn::variant var; + index_type index {0}; +}; +/* +X2BenefitValue ::= INTEGER (1..8, ...) +*/ + +struct X2BenefitValue : asn::integer<> +{ + using constraint_t = asn::constraints>; + static constexpr const char* name() {return "X2BenefitValue";} + using parent_t = asn::integer<>; + +};