/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "RSPRO"
 * 	found in "../../asn1/RSPRO.asn"
 */

#include <osmocom/rspro/RemoveMappingReq.h>

static asn_TYPE_member_t asn_MBR_RemoveMappingReq_1[] = {
	{ ATF_NOFLAGS, 0, offsetof(struct RemoveMappingReq, client),
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_ClientSlot,
		0,	/* Defer constraints checking to the member type */
		0,	/* PER is not compiled, use -gen-PER */
		0,
		"client"
		},
	{ ATF_NOFLAGS, 0, offsetof(struct RemoveMappingReq, bank),
		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
		0,
		&asn_DEF_BankSlot,
		0,	/* Defer constraints checking to the member type */
		0,	/* PER is not compiled, use -gen-PER */
		0,
		"bank"
		},
};
static const ber_tlv_tag_t asn_DEF_RemoveMappingReq_tags_1[] = {
	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static const asn_TYPE_tag2member_t asn_MAP_RemoveMappingReq_tag2el_1[] = {
    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* client */
    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* bank */
};
static asn_SEQUENCE_specifics_t asn_SPC_RemoveMappingReq_specs_1 = {
	sizeof(struct RemoveMappingReq),
	offsetof(struct RemoveMappingReq, _asn_ctx),
	asn_MAP_RemoveMappingReq_tag2el_1,
	2,	/* Count of tags in the map */
	0, 0, 0,	/* Optional elements (not needed) */
	1,	/* Start extensions */
	3	/* Stop extensions */
};
asn_TYPE_descriptor_t asn_DEF_RemoveMappingReq = {
	"RemoveMappingReq",
	"RemoveMappingReq",
	SEQUENCE_free,
	SEQUENCE_print,
	SEQUENCE_constraint,
	SEQUENCE_decode_ber,
	SEQUENCE_encode_der,
	SEQUENCE_decode_xer,
	SEQUENCE_encode_xer,
	0, 0,	/* No UPER support, use "-gen-PER" to enable */
	0, 0,	/* No APER support, use "-gen-PER" to enable */
	0,	/* Use generic outmost tag fetcher */
	asn_DEF_RemoveMappingReq_tags_1,
	sizeof(asn_DEF_RemoveMappingReq_tags_1)
		/sizeof(asn_DEF_RemoveMappingReq_tags_1[0]), /* 1 */
	asn_DEF_RemoveMappingReq_tags_1,	/* Same as above */
	sizeof(asn_DEF_RemoveMappingReq_tags_1)
		/sizeof(asn_DEF_RemoveMappingReq_tags_1[0]), /* 1 */
	0,	/* No PER visible constraints */
	asn_MBR_RemoveMappingReq_1,
	2,	/* Elements count */
	&asn_SPC_RemoveMappingReq_specs_1	/* Additional specs */
};

