/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "E2SM-RC-IEs"
 * 	found in "e2sm-rc-nov2021.asn"
 * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -pdu=auto -gen-PER -gen-OER -no-gen-example -D .`
 */

#include "InterfaceID-F1.h"

asn_TYPE_member_t asn_MBR_InterfaceID_F1_1[] = {
	{ ATF_NOFLAGS, 0, offsetof(struct InterfaceID_F1, globalGNB_ID),
		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
		-1,	/* IMPLICIT tag at current level */
		&asn_DEF_GlobalGNB_ID,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		"globalGNB-ID"
		},
	{ ATF_NOFLAGS, 0, offsetof(struct InterfaceID_F1, gNB_DU_ID),
		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
		-1,	/* IMPLICIT tag at current level */
		&asn_DEF_GNB_DU_ID,
		0,
		{ 0, 0, 0 },
		0, 0, /* No default value */
		"gNB-DU-ID"
		},
};
static const ber_tlv_tag_t asn_DEF_InterfaceID_F1_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_F1_tag2el_1[] = {
    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* globalGNB-ID */
    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-DU-ID */
};
asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_F1_specs_1 = {
	sizeof(struct InterfaceID_F1),
	offsetof(struct InterfaceID_F1, _asn_ctx),
	asn_MAP_InterfaceID_F1_tag2el_1,
	2,	/* Count of tags in the map */
	0, 0, 0,	/* Optional elements (not needed) */
	2,	/* First extension addition */
};
asn_TYPE_descriptor_t asn_DEF_InterfaceID_F1 = {
	"InterfaceID-F1",
	"InterfaceID-F1",
	&asn_OP_SEQUENCE,
	asn_DEF_InterfaceID_F1_tags_1,
	sizeof(asn_DEF_InterfaceID_F1_tags_1)
		/sizeof(asn_DEF_InterfaceID_F1_tags_1[0]), /* 1 */
	asn_DEF_InterfaceID_F1_tags_1,	/* Same as above */
	sizeof(asn_DEF_InterfaceID_F1_tags_1)
		/sizeof(asn_DEF_InterfaceID_F1_tags_1[0]), /* 1 */
	{ 0, 0, SEQUENCE_constraint },
	asn_MBR_InterfaceID_F1_1,
	2,	/* Elements count */
	&asn_SPC_InterfaceID_F1_specs_1	/* Additional specs */
};

