+/*****************************************************************************
+# 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<false,asn::span<0, 100>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::one<40>>;
+ 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<UsableABSInformationFDD_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<UsableABSInformationFDD_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(usable_abs_pattern_info);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<1, 70>>;
+ 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<UsableABSInformationTDD_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<UsableABSInformationTDD_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(usaable_abs_pattern_info);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<fdd_t>(); break;
+ case 2: var.destroy<tdd_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<fdd_t>());
+ case 2: set_index(2); return v(var.build<tdd_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<fdd_t>());
+ case 2: return v(var.as<tdd_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<fdd_t>(1);
+ v.template operator()<tdd_t>(2);
+
+ }
+ fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build<fdd_t>();} return var.as<fdd_t>();}
+ fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as<fdd_t>();} return nullptr; }
+ tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build<tdd_t>();} return var.as<tdd_t>();}
+ tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as<tdd_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+ABS-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct ABS_Status_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<ABS_Status_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ABS_Status_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(dL_ABS_status);
+ v(usableABSInformation);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::one<40>>;
+ 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<false,asn::one<40>>;
+ 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<ABSInformationFDD_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ABSInformationFDD_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(abs_pattern_info);
+ v(numberOfCellSpecificAntennaPorts);
+ v(measurement_subset);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<1, 70>>;
+ 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<true,asn::span<1, 70>>;
+ 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<ABSInformationTDD_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ABSInformationTDD_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(abs_pattern_info);
+ v(numberOfCellSpecificAntennaPorts);
+ v(measurement_subset);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<fdd_t>(); break;
+ case 2: var.destroy<tdd_t>(); break;
+ case 3: var.destroy<abs_inactive_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<fdd_t>());
+ case 2: set_index(2); return v(var.build<tdd_t>());
+ case 3: set_index(3); return v(var.build<abs_inactive_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<fdd_t>());
+ case 2: return v(var.as<tdd_t>());
+ case 3: return v(var.as<abs_inactive_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<fdd_t>(1);
+ v.template operator()<tdd_t>(2);
+ v.template operator()<abs_inactive_t>(3);
+
+ }
+ fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build<fdd_t>();} return var.as<fdd_t>();}
+ fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as<fdd_t>();} return nullptr; }
+ tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build<tdd_t>();} return var.as<tdd_t>();}
+ tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as<tdd_t>();} return nullptr; }
+ abs_inactive_t& select_abs_inactive() { if(get_index() != 3) { clear(); set_index(3); return var.build<abs_inactive_t>();} return var.as<abs_inactive_t>();}
+ abs_inactive_t const* get_abs_inactive() const { if(get_index() == 3) { return &var.as<abs_inactive_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+Key-eNodeB-Star ::= BIT STRING (SIZE(256))
+*/
+
+struct Key_eNodeB_Star : asn::bstring<>
+{
+ using constraint_t = asn::constraints<false,asn::one<256>>;
+ 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<false,asn::span<0, 7>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<AS_SecurityInformation_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<AS_SecurityInformation_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(key_eNodeB_star);
+ v(nextHopChainingCount);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::span<0, 255>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<AdditionalSpecialSubframe_Info_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<AdditionalSpecialSubframe_Info_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(additionalspecialSubframePatterns);
+ v(cyclicPrefixDL);
+ v(cyclicPrefixUL);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<AdditionalSpecialSubframeExtension_Info_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<AdditionalSpecialSubframeExtension_Info_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(additionalspecialSubframePatternsExtension);
+ v(cyclicPrefixDL);
+ v(cyclicPrefixUL);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::span<0, 15>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<AllocationAndRetentionPriority_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<AllocationAndRetentionPriority_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(priorityLevel);
+ v(pre_emptionCapability);
+ v(pre_emptionVulnerability);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<3>>;
+ 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<false,asn::one<28>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<ECGI_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ECGI_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pLMN_Identity);
+ v(eUTRANcellIdentifier);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<CellIdListforMDT_elm>
+{
+ static constexpr const char* name() {return "CellIdListforMDT";}
+ using parent_t = asn::sequenceof<CellIdListforMDT_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofCellIDforMDT >>;
+
+};
+/*
+CellBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct CellBasedMDT_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<CellBasedMDT_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CellBasedMDT_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(cellIdListforMDT);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<2>>;
+ 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<TAListforMDT_elm>
+{
+ static constexpr const char* name() {return "TAListforMDT";}
+ using parent_t = asn::sequenceof<TAListforMDT_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofTAforMDT >>;
+
+};
+/*
+TABasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct TABasedMDT_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<TABasedMDT_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<TABasedMDT_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(tAListforMDT);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<TAI_Item_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<TAI_Item_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(tAC);
+ v(pLMN_Identity);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<TAIListforMDT_elm>
+{
+ static constexpr const char* name() {return "TAIListforMDT";}
+ using parent_t = asn::sequenceof<TAIListforMDT_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofTAforMDT >>;
+
+};
+/*
+TAIBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct TAIBasedMDT_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<TAIBasedMDT_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<TAIBasedMDT_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(tAIListforMDT);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<cellBased_t>(); break;
+ case 2: var.destroy<tABased_t>(); break;
+ case 3: var.destroy<pLMNWide_t>(); break;
+ case 4: var.destroy<tAIBased_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<cellBased_t>());
+ case 2: set_index(2); return v(var.build<tABased_t>());
+ case 3: set_index(3); return v(var.build<pLMNWide_t>());
+ case 4: set_index(4); return v(var.build<tAIBased_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<cellBased_t>());
+ case 2: return v(var.as<tABased_t>());
+ case 3: return v(var.as<pLMNWide_t>());
+ case 4: return v(var.as<tAIBased_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<cellBased_t>(1);
+ v.template operator()<tABased_t>(2);
+ v.template operator()<pLMNWide_t>(3);
+ v.template operator()<tAIBased_t>(4);
+
+ }
+ cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build<cellBased_t>();} return var.as<cellBased_t>();}
+ cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as<cellBased_t>();} return nullptr; }
+ tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build<tABased_t>();} return var.as<tABased_t>();}
+ tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as<tABased_t>();} return nullptr; }
+ pLMNWide_t& select_pLMNWide() { if(get_index() != 3) { clear(); set_index(3); return var.build<pLMNWide_t>();} return var.as<pLMNWide_t>();}
+ pLMNWide_t const* get_pLMNWide() const { if(get_index() == 3) { return &var.as<pLMNWide_t>();} return nullptr; }
+ tAIBased_t& select_tAIBased() { if(get_index() != 4) { clear(); set_index(4); return var.build<tAIBased_t>();} return var.as<tAIBased_t>();}
+ tAIBased_t const* get_tAIBased() const { if(get_index() == 4) { return &var.as<tAIBased_t>();} 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<sizeof(union_type)> 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<CellIdListforQMC_elm>
+{
+ static constexpr const char* name() {return "CellIdListforQMC";}
+ using parent_t = asn::sequenceof<CellIdListforQMC_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofCellIDforQMC >>;
+
+};
+/*
+CellBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct CellBasedQMC_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<CellBasedQMC_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CellBasedQMC_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(cellIdListforQMC);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<TAListforQMC_elm>
+{
+ static constexpr const char* name() {return "TAListforQMC";}
+ using parent_t = asn::sequenceof<TAListforQMC_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofTAforQMC >>;
+
+};
+/*
+TABasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct TABasedQMC_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<TABasedQMC_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<TABasedQMC_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(tAListforQMC);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<TAIListforQMC_elm>
+{
+ static constexpr const char* name() {return "TAIListforQMC";}
+ using parent_t = asn::sequenceof<TAIListforQMC_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofTAforQMC >>;
+
+};
+/*
+TAIBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct TAIBasedQMC_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<TAIBasedQMC_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<TAIBasedQMC_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(tAIListforQMC);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<PLMNListforQMC_elm>
+{
+ static constexpr const char* name() {return "PLMNListforQMC";}
+ using parent_t = asn::sequenceof<PLMNListforQMC_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofPLMNforQMC >>;
+
+};
+/*
+PLMNAreaBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct PLMNAreaBasedQMC_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<PLMNAreaBasedQMC_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<PLMNAreaBasedQMC_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(plmnListforQMC);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<cellBased_t>(); break;
+ case 2: var.destroy<tABased_t>(); break;
+ case 3: var.destroy<tAIBased_t>(); break;
+ case 4: var.destroy<pLMNAreaBased_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<cellBased_t>());
+ case 2: set_index(2); return v(var.build<tABased_t>());
+ case 3: set_index(3); return v(var.build<tAIBased_t>());
+ case 4: set_index(4); return v(var.build<pLMNAreaBased_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<cellBased_t>());
+ case 2: return v(var.as<tABased_t>());
+ case 3: return v(var.as<tAIBased_t>());
+ case 4: return v(var.as<pLMNAreaBased_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<cellBased_t>(1);
+ v.template operator()<tABased_t>(2);
+ v.template operator()<tAIBased_t>(3);
+ v.template operator()<pLMNAreaBased_t>(4);
+
+ }
+ cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build<cellBased_t>();} return var.as<cellBased_t>();}
+ cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as<cellBased_t>();} return nullptr; }
+ tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build<tABased_t>();} return var.as<tABased_t>();}
+ tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as<tABased_t>();} return nullptr; }
+ tAIBased_t& select_tAIBased() { if(get_index() != 3) { clear(); set_index(3); return var.build<tAIBased_t>();} return var.as<tAIBased_t>();}
+ tAIBased_t const* get_tAIBased() const { if(get_index() == 3) { return &var.as<tAIBased_t>();} return nullptr; }
+ pLMNAreaBased_t& select_pLMNAreaBased() { if(get_index() != 4) { clear(); set_index(4); return var.build<pLMNAreaBased_t>();} return var.as<pLMNAreaBased_t>();}
+ pLMNAreaBased_t const* get_pLMNAreaBased() const { if(get_index() == 4) { return &var.as<pLMNAreaBased_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+FreqBandIndicator ::= INTEGER (1..256, ...)
+*/
+
+struct FreqBandIndicator : asn::integer<>
+{
+ using constraint_t = asn::constraints<true,asn::span<1, 256>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<BandInfo_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<BandInfo_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(freqBandIndicator);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<true,asn::span<-101, 100>>;
+ 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<false,asn::span<0, 10000000000>>;
+ 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<false,asn::span<1, 248>>;
+ 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<BluetoothMeasConfigNameList_elm>
+{
+ static constexpr const char* name() {return "BluetoothMeasConfigNameList";}
+ using parent_t = asn::sequenceof<BluetoothMeasConfigNameList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofBluetoothName >>;
+
+};
+/*
+BluetoothMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct BluetoothMeasurementConfiguration_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<BluetoothMeasurementConfiguration_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<BluetoothMeasurementConfiguration_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(bluetoothMeasConfig);
+ v(bluetoothMeasConfigNameList);
+ v(bt_rssi);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<BroadcastPLMNs_Item_elm>
+{
+ static constexpr const char* name() {return "BroadcastPLMNs-Item";}
+ using parent_t = asn::sequenceof<BroadcastPLMNs_Item_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofBPLMNs >>;
+
+};
+/*
+CNTypeRestrictionsItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct CNTypeRestrictionsItem_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<CNTypeRestrictionsItem_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CNTypeRestrictionsItem_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(plmn_Id);
+ v(cn_type);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<CNTypeRestrictions_elm>
+{
+ static constexpr const char* name() {return "CNTypeRestrictions";}
+ using parent_t = asn::sequenceof<CNTypeRestrictions_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofEPLMNsPlusOne >>;
+
+};
+/*
+PDCP-SNExtended ::= INTEGER (0..32767)
+*/
+
+struct PDCP_SNExtended : asn::integer<>
+{
+ using constraint_t = asn::constraints<false,asn::span<0, 32767>>;
+ 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<false,asn::span<0, 131071>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<COUNTValueExtended_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<COUNTValueExtended_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pDCP_SNExtended);
+ v(hFNModified);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::span<0, 4095>>;
+ 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<false,asn::span<0, 1048575>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<COUNTvalue_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<COUNTvalue_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pDCP_SN);
+ v(hFN);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::span<0, 262143>>;
+ 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<false,asn::span<0, 16383>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<COUNTvaluePDCP_SNlength18_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<COUNTvaluePDCP_SNlength18_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pDCP_SNlength18);
+ v(hFNforPDCP_SNlength18);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<16>>;
+ 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<false,asn::one<27>>;
+ 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<false,asn::one<16>>;
+ 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<true,asn::span<0, 15>>;
+ 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<true,asn::span<0, 7>>;
+ static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";}
+ using parent_t = asn::integer<>;
+
+ };
+
+ void clear()
+ {
+ switch(get_index())
+ {
+ case 1: var.destroy<four_bitCQI_t>(); break;
+ case 2: var.destroy<three_bitSpatialDifferentialCQI_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<four_bitCQI_t>());
+ case 2: set_index(2); return v(var.build<three_bitSpatialDifferentialCQI_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<four_bitCQI_t>());
+ case 2: return v(var.as<three_bitSpatialDifferentialCQI_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<four_bitCQI_t>(1);
+ v.template operator()<three_bitSpatialDifferentialCQI_t>(2);
+
+ }
+ four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build<four_bitCQI_t>();} return var.as<four_bitCQI_t>();}
+ four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as<four_bitCQI_t>();} return nullptr; }
+ three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build<three_bitSpatialDifferentialCQI_t>();} return var.as<three_bitSpatialDifferentialCQI_t>();}
+ three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as<three_bitSpatialDifferentialCQI_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+WidebandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct WidebandCQI_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<0, 15>>;
+ 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<WidebandCQI_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<WidebandCQI_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(widebandCQICodeword0);
+ v(widebandCQICodeword1);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<true,asn::span<0, 15>>;
+ 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<true,asn::span<0, 3>>;
+ 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<true,asn::span<0, 3>>;
+ static constexpr const char* name() {return "two_bitDifferentialCQI_t";}
+ using parent_t = asn::integer<>;
+
+ };
+
+ void clear()
+ {
+ switch(get_index())
+ {
+ case 1: var.destroy<four_bitCQI_t>(); break;
+ case 2: var.destroy<two_bitSubbandDifferentialCQI_t>(); break;
+ case 3: var.destroy<two_bitDifferentialCQI_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<four_bitCQI_t>());
+ case 2: set_index(2); return v(var.build<two_bitSubbandDifferentialCQI_t>());
+ case 3: set_index(3); return v(var.build<two_bitDifferentialCQI_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<four_bitCQI_t>());
+ case 2: return v(var.as<two_bitSubbandDifferentialCQI_t>());
+ case 3: return v(var.as<two_bitDifferentialCQI_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<four_bitCQI_t>(1);
+ v.template operator()<two_bitSubbandDifferentialCQI_t>(2);
+ v.template operator()<two_bitDifferentialCQI_t>(3);
+
+ }
+ four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build<four_bitCQI_t>();} return var.as<four_bitCQI_t>();}
+ four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as<four_bitCQI_t>();} return nullptr; }
+ two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build<two_bitSubbandDifferentialCQI_t>();} return var.as<two_bitSubbandDifferentialCQI_t>();}
+ two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 2) { return &var.as<two_bitSubbandDifferentialCQI_t>();} return nullptr; }
+ two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build<two_bitDifferentialCQI_t>();} return var.as<two_bitDifferentialCQI_t>();}
+ two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 3) { return &var.as<two_bitDifferentialCQI_t>();} 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<sizeof(union_type)> 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<true,asn::span<0, 15>>;
+ 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<true,asn::span<0, 7>>;
+ 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<true,asn::span<0, 3>>;
+ 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<true,asn::span<0, 3>>;
+ static constexpr const char* name() {return "two_bitDifferentialCQI_t";}
+ using parent_t = asn::integer<>;
+
+ };
+
+ void clear()
+ {
+ switch(get_index())
+ {
+ case 1: var.destroy<four_bitCQI_t>(); break;
+ case 2: var.destroy<three_bitSpatialDifferentialCQI_t>(); break;
+ case 3: var.destroy<two_bitSubbandDifferentialCQI_t>(); break;
+ case 4: var.destroy<two_bitDifferentialCQI_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<four_bitCQI_t>());
+ case 2: set_index(2); return v(var.build<three_bitSpatialDifferentialCQI_t>());
+ case 3: set_index(3); return v(var.build<two_bitSubbandDifferentialCQI_t>());
+ case 4: set_index(4); return v(var.build<two_bitDifferentialCQI_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<four_bitCQI_t>());
+ case 2: return v(var.as<three_bitSpatialDifferentialCQI_t>());
+ case 3: return v(var.as<two_bitSubbandDifferentialCQI_t>());
+ case 4: return v(var.as<two_bitDifferentialCQI_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<four_bitCQI_t>(1);
+ v.template operator()<three_bitSpatialDifferentialCQI_t>(2);
+ v.template operator()<two_bitSubbandDifferentialCQI_t>(3);
+ v.template operator()<two_bitDifferentialCQI_t>(4);
+
+ }
+ four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build<four_bitCQI_t>();} return var.as<four_bitCQI_t>();}
+ four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as<four_bitCQI_t>();} return nullptr; }
+ three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build<three_bitSpatialDifferentialCQI_t>();} return var.as<three_bitSpatialDifferentialCQI_t>();}
+ three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as<three_bitSpatialDifferentialCQI_t>();} return nullptr; }
+ two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build<two_bitSubbandDifferentialCQI_t>();} return var.as<two_bitSubbandDifferentialCQI_t>();}
+ two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 3) { return &var.as<two_bitSubbandDifferentialCQI_t>();} return nullptr; }
+ two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 4) { clear(); set_index(4); return var.build<two_bitDifferentialCQI_t>();} return var.as<two_bitDifferentialCQI_t>();}
+ two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 4) { return &var.as<two_bitDifferentialCQI_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+SubbandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct SubbandCQI_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<SubbandCQI_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<SubbandCQI_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(subbandCQICodeword0);
+ v(subbandCQICodeword1);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<0, 27>>;
+ 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<SubbandCQIItem_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<SubbandCQIItem_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(subbandCQI);
+ v(subbandIndex);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<SubbandCQIList_elm>
+{
+ static constexpr const char* name() {return "SubbandCQIList";}
+ using parent_t = asn::sequenceof<SubbandCQIList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxSubband >>;
+
+};
+/*
+CSIReportPerCSIProcessItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct CSIReportPerCSIProcessItem_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<1, 8>>;
+ 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<CSIReportPerCSIProcessItem_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CSIReportPerCSIProcessItem_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(rI);
+ v(widebandCQI);
+ v(subbandSize);
+ v(subbandCQIList);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<CSIReportPerCSIProcessItem_elm>
+{
+ static constexpr const char* name() {return "CSIReportPerCSIProcessItem";}
+ using parent_t = asn::sequenceof<CSIReportPerCSIProcessItem_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxCSIReport >>;
+
+};
+/*
+CSIReportPerCSIProcess-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct CSIReportPerCSIProcess_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<1, 7>>;
+ 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<CSIReportPerCSIProcess_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CSIReportPerCSIProcess_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(cSIProcessConfigurationIndex);
+ v(cSIReportPerCSIProcessItem);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<CSIReportPerCSIProcess_elm>
+{
+ static constexpr const char* name() {return "CSIReportPerCSIProcess";}
+ using parent_t = asn::sequenceof<CSIReportPerCSIProcess_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxCSIProcess >>;
+
+};
+/*
+CSIReportList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct CSIReportList_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<CSIReportList_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CSIReportList_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(uEID);
+ v(cSIReportPerCSIProcess);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<CSIReportList_elm>
+{
+ static constexpr const char* name() {return "CSIReportList";}
+ using parent_t = asn::sequenceof<CSIReportList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxUEReport >>;
+
+};
+/*
+CapacityValue ::= INTEGER (0..100)
+*/
+
+struct CapacityValue : asn::integer<>
+{
+ using constraint_t = asn::constraints<false,asn::span<0, 100>>;
+ 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<radioNetwork_t>(); break;
+ case 2: var.destroy<transport_t>(); break;
+ case 3: var.destroy<protocol_t>(); break;
+ case 4: var.destroy<misc_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<radioNetwork_t>());
+ case 2: set_index(2); return v(var.build<transport_t>());
+ case 3: set_index(3); return v(var.build<protocol_t>());
+ case 4: set_index(4); return v(var.build<misc_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<radioNetwork_t>());
+ case 2: return v(var.as<transport_t>());
+ case 3: return v(var.as<protocol_t>());
+ case 4: return v(var.as<misc_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<radioNetwork_t>(1);
+ v.template operator()<transport_t>(2);
+ v.template operator()<protocol_t>(3);
+ v.template operator()<misc_t>(4);
+
+ }
+ radioNetwork_t& select_radioNetwork() { if(get_index() != 1) { clear(); set_index(1); return var.build<radioNetwork_t>();} return var.as<radioNetwork_t>();}
+ radioNetwork_t const* get_radioNetwork() const { if(get_index() == 1) { return &var.as<radioNetwork_t>();} return nullptr; }
+ transport_t& select_transport() { if(get_index() != 2) { clear(); set_index(2); return var.build<transport_t>();} return var.as<transport_t>();}
+ transport_t const* get_transport() const { if(get_index() == 2) { return &var.as<transport_t>();} return nullptr; }
+ protocol_t& select_protocol() { if(get_index() != 3) { clear(); set_index(3); return var.build<protocol_t>();} return var.as<protocol_t>();}
+ protocol_t const* get_protocol() const { if(get_index() == 3) { return &var.as<protocol_t>();} return nullptr; }
+ misc_t& select_misc() { if(get_index() != 4) { clear(); set_index(4); return var.build<misc_t>();} return var.as<misc_t>();}
+ misc_t const* get_misc() const { if(get_index() == 4) { return &var.as<misc_t>();} 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<sizeof(union_type)> 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<true,asn::span<1, 100>>;
+ 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<typename V> void decode(V& v)
+ {
+ v(eCGI);
+
+ };
+ template<typename V> 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<ReplacingCellsList_elm>
+{
+ static constexpr const char* name() {return "ReplacingCellsList";}
+ using parent_t = asn::sequenceof<ReplacingCellsList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<0, maxCellineNB >>;
+
+};
+/*
+CellReplacingInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct CellReplacingInfo_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<CellReplacingInfo_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CellReplacingInfo_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(replacingCellsList);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<CellType_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CellType_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(cell_Size);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<6, 4400>>;
+ 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<CoMPHypothesisSetItem_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CoMPHypothesisSetItem_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(coMPCellID);
+ v(coMPHypothesis);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<CoMPHypothesisSet_elm>
+{
+ static constexpr const char* name() {return "CoMPHypothesisSet";}
+ using parent_t = asn::sequenceof<CoMPHypothesisSet_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofCoMPCells >>;
+
+};
+/*
+CoMPInformationItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct CoMPInformationItem_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<CoMPInformationItem_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CoMPInformationItem_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(coMPHypothesisSet);
+ v(benefitMetric);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<CoMPInformationItem_elm>
+{
+ static constexpr const char* name() {return "CoMPInformationItem";}
+ using parent_t = asn::sequenceof<CoMPInformationItem_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofCoMPHypothesisSet >>;
+
+};
+/*
+CoMPInformationStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct CoMPInformationStartTime_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<0, 1023>>;
+ 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<true,asn::span<0, 9>>;
+ 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<CoMPInformationStartTime_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CoMPInformationStartTime_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(startSFN);
+ v(startSubframeNumber);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<CoMPInformationStartTime_elm>
+{
+ static constexpr const char* name() {return "CoMPInformationStartTime";}
+ using parent_t = asn::sequenceof<CoMPInformationStartTime_elm>;
+ using constraint_t = asn::constraints<false,asn::span<0, 1>>;
+
+};
+/*
+CoMPInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct CoMPInformation_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<CoMPInformation_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CoMPInformation_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(coMPInformationItem);
+ v(coMPInformationStartTime);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<CompositeAvailableCapacity_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CompositeAvailableCapacity_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(cellCapacityClassValue);
+ v(capacityValue);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<CompositeAvailableCapacityGroup_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CompositeAvailableCapacityGroup_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(dL_CompositeAvailableCapacity);
+ v(uL_CompositeAvailableCapacity);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<4>>;
+ 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<true,asn::span<0, 15>>;
+ 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<typename V> void decode(V& v)
+ {
+ v(eCGI);
+ v(coverageState);
+ v(cellDeploymentStatusIndicator);
+ v(cellReplacingInfo);
+
+ };
+ template<typename V> 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<CoverageModificationList_elm>
+{
+ static constexpr const char* name() {return "CoverageModificationList";}
+ using parent_t = asn::sequenceof<CoverageModificationList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxCellineNB >>;
+
+};
+/*
+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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<CriticalityDiagnostics_IE_List_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CriticalityDiagnostics_IE_List_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(iECriticality);
+ v(iE_ID);
+ v(typeOfError);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<CriticalityDiagnostics_IE_List_elm>
+{
+ static constexpr const char* name() {return "CriticalityDiagnostics-IE-List";}
+ using parent_t = asn::sequenceof<CriticalityDiagnostics_IE_List_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxNrOfErrors >>;
+
+};
+/*
+CriticalityDiagnostics-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct CriticalityDiagnostics_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<CriticalityDiagnostics_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<CriticalityDiagnostics_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(procedureCode);
+ v(triggeringMessage);
+ v(procedureCriticality);
+ v(iEsCriticalityDiagnostics);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::span<0, 100>>;
+ 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<false,asn::span<0, 100>>;
+ 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<false,asn::span<0, 100>>;
+ 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<false,asn::span<0, 100>>;
+ 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<false,asn::span<6, 17600>>;
+ 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<unchanged_t>(); break;
+ case 2: var.destroy<changed_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<unchanged_t>());
+ case 2: set_index(2); return v(var.build<changed_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<unchanged_t>());
+ case 2: return v(var.as<changed_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<unchanged_t>(1);
+ v.template operator()<changed_t>(2);
+
+ }
+ unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build<unchanged_t>();} return var.as<unchanged_t>();}
+ unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as<unchanged_t>();} return nullptr; }
+ changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build<changed_t>();} return var.as<changed_t>();}
+ changed_t const* get_changed() const { if(get_index() == 2) { return &var.as<changed_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+DRB-ID ::= INTEGER (1..32)
+*/
+
+struct DRB_ID : asn::integer<>
+{
+ using constraint_t = asn::constraints<false,asn::span<1, 32>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<ULOnlySharing_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ULOnlySharing_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(uLResourceBitmapULOnlySharing);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<unchanged_t>(); break;
+ case 2: var.destroy<changed_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<unchanged_t>());
+ case 2: set_index(2); return v(var.build<changed_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<unchanged_t>());
+ case 2: return v(var.as<changed_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<unchanged_t>(1);
+ v.template operator()<changed_t>(2);
+
+ }
+ unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build<unchanged_t>();} return var.as<unchanged_t>();}
+ unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as<unchanged_t>();} return nullptr; }
+ changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build<changed_t>();} return var.as<changed_t>();}
+ changed_t const* get_changed() const { if(get_index() == 2) { return &var.as<changed_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+ULandDLSharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct ULandDLSharing_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<ULandDLSharing_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ULandDLSharing_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(uLResourcesULandDLSharing);
+ v(dLResourcesULandDLSharing);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<uLOnlySharing_t>(); break;
+ case 2: var.destroy<uLandDLSharing_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<uLOnlySharing_t>());
+ case 2: set_index(2); return v(var.build<uLandDLSharing_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<uLOnlySharing_t>());
+ case 2: return v(var.as<uLandDLSharing_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<uLOnlySharing_t>(1);
+ v.template operator()<uLandDLSharing_t>(2);
+
+ }
+ uLOnlySharing_t& select_uLOnlySharing() { if(get_index() != 1) { clear(); set_index(1); return var.build<uLOnlySharing_t>();} return var.as<uLOnlySharing_t>();}
+ uLOnlySharing_t const* get_uLOnlySharing() const { if(get_index() == 1) { return &var.as<uLOnlySharing_t>();} return nullptr; }
+ uLandDLSharing_t& select_uLandDLSharing() { if(get_index() != 2) { clear(); set_index(2); return var.build<uLandDLSharing_t>();} return var.as<uLandDLSharing_t>();}
+ uLandDLSharing_t const* get_uLandDLSharing() const { if(get_index() == 2) { return &var.as<uLandDLSharing_t>();} 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<sizeof(union_type)> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::span<10, 160>>;
+ 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<false,asn::span<0, 3>>;
+ 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<ReservedSubframePattern_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ReservedSubframePattern_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(subframeType);
+ v(reservedSubframePattern);
+ v(mBSFNControlRegionLength);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::span<0, 1023>>;
+ 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<DataTrafficResourceIndication_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<DataTrafficResourceIndication_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(activationSFN);
+ v(sharedResourceType);
+ v(reservedSubframePattern);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::span<0, 4095>>;
+ 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<DeliveryStatus_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<DeliveryStatus_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(highestSuccessDeliveredPDCPSN);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::one<8>>;
+ 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<false,asn::span<0, 3>>;
+ 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<pA_list_t_elm>
+ {
+ static constexpr const char* name() {return "pA_list_t";}
+ using parent_t = asn::sequenceof<pA_list_t_elm>;
+ using constraint_t = asn::constraints<false,asn::span<0, maxnoofPA >>;
+
+ };
+ 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<DynamicNAICSInformation_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<DynamicNAICSInformation_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(transmissionModes);
+ v(pB_information);
+ v(pA_list);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<naics_active_t>(); break;
+ case 2: var.destroy<naics_inactive_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<naics_active_t>());
+ case 2: set_index(2); return v(var.build<naics_inactive_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<naics_active_t>());
+ case 2: return v(var.as<naics_inactive_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<naics_active_t>(1);
+ v.template operator()<naics_inactive_t>(2);
+
+ }
+ naics_active_t& select_naics_active() { if(get_index() != 1) { clear(); set_index(1); return var.build<naics_active_t>();} return var.as<naics_active_t>();}
+ naics_active_t const* get_naics_active() const { if(get_index() == 1) { return &var.as<naics_active_t>();} return nullptr; }
+ naics_inactive_t& select_naics_inactive() { if(get_index() != 2) { clear(); set_index(2); return var.build<naics_inactive_t>();} return var.as<naics_inactive_t>();}
+ naics_inactive_t const* get_naics_inactive() const { if(get_index() == 2) { return &var.as<naics_inactive_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+E-RAB-ID ::= INTEGER (0..15, ...)
+*/
+
+struct E_RAB_ID : asn::integer<>
+{
+ using constraint_t = asn::constraints<true,asn::span<0, 15>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<E_RAB_Item_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<E_RAB_Item_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(e_RAB_ID);
+ v(cause);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_IES::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Value_t() {clear();}
+ size_t get_index() const {return type;}
+ E_RAB_Item& select_id_E_RAB_Item() { return set<E_RAB_Item>(1); }
+ E_RAB_Item const* get_id_E_RAB_Item() const { return get<E_RAB_Item>(1); }
+ bool is_unknown() const { return type == 2; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<E_RAB_Item>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<E_RAB_Item>(1);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<E_RAB_Item>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(E_RAB_Item)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<false,asn::span<0, 255>>;
+ 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<true,asn::span<10000000001, 4000000000000>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateDL() { return set<ExtendedBitRate>(1); }
+ ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateDL() const { return get<ExtendedBitRate>(1); }
+ ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateUL() { return set<ExtendedBitRate>(2); }
+ ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateUL() const { return get<ExtendedBitRate>(2); }
+ ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateDL() { return set<ExtendedBitRate>(3); }
+ ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateDL() const { return get<ExtendedBitRate>(3); }
+ ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateUL() { return set<ExtendedBitRate>(4); }
+ ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateUL() const { return get<ExtendedBitRate>(4); }
+ bool is_unknown() const { return type == 5; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<ExtendedBitRate>(); break;
+ case 2: var.destroy<ExtendedBitRate>(); break;
+ case 3: var.destroy<ExtendedBitRate>(); break;
+ case 4: var.destroy<ExtendedBitRate>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<ExtendedBitRate>(1);
+ v.template operator()<ExtendedBitRate>(2);
+ v.template operator()<ExtendedBitRate>(3);
+ v.template operator()<ExtendedBitRate>(4);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<ExtendedBitRate>()); return true;
+ case 2: v(var.as<ExtendedBitRate>()); return true;
+ case 3: v(var.as<ExtendedBitRate>()); return true;
+ case 4: v(var.as<ExtendedBitRate>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(ExtendedBitRate)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<GBR_QosInformation_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<GBR_QosInformation_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(e_RAB_MaximumBitrateDL);
+ v(e_RAB_MaximumBitrateUL);
+ v(e_RAB_GuaranteedBitrateDL);
+ v(e_RAB_GuaranteedBitrateUL);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::span<0, 1000>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ Packet_LossRate& select_id_DownlinkPacketLossRate() { return set<Packet_LossRate>(1); }
+ Packet_LossRate const* get_id_DownlinkPacketLossRate() const { return get<Packet_LossRate>(1); }
+ Packet_LossRate& select_id_UplinkPacketLossRate() { return set<Packet_LossRate>(2); }
+ Packet_LossRate const* get_id_UplinkPacketLossRate() const { return get<Packet_LossRate>(2); }
+ bool is_unknown() const { return type == 3; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<Packet_LossRate>(); break;
+ case 2: var.destroy<Packet_LossRate>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<Packet_LossRate>(1);
+ v.template operator()<Packet_LossRate>(2);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<Packet_LossRate>()); return true;
+ case 2: v(var.as<Packet_LossRate>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(Packet_LossRate)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<E_RAB_Level_QoS_Parameters_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<E_RAB_Level_QoS_Parameters_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(qCI);
+ v(allocationAndRetentionPriority);
+ v(gbrQosInformation);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<E_RAB_ItemIEs>
+{
+ static constexpr const char* name() {return "E_RAB_List_elm";}
+ using parent_t = ProtocolIE_Single_Container<E_RAB_ItemIEs>;
+
+};
+struct E_RAB_List : asn::sequenceof<E_RAB_List_elm>
+{
+ static constexpr const char* name() {return "E-RAB-List";}
+ using parent_t = asn::sequenceof<E_RAB_List_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofBearers >>;
+
+};
+/*
+E-RABUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct E_RABUsageReport_Item_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::one<4>>;
+ 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<false,asn::one<4>>;
+ 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<false,asn::span<0, 4294967295>>;
+ 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<false,asn::span<0, 4294967295>>;
+ 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<E_RABUsageReport_Item_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<E_RABUsageReport_Item_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(startTimeStamp);
+ v(endTimeStamp);
+ v(usageCountUL);
+ v(usageCountDL);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_IES::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Value_t() {clear();}
+ size_t get_index() const {return type;}
+ E_RABUsageReport_Item& select_id_E_RABUsageReport_Item() { return set<E_RABUsageReport_Item>(1); }
+ E_RABUsageReport_Item const* get_id_E_RABUsageReport_Item() const { return get<E_RABUsageReport_Item>(1); }
+ bool is_unknown() const { return type == 2; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<E_RABUsageReport_Item>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<E_RABUsageReport_Item>(1);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<E_RABUsageReport_Item>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(E_RABUsageReport_Item)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<E_RABUsageReport_ItemIEs>
+{
+ static constexpr const char* name() {return "E_RABUsageReportList_elm";}
+ using parent_t = ProtocolIE_Single_Container<E_RABUsageReport_ItemIEs>;
+
+};
+struct E_RABUsageReportList : asn::sequenceof<E_RABUsageReportList_elm>
+{
+ static constexpr const char* name() {return "E-RABUsageReportList";}
+ using parent_t = asn::sequenceof<E_RABUsageReportList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnooftimeperiods >>;
+
+};
+/*
+EARFCN ::= INTEGER (0..maxEARFCN)
+*/
+
+struct EARFCN : asn::integer<>
+{
+ using constraint_t = asn::constraints<false,asn::span<0, maxEARFCN >>;
+ 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<true,asn::span< maxEARFCNPlusOne , newmaxEARFCN >>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<EN_DC_ResourceConfigurationExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<EN_DC_ResourceConfigurationExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pDCPatSgNB);
+ v(mCGresources);
+ v(sCGresources);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<20>>;
+ 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<false,asn::one<28>>;
+ 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<false,asn::one<18>>;
+ 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<false,asn::one<21>>;
+ 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<macro_eNB_ID_t>(); break;
+ case 2: var.destroy<home_eNB_ID_t>(); break;
+ case 3: var.destroy<short_Macro_eNB_ID_t>(); break;
+ case 4: var.destroy<long_Macro_eNB_ID_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<macro_eNB_ID_t>());
+ case 2: set_index(2); return v(var.build<home_eNB_ID_t>());
+ case 3: set_index(3); return v(var.build<short_Macro_eNB_ID_t>());
+ case 4: set_index(4); return v(var.build<long_Macro_eNB_ID_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<macro_eNB_ID_t>());
+ case 2: return v(var.as<home_eNB_ID_t>());
+ case 3: return v(var.as<short_Macro_eNB_ID_t>());
+ case 4: return v(var.as<long_Macro_eNB_ID_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<macro_eNB_ID_t>(1);
+ v.template operator()<home_eNB_ID_t>(2);
+ v.template operator()<short_Macro_eNB_ID_t>(3);
+ v.template operator()<long_Macro_eNB_ID_t>(4);
+
+ }
+ macro_eNB_ID_t& select_macro_eNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build<macro_eNB_ID_t>();} return var.as<macro_eNB_ID_t>();}
+ macro_eNB_ID_t const* get_macro_eNB_ID() const { if(get_index() == 1) { return &var.as<macro_eNB_ID_t>();} return nullptr; }
+ home_eNB_ID_t& select_home_eNB_ID() { if(get_index() != 2) { clear(); set_index(2); return var.build<home_eNB_ID_t>();} return var.as<home_eNB_ID_t>();}
+ home_eNB_ID_t const* get_home_eNB_ID() const { if(get_index() == 2) { return &var.as<home_eNB_ID_t>();} return nullptr; }
+ short_Macro_eNB_ID_t& select_short_Macro_eNB_ID() { if(get_index() != 3) { clear(); set_index(3); return var.build<short_Macro_eNB_ID_t>();} return var.as<short_Macro_eNB_ID_t>();}
+ short_Macro_eNB_ID_t const* get_short_Macro_eNB_ID() const { if(get_index() == 3) { return &var.as<short_Macro_eNB_ID_t>();} return nullptr; }
+ long_Macro_eNB_ID_t& select_long_Macro_eNB_ID() { if(get_index() != 4) { clear(); set_index(4); return var.build<long_Macro_eNB_ID_t>();} return var.as<long_Macro_eNB_ID_t>();}
+ long_Macro_eNB_ID_t const* get_long_Macro_eNB_ID() const { if(get_index() == 4) { return &var.as<long_Macro_eNB_ID_t>();} 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<sizeof(union_type)> 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<EPLMNs_elm>
+{
+ static constexpr const char* name() {return "EPLMNs";}
+ using parent_t = asn::sequenceof<EPLMNs_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofEPLMNs >>;
+
+};
+/*
+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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<ERABActivityNotifyItem_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ERABActivityNotifyItem_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(e_RAB_ID);
+ v(activityReport);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<ERABActivityNotifyItemList_elm>
+{
+ static constexpr const char* name() {return "ERABActivityNotifyItemList";}
+ using parent_t = asn::sequenceof<ERABActivityNotifyItemList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<0, maxnoofBearers >>;
+
+};
+/*
+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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ EARFCNExtension& select_id_UL_EARFCNExtension() { return set<EARFCNExtension>(1); }
+ EARFCNExtension const* get_id_UL_EARFCNExtension() const { return get<EARFCNExtension>(1); }
+ EARFCNExtension& select_id_DL_EARFCNExtension() { return set<EARFCNExtension>(2); }
+ EARFCNExtension const* get_id_DL_EARFCNExtension() const { return get<EARFCNExtension>(2); }
+ OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { return set<OffsetOfNbiotChannelNumberToEARFCN>(3); }
+ OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToDL_EARFCN() const { return get<OffsetOfNbiotChannelNumberToEARFCN>(3); }
+ OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { return set<OffsetOfNbiotChannelNumberToEARFCN>(4); }
+ OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToUL_EARFCN() const { return get<OffsetOfNbiotChannelNumberToEARFCN>(4); }
+ NRS_NSSS_PowerOffset& select_id_NRS_NSSS_PowerOffset() { return set<NRS_NSSS_PowerOffset>(5); }
+ NRS_NSSS_PowerOffset const* get_id_NRS_NSSS_PowerOffset() const { return get<NRS_NSSS_PowerOffset>(5); }
+ NSSS_NumOccasionDifferentPrecoder& select_id_NSSS_NumOccasionDifferentPrecoder() { return set<NSSS_NumOccasionDifferentPrecoder>(6); }
+ NSSS_NumOccasionDifferentPrecoder const* get_id_NSSS_NumOccasionDifferentPrecoder() const { return get<NSSS_NumOccasionDifferentPrecoder>(6); }
+ bool is_unknown() const { return type == 7; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<EARFCNExtension>(); break;
+ case 2: var.destroy<EARFCNExtension>(); break;
+ case 3: var.destroy<OffsetOfNbiotChannelNumberToEARFCN>(); break;
+ case 4: var.destroy<OffsetOfNbiotChannelNumberToEARFCN>(); break;
+ case 5: var.destroy<NRS_NSSS_PowerOffset>(); break;
+ case 6: var.destroy<NSSS_NumOccasionDifferentPrecoder>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<EARFCNExtension>(1);
+ v.template operator()<EARFCNExtension>(2);
+ v.template operator()<OffsetOfNbiotChannelNumberToEARFCN>(3);
+ v.template operator()<OffsetOfNbiotChannelNumberToEARFCN>(4);
+ v.template operator()<NRS_NSSS_PowerOffset>(5);
+ v.template operator()<NSSS_NumOccasionDifferentPrecoder>(6);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<EARFCNExtension>()); return true;
+ case 2: v(var.as<EARFCNExtension>()); return true;
+ case 3: v(var.as<OffsetOfNbiotChannelNumberToEARFCN>()); return true;
+ case 4: v(var.as<OffsetOfNbiotChannelNumberToEARFCN>()); return true;
+ case 5: v(var.as<NRS_NSSS_PowerOffset>()); return true;
+ case 6: v(var.as<NSSS_NumOccasionDifferentPrecoder>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} 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<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<FDD_Info_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<FDD_Info_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(uL_EARFCN);
+ v(dL_EARFCN);
+ v(uL_Transmission_Bandwidth);
+ v(dL_Transmission_Bandwidth);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<SpecialSubframe_Info_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<SpecialSubframe_Info_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(specialSubframePatterns);
+ v(cyclicPrefixDL);
+ v(cyclicPrefixUL);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ AdditionalSpecialSubframe_Info& select_id_AdditionalSpecialSubframe_Info() { return set<AdditionalSpecialSubframe_Info>(1); }
+ AdditionalSpecialSubframe_Info const* get_id_AdditionalSpecialSubframe_Info() const { return get<AdditionalSpecialSubframe_Info>(1); }
+ EARFCNExtension& select_id_eARFCNExtension() { return set<EARFCNExtension>(2); }
+ EARFCNExtension const* get_id_eARFCNExtension() const { return get<EARFCNExtension>(2); }
+ AdditionalSpecialSubframeExtension_Info& select_id_AdditionalSpecialSubframeExtension_Info() { return set<AdditionalSpecialSubframeExtension_Info>(3); }
+ AdditionalSpecialSubframeExtension_Info const* get_id_AdditionalSpecialSubframeExtension_Info() const { return get<AdditionalSpecialSubframeExtension_Info>(3); }
+ bool is_unknown() const { return type == 4; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<AdditionalSpecialSubframe_Info>(); break;
+ case 2: var.destroy<EARFCNExtension>(); break;
+ case 3: var.destroy<AdditionalSpecialSubframeExtension_Info>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<AdditionalSpecialSubframe_Info>(1);
+ v.template operator()<EARFCNExtension>(2);
+ v.template operator()<AdditionalSpecialSubframeExtension_Info>(3);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<AdditionalSpecialSubframe_Info>()); return true;
+ case 2: v(var.as<EARFCNExtension>()); return true;
+ case 3: v(var.as<AdditionalSpecialSubframeExtension_Info>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(AdditionalSpecialSubframeExtension_Info)];
+ char dummy2[sizeof(AdditionalSpecialSubframe_Info)];
+ char dummy3[sizeof(EARFCNExtension)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<TDD_Info_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<TDD_Info_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(eARFCN);
+ v(transmission_Bandwidth);
+ v(subframeAssignment);
+ v(specialSubframe_Info);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<fDD_t>(); break;
+ case 2: var.destroy<tDD_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<fDD_t>());
+ case 2: set_index(2); return v(var.build<tDD_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<fDD_t>());
+ case 2: return v(var.as<tDD_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<fDD_t>(1);
+ v.template operator()<tDD_t>(2);
+
+ }
+ fDD_t& select_fDD() { if(get_index() != 1) { clear(); set_index(1); return var.build<fDD_t>();} return var.as<fDD_t>();}
+ fDD_t const* get_fDD() const { if(get_index() == 1) { return &var.as<fDD_t>();} return nullptr; }
+ tDD_t& select_tDD() { if(get_index() != 2) { clear(); set_index(2); return var.build<tDD_t>();} return var.as<tDD_t>();}
+ tDD_t const* get_tDD() const { if(get_index() == 2) { return &var.as<tDD_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+EUTRANTraceID ::= OCTET STRING (SIZE (8))
+*/
+
+struct EUTRANTraceID : asn::ostring<>
+{
+ using constraint_t = asn::constraints<false,asn::one<8>>;
+ 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<true,asn::one<16>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<0, 1023>>;
+ 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<true,asn::span<0, 9>>;
+ 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<EnhancedRNTPStartTime_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<EnhancedRNTPStartTime_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(startSFN);
+ v(startSubframeNumber);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<12, 8800>>;
+ 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<EnhancedRNTP_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<EnhancedRNTP_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(enhancedRNTPBitmap);
+ v(rNTP_High_Power_Threshold);
+ v(enhancedRNTPStartTime);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<true,asn::span<1, 30>,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<true,asn::span<1, 30>,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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<ExpectedUEActivityBehaviour_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ExpectedUEActivityBehaviour_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(expectedActivityPeriod);
+ v(expectedIdlePeriod);
+ v(sourceofUEActivityBehaviourInformation);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<ExpectedUEBehaviour_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ExpectedUEBehaviour_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(expectedActivity);
+ v(expectedHOInterval);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<UL_InterferenceOverloadIndication_elm>
+{
+ static constexpr const char* name() {return "UL-InterferenceOverloadIndication";}
+ using parent_t = asn::sequenceof<UL_InterferenceOverloadIndication_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofPRBs >>;
+
+};
+/*
+ExtendedULInterferenceOverloadInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct ExtendedULInterferenceOverloadInfo_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::one<5>>;
+ 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<ExtendedULInterferenceOverloadInfo_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ExtendedULInterferenceOverloadInfo_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(associatedSubframes);
+ v(extended_ul_InterferenceOverloadIndication);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<3>>;
+ 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<false,asn::one<2>>;
+ 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<ForbiddenLACs_elm>
+{
+ static constexpr const char* name() {return "ForbiddenLACs";}
+ using parent_t = asn::sequenceof<ForbiddenLACs_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofForbLACs >>;
+
+};
+/*
+ForbiddenLAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct ForbiddenLAs_Item_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<ForbiddenLAs_Item_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ForbiddenLAs_Item_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pLMN_Identity);
+ v(forbiddenLACs);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<ForbiddenLAs_elm>
+{
+ static constexpr const char* name() {return "ForbiddenLAs";}
+ using parent_t = asn::sequenceof<ForbiddenLAs_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofEPLMNsPlusOne >>;
+
+};
+/*
+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<ForbiddenTACs_elm>
+{
+ static constexpr const char* name() {return "ForbiddenTACs";}
+ using parent_t = asn::sequenceof<ForbiddenTACs_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofForbTACs >>;
+
+};
+/*
+ForbiddenTAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct ForbiddenTAs_Item_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<ForbiddenTAs_Item_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ForbiddenTAs_Item_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pLMN_Identity);
+ v(forbiddenTACs);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<ForbiddenTAs_elm>
+{
+ static constexpr const char* name() {return "ForbiddenTAs";}
+ using parent_t = asn::sequenceof<ForbiddenTAs_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofEPLMNsPlusOne >>;
+
+};
+/*
+Fourframes ::= BIT STRING (SIZE (24))
+*/
+
+struct Fourframes : asn::bstring<>
+{
+ using constraint_t = asn::constraints<false,asn::one<24>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<1, 1024>>;
+ 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<SupportedSULFreqBandItem_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<SupportedSULFreqBandItem_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(freqBandIndicatorNr);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<1, 1024>>;
+ 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<supportedSULBandList_t_elm>
+ {
+ static constexpr const char* name() {return "supportedSULBandList_t";}
+ using parent_t = asn::sequenceof<supportedSULBandList_t_elm>;
+ using constraint_t = asn::constraints<false,asn::span<0, maxnoofNrCellBands >>;
+
+ };
+ supportedSULBandList_t& ref_supportedSULBandList() {return supportedSULBandList;}
+ supportedSULBandList_t const& ref_supportedSULBandList() const {return supportedSULBandList;}
+ struct iE_Extensions_t : ProtocolExtensionContainer<FreqBandNrItem_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<FreqBandNrItem_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(freqBandIndicatorNr);
+ v(supportedSULBandList);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::span<22, 32>>;
+ static constexpr const char* name() {return "gNB_ID_t";}
+ using parent_t = asn::bstring<>;
+
+ };
+
+ void clear()
+ {
+ switch(get_index())
+ {
+ case 1: var.destroy<gNB_ID_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<gNB_ID_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<gNB_ID_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<gNB_ID_t>(1);
+
+ }
+ gNB_ID_t& select_gNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build<gNB_ID_t>();} return var.as<gNB_ID_t>();}
+ gNB_ID_t const* get_gNB_ID() const { if(get_index() == 1) { return &var.as<gNB_ID_t>();} return nullptr; }
+ private:
+ void set_index(index_type i) {index = i; base::set();}
+ union union_type
+ {
+ char dummy1[sizeof(gNB_ID_t)];
+
+ };
+ asn::variant<sizeof(union_type)> 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<false,asn::one<4>>;
+ 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<true,asn::span<1, 160>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<GTPtunnelEndpoint_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<GTPtunnelEndpoint_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(transportLayerAddress);
+ v(gTP_TEID);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<2>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<GU_Group_ID_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<GU_Group_ID_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pLMN_Identity);
+ v(mME_Group_ID);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<GUGroupIDList_elm>
+{
+ static constexpr const char* name() {return "GUGroupIDList";}
+ using parent_t = asn::sequenceof<GUGroupIDList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxPools >>;
+
+};
+/*
+MME-Code ::= OCTET STRING (SIZE (1))
+*/
+
+struct MME_Code : asn::ostring<>
+{
+ using constraint_t = asn::constraints<false,asn::one<1>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<GUMMEI_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<GUMMEI_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(gU_Group_ID);
+ v(mME_Code);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<GlobalENB_ID_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<GlobalENB_ID_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pLMN_Identity);
+ v(eNB_ID);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<GlobalGNB_ID_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<GlobalGNB_ID_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pLMN_Identity);
+ v(gNB_ID);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<HWLoadIndicator_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<HWLoadIndicator_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(dLHWLoadIndicator);
+ v(uLHWLoadIndicator);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ NRrestrictioninEPSasSecondaryRAT& select_id_NRrestrictioninEPSasSecondaryRAT() { return set<NRrestrictioninEPSasSecondaryRAT>(1); }
+ NRrestrictioninEPSasSecondaryRAT const* get_id_NRrestrictioninEPSasSecondaryRAT() const { return get<NRrestrictioninEPSasSecondaryRAT>(1); }
+ CNTypeRestrictions& select_id_CNTypeRestrictions() { return set<CNTypeRestrictions>(2); }
+ CNTypeRestrictions const* get_id_CNTypeRestrictions() const { return get<CNTypeRestrictions>(2); }
+ NRrestrictionin5GS& select_id_NRrestrictionin5GS() { return set<NRrestrictionin5GS>(3); }
+ NRrestrictionin5GS const* get_id_NRrestrictionin5GS() const { return get<NRrestrictionin5GS>(3); }
+ bool is_unknown() const { return type == 4; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<NRrestrictioninEPSasSecondaryRAT>(); break;
+ case 2: var.destroy<CNTypeRestrictions>(); break;
+ case 3: var.destroy<NRrestrictionin5GS>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<NRrestrictioninEPSasSecondaryRAT>(1);
+ v.template operator()<CNTypeRestrictions>(2);
+ v.template operator()<NRrestrictionin5GS>(3);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<NRrestrictioninEPSasSecondaryRAT>()); return true;
+ case 2: v(var.as<CNTypeRestrictions>()); return true;
+ case 3: v(var.as<NRrestrictionin5GS>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(CNTypeRestrictions)];
+ char dummy2[sizeof(NRrestrictionin5GS)];
+ char dummy3[sizeof(NRrestrictioninEPSasSecondaryRAT)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<HandoverRestrictionList_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<HandoverRestrictionList_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(servingPLMN);
+ v(equivalentPLMNs);
+ v(forbiddenTAs);
+ v(forbiddenLAs);
+ v(forbiddenInterRATs);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<true,asn::one<16>>;
+ 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<false,asn::one<8>>;
+ 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<true,asn::span<1, 32>>;
+ 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<false,asn::span<32, 256>>;
+ 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<false,asn::span<0, 4095>>;
+ 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<false,asn::span<0, 40950>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ Time_UE_StayedInCell_EnhancedGranularity& select_id_Time_UE_StayedInCell_EnhancedGranularity() { return set<Time_UE_StayedInCell_EnhancedGranularity>(1); }
+ Time_UE_StayedInCell_EnhancedGranularity const* get_id_Time_UE_StayedInCell_EnhancedGranularity() const { return get<Time_UE_StayedInCell_EnhancedGranularity>(1); }
+ Cause& select_id_HO_cause() { return set<Cause>(2); }
+ Cause const* get_id_HO_cause() const { return get<Cause>(2); }
+ bool is_unknown() const { return type == 3; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<Time_UE_StayedInCell_EnhancedGranularity>(); break;
+ case 2: var.destroy<Cause>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<Time_UE_StayedInCell_EnhancedGranularity>(1);
+ v.template operator()<Cause>(2);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<Time_UE_StayedInCell_EnhancedGranularity>()); return true;
+ case 2: v(var.as<Cause>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(Cause)];
+ char dummy2[sizeof(Time_UE_StayedInCell_EnhancedGranularity)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<LastVisitedEUTRANCellInformation_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<LastVisitedEUTRANCellInformation_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(global_Cell_ID);
+ v(cellType);
+ v(time_UE_StayedInCell);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<undefined_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<undefined_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<undefined_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<undefined_t>(1);
+
+ }
+ undefined_t& select_undefined() { if(get_index() != 1) { clear(); set_index(1); return var.build<undefined_t>();} return var.as<undefined_t>();}
+ undefined_t const* get_undefined() const { if(get_index() == 1) { return &var.as<undefined_t>();} return nullptr; }
+ private:
+ void set_index(index_type i) {index = i; base::set();}
+ union union_type
+ {
+ char dummy1[sizeof(undefined_t)];
+
+ };
+ asn::variant<sizeof(union_type)> 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<e_UTRAN_Cell_t>(); break;
+ case 2: var.destroy<uTRAN_Cell_t>(); break;
+ case 3: var.destroy<gERAN_Cell_t>(); break;
+ case 4: var.destroy<nG_RAN_Cell_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<e_UTRAN_Cell_t>());
+ case 2: set_index(2); return v(var.build<uTRAN_Cell_t>());
+ case 3: set_index(3); return v(var.build<gERAN_Cell_t>());
+ case 4: set_index(4); return v(var.build<nG_RAN_Cell_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<e_UTRAN_Cell_t>());
+ case 2: return v(var.as<uTRAN_Cell_t>());
+ case 3: return v(var.as<gERAN_Cell_t>());
+ case 4: return v(var.as<nG_RAN_Cell_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<e_UTRAN_Cell_t>(1);
+ v.template operator()<uTRAN_Cell_t>(2);
+ v.template operator()<gERAN_Cell_t>(3);
+ v.template operator()<nG_RAN_Cell_t>(4);
+
+ }
+ e_UTRAN_Cell_t& select_e_UTRAN_Cell() { if(get_index() != 1) { clear(); set_index(1); return var.build<e_UTRAN_Cell_t>();} return var.as<e_UTRAN_Cell_t>();}
+ e_UTRAN_Cell_t const* get_e_UTRAN_Cell() const { if(get_index() == 1) { return &var.as<e_UTRAN_Cell_t>();} return nullptr; }
+ uTRAN_Cell_t& select_uTRAN_Cell() { if(get_index() != 2) { clear(); set_index(2); return var.build<uTRAN_Cell_t>();} return var.as<uTRAN_Cell_t>();}
+ uTRAN_Cell_t const* get_uTRAN_Cell() const { if(get_index() == 2) { return &var.as<uTRAN_Cell_t>();} return nullptr; }
+ gERAN_Cell_t& select_gERAN_Cell() { if(get_index() != 3) { clear(); set_index(3); return var.build<gERAN_Cell_t>();} return var.as<gERAN_Cell_t>();}
+ gERAN_Cell_t const* get_gERAN_Cell() const { if(get_index() == 3) { return &var.as<gERAN_Cell_t>();} return nullptr; }
+ nG_RAN_Cell_t& select_nG_RAN_Cell() { if(get_index() != 4) { clear(); set_index(4); return var.build<nG_RAN_Cell_t>();} return var.as<nG_RAN_Cell_t>();}
+ nG_RAN_Cell_t const* get_nG_RAN_Cell() const { if(get_index() == 4) { return &var.as<nG_RAN_Cell_t>();} 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<sizeof(union_type)> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<LocationReportingInformation_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<LocationReportingInformation_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(eventType);
+ v(reportArea);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<M1PeriodicReporting_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<M1PeriodicReporting_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(reportInterval);
+ v(reportAmount);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::span<0, 97>>;
+ 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<false,asn::span<0, 34>>;
+ 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<threshold_RSRP_t>(); break;
+ case 2: var.destroy<threshold_RSRQ_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<threshold_RSRP_t>());
+ case 2: set_index(2); return v(var.build<threshold_RSRQ_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<threshold_RSRP_t>());
+ case 2: return v(var.as<threshold_RSRQ_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<threshold_RSRP_t>(1);
+ v.template operator()<threshold_RSRQ_t>(2);
+
+ }
+ threshold_RSRP_t& select_threshold_RSRP() { if(get_index() != 1) { clear(); set_index(1); return var.build<threshold_RSRP_t>();} return var.as<threshold_RSRP_t>();}
+ threshold_RSRP_t const* get_threshold_RSRP() const { if(get_index() == 1) { return &var.as<threshold_RSRP_t>();} return nullptr; }
+ threshold_RSRQ_t& select_threshold_RSRQ() { if(get_index() != 2) { clear(); set_index(2); return var.build<threshold_RSRQ_t>();} return var.as<threshold_RSRQ_t>();}
+ threshold_RSRQ_t const* get_threshold_RSRQ() const { if(get_index() == 2) { return &var.as<threshold_RSRQ_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+M1ThresholdEventA2-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct M1ThresholdEventA2_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<M1ThresholdEventA2_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<M1ThresholdEventA2_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(measurementThreshold);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<M3Configuration_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<M3Configuration_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(m3period);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<M4Configuration_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<M4Configuration_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(m4period);
+ v(m4_links_to_log);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<M5Configuration_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<M5Configuration_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(m5period);
+ v(m5_links_to_log);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<M6Configuration_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<M6Configuration_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(m6report_interval);
+ v(m6delay_threshold);
+ v(m6_links_to_log);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<true,asn::span<1, 60>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<M7Configuration_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<M7Configuration_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(m7period);
+ v(m7_links_to_log);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<2>>;
+ 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<MBMS_Service_Area_Identity_List_elm>
+{
+ static constexpr const char* name() {return "MBMS-Service-Area-Identity-List";}
+ using parent_t = asn::sequenceof<MBMS_Service_Area_Identity_List_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofMBMSServiceAreaIdentities >>;
+
+};
+/*
+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<true,asn::span<0, 7>>;
+ 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<false,asn::one<6>>;
+ 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<oneframe_t>(); break;
+ case 2: var.destroy<fourframes_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<oneframe_t>());
+ case 2: set_index(2); return v(var.build<fourframes_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<oneframe_t>());
+ case 2: return v(var.as<fourframes_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<oneframe_t>(1);
+ v.template operator()<fourframes_t>(2);
+
+ }
+ oneframe_t& select_oneframe() { if(get_index() != 1) { clear(); set_index(1); return var.build<oneframe_t>();} return var.as<oneframe_t>();}
+ oneframe_t const* get_oneframe() const { if(get_index() == 1) { return &var.as<oneframe_t>();} return nullptr; }
+ fourframes_t& select_fourframes() { if(get_index() != 2) { clear(); set_index(2); return var.build<fourframes_t>();} return var.as<fourframes_t>();}
+ fourframes_t const* get_fourframes() const { if(get_index() == 2) { return &var.as<fourframes_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+MBSFN-Subframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct MBSFN_Subframe_Info_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<MBSFN_Subframe_Info_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<MBSFN_Subframe_Info_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(radioframeAllocationPeriod);
+ v(radioframeAllocationOffset);
+ v(subframeAllocation);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<MBSFN_Subframe_Infolist_elm>
+{
+ static constexpr const char* name() {return "MBSFN-Subframe-Infolist";}
+ using parent_t = asn::sequenceof<MBSFN_Subframe_Infolist_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofMBSFN >>;
+
+};
+/*
+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<false,asn::one<8>>;
+ 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<false,asn::one<8>>;
+ 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<MDTPLMNList_elm>
+{
+ static constexpr const char* name() {return "MDTPLMNList";}
+ using parent_t = asn::sequenceof<MDTPLMNList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofMDTPLMNs >>;
+
+};
+/*
+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<false,asn::span<1, 32>>;
+ 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<WLANMeasConfigNameList_elm>
+{
+ static constexpr const char* name() {return "WLANMeasConfigNameList";}
+ using parent_t = asn::sequenceof<WLANMeasConfigNameList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofWLANName >>;
+
+};
+/*
+WLANMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct WLANMeasurementConfiguration_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<WLANMeasurementConfiguration_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<WLANMeasurementConfiguration_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(wlanMeasConfig);
+ v(wlanMeasConfigNameList);
+ v(wlan_rssi);
+ v(wlan_rtt);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ M3Configuration& select_id_M3Configuration() { return set<M3Configuration>(1); }
+ M3Configuration const* get_id_M3Configuration() const { return get<M3Configuration>(1); }
+ M4Configuration& select_id_M4Configuration() { return set<M4Configuration>(2); }
+ M4Configuration const* get_id_M4Configuration() const { return get<M4Configuration>(2); }
+ M5Configuration& select_id_M5Configuration() { return set<M5Configuration>(3); }
+ M5Configuration const* get_id_M5Configuration() const { return get<M5Configuration>(3); }
+ MDT_Location_Info& select_id_MDT_Location_Info() { return set<MDT_Location_Info>(4); }
+ MDT_Location_Info const* get_id_MDT_Location_Info() const { return get<MDT_Location_Info>(4); }
+ MDTPLMNList& select_id_SignallingBasedMDTPLMNList() { return set<MDTPLMNList>(5); }
+ MDTPLMNList const* get_id_SignallingBasedMDTPLMNList() const { return get<MDTPLMNList>(5); }
+ M6Configuration& select_id_M6Configuration() { return set<M6Configuration>(6); }
+ M6Configuration const* get_id_M6Configuration() const { return get<M6Configuration>(6); }
+ M7Configuration& select_id_M7Configuration() { return set<M7Configuration>(7); }
+ M7Configuration const* get_id_M7Configuration() const { return get<M7Configuration>(7); }
+ BluetoothMeasurementConfiguration& select_id_BluetoothMeasurementConfiguration() { return set<BluetoothMeasurementConfiguration>(8); }
+ BluetoothMeasurementConfiguration const* get_id_BluetoothMeasurementConfiguration() const { return get<BluetoothMeasurementConfiguration>(8); }
+ WLANMeasurementConfiguration& select_id_WLANMeasurementConfiguration() { return set<WLANMeasurementConfiguration>(9); }
+ WLANMeasurementConfiguration const* get_id_WLANMeasurementConfiguration() const { return get<WLANMeasurementConfiguration>(9); }
+ bool is_unknown() const { return type == 10; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<M3Configuration>(); break;
+ case 2: var.destroy<M4Configuration>(); break;
+ case 3: var.destroy<M5Configuration>(); break;
+ case 4: var.destroy<MDT_Location_Info>(); break;
+ case 5: var.destroy<MDTPLMNList>(); break;
+ case 6: var.destroy<M6Configuration>(); break;
+ case 7: var.destroy<M7Configuration>(); break;
+ case 8: var.destroy<BluetoothMeasurementConfiguration>(); break;
+ case 9: var.destroy<WLANMeasurementConfiguration>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<M3Configuration>(1);
+ v.template operator()<M4Configuration>(2);
+ v.template operator()<M5Configuration>(3);
+ v.template operator()<MDT_Location_Info>(4);
+ v.template operator()<MDTPLMNList>(5);
+ v.template operator()<M6Configuration>(6);
+ v.template operator()<M7Configuration>(7);
+ v.template operator()<BluetoothMeasurementConfiguration>(8);
+ v.template operator()<WLANMeasurementConfiguration>(9);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<M3Configuration>()); return true;
+ case 2: v(var.as<M4Configuration>()); return true;
+ case 3: v(var.as<M5Configuration>()); return true;
+ case 4: v(var.as<MDT_Location_Info>()); return true;
+ case 5: v(var.as<MDTPLMNList>()); return true;
+ case 6: v(var.as<M6Configuration>()); return true;
+ case 7: v(var.as<M7Configuration>()); return true;
+ case 8: v(var.as<BluetoothMeasurementConfiguration>()); return true;
+ case 9: v(var.as<WLANMeasurementConfiguration>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} 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<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<MDT_Configuration_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<MDT_Configuration_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(mdt_Activation);
+ v(areaScopeOfMDT);
+ v(measurementsToActivate);
+ v(m1reportingTrigger);
+ v(m1thresholdeventA2);
+ v(m1periodicReporting);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<64>>;
+ 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<false,asn::one<36>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<NRCGI_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<NRCGI_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pLMN_Identity);
+ v(nRcellIdentifier);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ NRCGI& select_id_NRCGI() { return set<NRCGI>(1); }
+ NRCGI const* get_id_NRCGI() const { return get<NRCGI>(1); }
+ MeNBCoordinationAssistanceInformation& select_id_MeNBCoordinationAssistanceInformation() { return set<MeNBCoordinationAssistanceInformation>(2); }
+ MeNBCoordinationAssistanceInformation const* get_id_MeNBCoordinationAssistanceInformation() const { return get<MeNBCoordinationAssistanceInformation>(2); }
+ bool is_unknown() const { return type == 3; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<NRCGI>(); break;
+ case 2: var.destroy<MeNBCoordinationAssistanceInformation>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<NRCGI>(1);
+ v.template operator()<MeNBCoordinationAssistanceInformation>(2);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<NRCGI>()); return true;
+ case 2: v(var.as<MeNBCoordinationAssistanceInformation>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(MeNBCoordinationAssistanceInformation)];
+ char dummy2[sizeof(NRCGI)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true,asn::span<6, 4400>>;
+ 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<true,asn::span<6, 4400>>;
+ 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<MeNBResourceCoordinationInformationExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<MeNBResourceCoordinationInformationExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(eUTRA_Cell_ID);
+ v(uLCoordinationInformation);
+ v(dLCoordinationInformation);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<true,asn::span<1, 4095>>;
+ 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<false,asn::span<-20, 20>>;
+ 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<typename V> void decode(V& v)
+ {
+ v(handoverTriggerChange);
+
+ };
+ template<typename V> 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<false,asn::span<-20, 20>>;
+ 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<false,asn::span<-20, 20>>;
+ 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<typename V> void decode(V& v)
+ {
+ v(handoverTriggerChangeLowerLimit);
+ v(handoverTriggerChangeUpperLimit);
+
+ };
+ template<typename V> 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<MultibandInfoList_elm>
+{
+ static constexpr const char* name() {return "MultibandInfoList";}
+ using parent_t = asn::sequenceof<MultibandInfoList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofBands >>;
+
+};
+/*
+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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<NR_TxBW_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<NR_TxBW_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(nRSCS);
+ v(nRNRB);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::span<0, 3279165>>;
+ 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<SULInformation_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<SULInformation_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(sUL_ARFCN);
+ v(sUL_TxBW);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::span<0, 3279165>>;
+ 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<freqBandListNr_t_elm>
+ {
+ static constexpr const char* name() {return "freqBandListNr_t";}
+ using parent_t = asn::sequenceof<freqBandListNr_t_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofNrCellBands >>;
+
+ };
+ 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<NRFreqInfo_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<NRFreqInfo_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(nRARFCN);
+ v(freqBandListNr);
+ v(sULInformation);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::span<0, 1007>>;
+ 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<true,asn::one<16>>;
+ 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<true,asn::one<16>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<NRUESecurityCapabilities_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<NRUESecurityCapabilities_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(nRencryptionAlgorithms);
+ v(nRintegrityProtectionAlgorithms);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<true,asn::span<0, 503>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ TAC& select_id_NeighbourTAC() { return set<TAC>(1); }
+ TAC const* get_id_NeighbourTAC() const { return get<TAC>(1); }
+ EARFCNExtension& select_id_eARFCNExtension() { return set<EARFCNExtension>(2); }
+ EARFCNExtension const* get_id_eARFCNExtension() const { return get<EARFCNExtension>(2); }
+ bool is_unknown() const { return type == 3; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<TAC>(); break;
+ case 2: var.destroy<EARFCNExtension>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<TAC>(1);
+ v.template operator()<EARFCNExtension>(2);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<TAC>()); return true;
+ case 2: v(var.as<EARFCNExtension>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(EARFCNExtension)];
+ char dummy2[sizeof(TAC)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<Neighbour_Information_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<Neighbour_Information_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(eCGI);
+ v(pCI);
+ v(eARFCN);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<Neighbour_Information_elm>
+{
+ static constexpr const char* name() {return "Neighbour-Information";}
+ using parent_t = asn::sequenceof<Neighbour_Information_elm>;
+ using constraint_t = asn::constraints<false,asn::span<0, maxnoofNeighbours >>;
+
+};
+/*
+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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::span<0, 837>>;
+ 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<false,asn::span<0, 15>>;
+ 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<false,asn::span<0, 94>>;
+ 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<false,asn::span<0, 63>>;
+ 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<PRACH_Configuration_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<PRACH_Configuration_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(rootSequenceIndex);
+ v(zeroCorrelationIndex);
+ v(highSpeedFlag);
+ v(prach_FreqOffset);
+ v(prach_ConfigIndex);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<2>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ ProSeUEtoNetworkRelaying& select_id_ProSeUEtoNetworkRelaying() { return set<ProSeUEtoNetworkRelaying>(1); }
+ ProSeUEtoNetworkRelaying const* get_id_ProSeUEtoNetworkRelaying() const { return get<ProSeUEtoNetworkRelaying>(1); }
+ bool is_unknown() const { return type == 2; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<ProSeUEtoNetworkRelaying>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<ProSeUEtoNetworkRelaying>(1);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<ProSeUEtoNetworkRelaying>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(ProSeUEtoNetworkRelaying)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<ProSeAuthorized_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ProSeAuthorized_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(proSeDirectDiscovery);
+ v(proSeDirectCommunication);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<1, 320>>;
+ 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<true,asn::span<1, 20>>;
+ 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<ProtectedFootprintTimePattern_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ProtectedFootprintTimePattern_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(protectedFootprintTimePeriodicity);
+ v(protectedFootprintStartTime);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::one<84>>;
+ 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<true,asn::span<6, 110>>;
+ 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<ProtectedResourceList_Item_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ProtectedResourceList_Item_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(resourceType);
+ v(intraPRBProtectedResourceFootprint);
+ v(protectedFootprintFrequencyPattern);
+ v(protectedFootprintTimePattern);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<ProtectedResourceList_elm>
+{
+ static constexpr const char* name() {return "ProtectedResourceList";}
+ using parent_t = asn::sequenceof<ProtectedResourceList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofProtectedResourcePatterns >>;
+
+};
+/*
+ProtectedEUTRAResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+} -- Rapporteur: missing extension --
+*/
+
+struct ProtectedEUTRAResourceIndication_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::span<0, 1023>>;
+ 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<false,asn::span<0, 3>>;
+ 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<false,asn::span<1, 3>>;
+ 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<ProtectedEUTRAResourceIndication_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ProtectedEUTRAResourceIndication_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(activationSFN);
+ v(protectedResourceList);
+ v(mBSFNControlRegionLength);
+ v(pDCCHRegionLength);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<RLC_Status_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<RLC_Status_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(reestablishment_Indication);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<0, 97>>;
+ 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<RSRPMeasurementResult_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<RSRPMeasurementResult_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(rSRPCellID);
+ v(rSRPMeasured);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<RSRPMeasurementResult_elm>
+{
+ static constexpr const char* name() {return "RSRPMeasurementResult";}
+ using parent_t = asn::sequenceof<RSRPMeasurementResult_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxCellReport >>;
+
+};
+/*
+RSRPMRList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ { ID id-UEID CRITICALITY ignore EXTENSION UEID PRESENCE optional},
+ ...
+}
+*/
+
+struct RSRPMRList_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ UEID& select_id_UEID() { return set<UEID>(1); }
+ UEID const* get_id_UEID() const { return get<UEID>(1); }
+ bool is_unknown() const { return type == 2; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<UEID>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<UEID>(1);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<UEID>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(UEID)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<RSRPMRList_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<RSRPMRList_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(rSRPMeasurementResult);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<RSRPMRList_elm>
+{
+ static constexpr const char* name() {return "RSRPMRList";}
+ using parent_t = asn::sequenceof<RSRPMRList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxUEReport >>;
+
+};
+/*
+UL-GBR-PRB-usage::= INTEGER (0..100)
+*/
+
+struct UL_GBR_PRB_usage : asn::integer<>
+{
+ using constraint_t = asn::constraints<false,asn::span<0, 100>>;
+ 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<false,asn::span<0, 100>>;
+ 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<false,asn::span<0, 100>>;
+ 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<false,asn::span<0, 100>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ DL_scheduling_PDCCH_CCE_usage& select_id_DL_scheduling_PDCCH_CCE_usage() { return set<DL_scheduling_PDCCH_CCE_usage>(1); }
+ DL_scheduling_PDCCH_CCE_usage const* get_id_DL_scheduling_PDCCH_CCE_usage() const { return get<DL_scheduling_PDCCH_CCE_usage>(1); }
+ UL_scheduling_PDCCH_CCE_usage& select_id_UL_scheduling_PDCCH_CCE_usage() { return set<UL_scheduling_PDCCH_CCE_usage>(2); }
+ UL_scheduling_PDCCH_CCE_usage const* get_id_UL_scheduling_PDCCH_CCE_usage() const { return get<UL_scheduling_PDCCH_CCE_usage>(2); }
+ bool is_unknown() const { return type == 3; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<DL_scheduling_PDCCH_CCE_usage>(); break;
+ case 2: var.destroy<UL_scheduling_PDCCH_CCE_usage>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<DL_scheduling_PDCCH_CCE_usage>(1);
+ v.template operator()<UL_scheduling_PDCCH_CCE_usage>(2);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<DL_scheduling_PDCCH_CCE_usage>()); return true;
+ case 2: v(var.as<UL_scheduling_PDCCH_CCE_usage>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(DL_scheduling_PDCCH_CCE_usage)];
+ char dummy2[sizeof(UL_scheduling_PDCCH_CCE_usage)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<RadioResourceStatus_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<RadioResourceStatus_ExtIEs>;
+ 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<typename V> 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<typename V> 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<false,asn::span<1, 16384>>;
+ 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<false,asn::span<1, 131072>>;
+ 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<false,asn::one<4096>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ EnhancedRNTP& select_id_enhancedRNTP() { return set<EnhancedRNTP>(1); }
+ EnhancedRNTP const* get_id_enhancedRNTP() const { return get<EnhancedRNTP>(1); }
+ bool is_unknown() const { return type == 2; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<EnhancedRNTP>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<EnhancedRNTP>(1);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<EnhancedRNTP>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(EnhancedRNTP)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true,asn::span<6, 110>>;
+ 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<true,asn::span<0, 3>>;
+ 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<true,asn::span<0, 4>>;
+ 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<RelativeNarrowbandTxPower_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<RelativeNarrowbandTxPower_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(rNTP_PerPRB);
+ v(rNTP_Threshold);
+ v(numberOfCellSpecificAntennaPorts);
+ v(p_B);
+ v(pDCCH_InterferenceImpact);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<32>>;
+ 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<false,asn::one<40>>;
+ static constexpr const char* name() {return "non_truncated_t";}
+ using parent_t = asn::bstring<>;
+
+ };
+
+ struct truncated_t : asn::bstring<>
+ {
+ using constraint_t = asn::constraints<false,asn::one<24>>;
+ static constexpr const char* name() {return "truncated_t";}
+ using parent_t = asn::bstring<>;
+
+ };
+
+ void clear()
+ {
+ switch(get_index())
+ {
+ case 1: var.destroy<non_truncated_t>(); break;
+ case 2: var.destroy<truncated_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<non_truncated_t>());
+ case 2: set_index(2); return v(var.build<truncated_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<non_truncated_t>());
+ case 2: return v(var.as<truncated_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<non_truncated_t>(1);
+ v.template operator()<truncated_t>(2);
+
+ }
+ non_truncated_t& select_non_truncated() { if(get_index() != 1) { clear(); set_index(1); return var.build<non_truncated_t>();} return var.as<non_truncated_t>();}
+ non_truncated_t const* get_non_truncated() const { if(get_index() == 1) { return &var.as<non_truncated_t>();} return nullptr; }
+ truncated_t& select_truncated() { if(get_index() != 2) { clear(); set_index(2); return var.build<truncated_t>();} return var.as<truncated_t>();}
+ truncated_t const* get_truncated() const { if(get_index() == 2) { return &var.as<truncated_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+S1TNLLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct S1TNLLoadIndicator_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<S1TNLLoadIndicator_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<S1TNLLoadIndicator_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(dLS1TNLLoadIndicator);
+ v(uLS1TNLLoadIndicator);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::one<7>>;
+ 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<true,asn::span<0, 86399>>;
+ 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<true,asn::span<0, 86399>>;
+ 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<ScheduledCommunicationTime_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ScheduledCommunicationTime_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(dayofWeek);
+ v(timeofDayStart);
+ v(timeofDayEnd);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<256>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<SecondaryRATUsageReport_Item_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<SecondaryRATUsageReport_Item_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(e_RAB_ID);
+ v(secondaryRATType);
+ v(e_RABUsageReportList);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_IES::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Value_t() {clear();}
+ size_t get_index() const {return type;}
+ SecondaryRATUsageReport_Item& select_id_SecondaryRATUsageReport_Item() { return set<SecondaryRATUsageReport_Item>(1); }
+ SecondaryRATUsageReport_Item const* get_id_SecondaryRATUsageReport_Item() const { return get<SecondaryRATUsageReport_Item>(1); }
+ bool is_unknown() const { return type == 2; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<SecondaryRATUsageReport_Item>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<SecondaryRATUsageReport_Item>(1);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<SecondaryRATUsageReport_Item>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(SecondaryRATUsageReport_Item)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<SecondaryRATUsageReport_ItemIEs>
+{
+ static constexpr const char* name() {return "SecondaryRATUsageReportList_elm";}
+ using parent_t = ProtocolIE_Single_Container<SecondaryRATUsageReport_ItemIEs>;
+
+};
+struct SecondaryRATUsageReportList : asn::sequenceof<SecondaryRATUsageReportList_elm>
+{
+ static constexpr const char* name() {return "SecondaryRATUsageReportList";}
+ using parent_t = asn::sequenceof<SecondaryRATUsageReportList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofBearers >>;
+
+};
+/*
+ServedCell-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
+ ...
+}
+*/
+
+struct ServedCell_ExtIEs
+{
+ struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ Number_of_Antennaports& select_id_Number_of_Antennaports() { return set<Number_of_Antennaports>(1); }
+ Number_of_Antennaports const* get_id_Number_of_Antennaports() const { return get<Number_of_Antennaports>(1); }
+ PRACH_Configuration& select_id_PRACH_Configuration() { return set<PRACH_Configuration>(2); }
+ PRACH_Configuration const* get_id_PRACH_Configuration() const { return get<PRACH_Configuration>(2); }
+ MBSFN_Subframe_Infolist& select_id_MBSFN_Subframe_Info() { return set<MBSFN_Subframe_Infolist>(3); }
+ MBSFN_Subframe_Infolist const* get_id_MBSFN_Subframe_Info() const { return get<MBSFN_Subframe_Infolist>(3); }
+ CSG_Id& select_id_CSG_Id() { return set<CSG_Id>(4); }
+ CSG_Id const* get_id_CSG_Id() const { return get<CSG_Id>(4); }
+ MBMS_Service_Area_Identity_List& select_id_MBMS_Service_Area_List() { return set<MBMS_Service_Area_Identity_List>(5); }
+ MBMS_Service_Area_Identity_List const* get_id_MBMS_Service_Area_List() const { return get<MBMS_Service_Area_Identity_List>(5); }
+ MultibandInfoList& select_id_MultibandInfoList() { return set<MultibandInfoList>(6); }
+ MultibandInfoList const* get_id_MultibandInfoList() const { return get<MultibandInfoList>(6); }
+ FreqBandIndicatorPriority& select_id_FreqBandIndicatorPriority() { return set<FreqBandIndicatorPriority>(7); }
+ FreqBandIndicatorPriority const* get_id_FreqBandIndicatorPriority() const { return get<FreqBandIndicatorPriority>(7); }
+ BandwidthReducedSI& select_id_BandwidthReducedSI() { return set<BandwidthReducedSI>(8); }
+ BandwidthReducedSI const* get_id_BandwidthReducedSI() const { return get<BandwidthReducedSI>(8); }
+ ProtectedEUTRAResourceIndication& select_id_ProtectedEUTRAResourceIndication() { return set<ProtectedEUTRAResourceIndication>(9); }
+ ProtectedEUTRAResourceIndication const* get_id_ProtectedEUTRAResourceIndication() const { return get<ProtectedEUTRAResourceIndication>(9); }
+ bool is_unknown() const { return type == 10; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<Number_of_Antennaports>(); break;
+ case 2: var.destroy<PRACH_Configuration>(); break;
+ case 3: var.destroy<MBSFN_Subframe_Infolist>(); break;
+ case 4: var.destroy<CSG_Id>(); break;
+ case 5: var.destroy<MBMS_Service_Area_Identity_List>(); break;
+ case 6: var.destroy<MultibandInfoList>(); break;
+ case 7: var.destroy<FreqBandIndicatorPriority>(); break;
+ case 8: var.destroy<BandwidthReducedSI>(); break;
+ case 9: var.destroy<ProtectedEUTRAResourceIndication>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<Number_of_Antennaports>(1);
+ v.template operator()<PRACH_Configuration>(2);
+ v.template operator()<MBSFN_Subframe_Infolist>(3);
+ v.template operator()<CSG_Id>(4);
+ v.template operator()<MBMS_Service_Area_Identity_List>(5);
+ v.template operator()<MultibandInfoList>(6);
+ v.template operator()<FreqBandIndicatorPriority>(7);
+ v.template operator()<BandwidthReducedSI>(8);
+ v.template operator()<ProtectedEUTRAResourceIndication>(9);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<Number_of_Antennaports>()); return true;
+ case 2: v(var.as<PRACH_Configuration>()); return true;
+ case 3: v(var.as<MBSFN_Subframe_Infolist>()); return true;
+ case 4: v(var.as<CSG_Id>()); return true;
+ case 5: v(var.as<MBMS_Service_Area_Identity_List>()); return true;
+ case 6: v(var.as<MultibandInfoList>()); return true;
+ case 7: v(var.as<FreqBandIndicatorPriority>()); return true;
+ case 8: v(var.as<BandwidthReducedSI>()); return true;
+ case 9: v(var.as<ProtectedEUTRAResourceIndication>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} 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<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<ServedCell_Information_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ServedCell_Information_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pCI);
+ v(cellId);
+ v(tAC);
+ v(broadcastPLMNs);
+ v(eUTRA_Mode_Info);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<ServedCell_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ServedCell_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(servedCellInfo);
+ v(neighbour_Info);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<ServedCells_elm>
+{
+ static constexpr const char* name() {return "ServedCells";}
+ using parent_t = asn::sequenceof<ServedCells_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxCellineNB >>;
+
+};
+/*
+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<false,asn::span<0, 4294967295>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ ECGI& select_id_ECGI() { return set<ECGI>(1); }
+ ECGI const* get_id_ECGI() const { return get<ECGI>(1); }
+ SgNBCoordinationAssistanceInformation& select_id_SgNBCoordinationAssistanceInformation() { return set<SgNBCoordinationAssistanceInformation>(2); }
+ SgNBCoordinationAssistanceInformation const* get_id_SgNBCoordinationAssistanceInformation() const { return get<SgNBCoordinationAssistanceInformation>(2); }
+ bool is_unknown() const { return type == 3; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<ECGI>(); break;
+ case 2: var.destroy<SgNBCoordinationAssistanceInformation>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<ECGI>(1);
+ v.template operator()<SgNBCoordinationAssistanceInformation>(2);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<ECGI>()); return true;
+ case 2: v(var.as<SgNBCoordinationAssistanceInformation>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(ECGI)];
+ char dummy2[sizeof(SgNBCoordinationAssistanceInformation)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true,asn::span<6, 4400>>;
+ 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<true,asn::span<6, 4400>>;
+ 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<SgNBResourceCoordinationInformationExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<SgNBResourceCoordinationInformationExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(nR_CGI);
+ v(uLCoordinationInformation);
+ v(dLCoordinationInformation);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<256>>;
+ 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<false,asn::one<16>>;
+ 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<false,asn::span<1, maxCellineNB >>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<SplitSRB_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<SplitSRB_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(rrcContainer);
+ v(srbType);
+ v(deliveryStatus);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::span<1, 256>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true,asn::span<1, 3600>>;
+ 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<Subscription_Based_UE_DifferentiationInfo_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<Subscription_Based_UE_DifferentiationInfo_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(periodicCommunicationIndicator);
+ v(periodicTime);
+ v(scheduledCommunicationTime);
+ v(stationaryIndication);
+ v(trafficProfile);
+ v(batteryIndication);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<true,asn::span<1, 160>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ ServiceType& select_id_serviceType() { return set<ServiceType>(1); }
+ ServiceType const* get_id_serviceType() const { return get<ServiceType>(1); }
+ bool is_unknown() const { return type == 2; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<ServiceType>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<ServiceType>(1);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<ServiceType>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(ServiceType)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<false,asn::span<1, 1000>>;
+ 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<UEAppLayerMeasConfig_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<UEAppLayerMeasConfig_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(containerForAppLayerMeasConfig);
+ v(areaScopeOfQMC);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ MDT_Configuration& select_id_MDTConfiguration() { return set<MDT_Configuration>(1); }
+ MDT_Configuration const* get_id_MDTConfiguration() const { return get<MDT_Configuration>(1); }
+ UEAppLayerMeasConfig& select_id_UEAppLayerMeasConfig() { return set<UEAppLayerMeasConfig>(2); }
+ UEAppLayerMeasConfig const* get_id_UEAppLayerMeasConfig() const { return get<UEAppLayerMeasConfig>(2); }
+ bool is_unknown() const { return type == 3; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<MDT_Configuration>(); break;
+ case 2: var.destroy<UEAppLayerMeasConfig>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<MDT_Configuration>(1);
+ v.template operator()<UEAppLayerMeasConfig>(2);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<MDT_Configuration>()); return true;
+ case 2: v(var.as<UEAppLayerMeasConfig>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(MDT_Configuration)];
+ char dummy2[sizeof(UEAppLayerMeasConfig)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<TraceActivation_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<TraceActivation_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(eUTRANTraceID);
+ v(interfacesToTrace);
+ v(traceDepth);
+ v(traceCollectionEntityIPAddress);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<Tunnel_Information_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<Tunnel_Information_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(transportLayerAddress);
+ v(uDP_Port_Number);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<UE_HistoryInformation_elm>
+{
+ static constexpr const char* name() {return "UE-HistoryInformation";}
+ using parent_t = asn::sequenceof<UE_HistoryInformation_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxnoofCells >>;
+
+};
+/*
+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<false,asn::span<0, 4294967295>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<false,asn::span<0, 4095>>;
+ 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<true,asn::span<0, 4095>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<true>
+ {
+ ~Extension_t() {clear();}
+ size_t get_index() const {return type;}
+ ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateDownlink() { return set<ExtendedBitRate>(1); }
+ ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateDownlink() const { return get<ExtendedBitRate>(1); }
+ ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateUplink() { return set<ExtendedBitRate>(2); }
+ ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateUplink() const { return get<ExtendedBitRate>(2); }
+ bool is_unknown() const { return type == 3; }
+ void clear()
+ {
+ switch(type)
+ {
+ case 1: var.destroy<ExtendedBitRate>(); break;
+ case 2: var.destroy<ExtendedBitRate>(); break;
+ }
+ type = 0; ref_nested().clear();
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<ExtendedBitRate>(1);
+ v.template operator()<ExtendedBitRate>(2);
+
+ }
+ protected:
+ template<typename V> 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<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) return false;
+ switch(type)
+ {
+ case 1: v(var.as<ExtendedBitRate>()); return true;
+ case 2: v(var.as<ExtendedBitRate>()); return true;
+ }
+ return false;
+
+ }
+ private:
+ template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
+ template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
+ union union_type
+ {
+ char dummy1[sizeof(ExtendedBitRate)];
+
+ };
+ asn::variant<sizeof(union_type)> var;
+ size_t type {0};
+
+ };
+ struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> 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<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<UEAggregate_MaximumBitrate_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<UEAggregate_MaximumBitrate_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(uEaggregateMaximumBitRateDownlink);
+ v(uEaggregateMaximumBitRateUplink);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<UENRMeasurement_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<UENRMeasurement_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(uENRMeasurements);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<UESecurityCapabilities_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<UESecurityCapabilities_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(encryptionAlgorithms);
+ v(integrityProtectionAlgorithms);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(uESidelinkAggregateMaximumBitRate);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<UEsToBeResetList_Item_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<UEsToBeResetList_Item_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(meNB_ID);
+ v(meNB_ID_ext);
+ v(sgNB_ID);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<UEsToBeResetList_elm>
+{
+ static constexpr const char* name() {return "UEsToBeResetList";}
+ using parent_t = asn::sequenceof<UEsToBeResetList_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxUEsinengNBDU >>;
+
+};
+/*
+UL-HighInterferenceIndication ::= BIT STRING (SIZE(1..110, ...))
+*/
+
+struct UL_HighInterferenceIndication : asn::bstring<>
+{
+ using constraint_t = asn::constraints<true,asn::span<1, 110>>;
+ 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<UL_HighInterferenceIndicationInfo_Item_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<UL_HighInterferenceIndicationInfo_Item_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(target_Cell_ID);
+ v(ul_interferenceindication);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<UL_HighInterferenceIndicationInfo_elm>
+{
+ static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo";}
+ using parent_t = asn::sequenceof<UL_HighInterferenceIndicationInfo_elm>;
+ using constraint_t = asn::constraints<false,asn::span<1, maxCellineNB >>;
+
+};
+/*
+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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<ULConfiguration_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<ULConfiguration_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(uL_PDCP);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<X2AP_PROTOCOL_EXTENSION::id_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(size_t index, V& v) const
+ {
+ if(index != type) {return false;} return v(ref_nested());
+
+ }
+ private:
+ size_t type {0};
+
+ };
+ struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<true>
+ {
+ ~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<typename V> static inline void enumerate(V& v)
+ {
+
+ }
+ protected:
+ template<typename V> 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<typename V> 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<X2AP_PROTOCOL_EXTENSION::presence_t, true>
+ {
+ 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<typename V> bool decode(V& v)
+ {
+ clear();
+ if(!v(ref_nested())) return false;
+ { type = 1; return true;}
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ return v(ref_nested());
+
+ }
+ protected:
+ template<typename V> bool decode(size_t index, V& v)
+ {
+ clear();
+ switch(index)
+ {
+ case 1: type = 1; return v(ref_nested());
+ ref_nested().clear();
+ }
+ return false;
+
+ }
+ template<typename V> 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<V2XServicesAuthorized_ExtIEs>
+ {
+ static constexpr const char* name() {return "iE_Extensions_t";}
+ using parent_t = ProtocolExtensionContainer<V2XServicesAuthorized_ExtIEs>;
+ 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<typename V> void decode(V& v)
+ {
+ v(vehicleUE);
+ v(pedestrianUE);
+ v(iE_Extensions);
+
+ };
+ template<typename V> 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<false,asn::one<3>>;
+ 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<false,asn::one<24>>;
+ 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<typename V> void decode(V& v)
+ {
+ v(pLMN_Identity);
+ v(shortWTID);
+
+ };
+ template<typename V> 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<false,asn::one<48>>;
+ 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<wTID_Type1_t>(); break;
+ case 2: var.destroy<wTID_Type2_t>(); break;
+ }
+ index = 0;
+ base::clear();
+ }
+ template<typename V> bool decode(size_t idx, V& v)
+ {
+ clear();
+ switch(idx)
+ {
+ case 1: set_index(1); return v(var.build<wTID_Type1_t>());
+ case 2: set_index(2); return v(var.build<wTID_Type2_t>());
+ }
+ return false;
+
+ }
+ template<typename V> bool encode(V& v) const
+ {
+ switch(get_index())
+ {
+ case 1: return v(var.as<wTID_Type1_t>());
+ case 2: return v(var.as<wTID_Type2_t>());
+ }
+ return false;
+ }
+ template<typename V> static inline void enumerate(V& v)
+ {
+ v.template operator()<wTID_Type1_t>(1);
+ v.template operator()<wTID_Type2_t>(2);
+
+ }
+ wTID_Type1_t& select_wTID_Type1() { if(get_index() != 1) { clear(); set_index(1); return var.build<wTID_Type1_t>();} return var.as<wTID_Type1_t>();}
+ wTID_Type1_t const* get_wTID_Type1() const { if(get_index() == 1) { return &var.as<wTID_Type1_t>();} return nullptr; }
+ wTID_Type2_t& select_wTID_Type2() { if(get_index() != 2) { clear(); set_index(2); return var.build<wTID_Type2_t>();} return var.as<wTID_Type2_t>();}
+ wTID_Type2_t const* get_wTID_Type2() const { if(get_index() == 2) { return &var.as<wTID_Type2_t>();} 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<sizeof(union_type)> var;
+ index_type index {0};
+};
+/*
+X2BenefitValue ::= INTEGER (1..8, ...)
+*/
+
+struct X2BenefitValue : asn::integer<>
+{
+ using constraint_t = asn::constraints<true,asn::span<1, 8>>;
+ static constexpr const char* name() {return "X2BenefitValue";}
+ using parent_t = asn::integer<>;
+
+};