diff --git a/src/ranap/RANAP_SecurityModeCommand.c b/src/ranap/RANAP_SecurityModeCommand.c
new file mode 100644
index 0000000..858ad7e
--- /dev/null
+++ b/src/ranap/RANAP_SecurityModeCommand.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_SecurityModeCommand.h"
+
+static int
+memb_securityModeCommand_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_securityModeCommand_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_securityModeCommand_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_securityModeCommand_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_securityModeCommand_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_securityModeCommand_ies_specs_2 = {
+	sizeof(struct securityModeCommand_ies),
+	offsetof(struct securityModeCommand_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_securityModeCommand_ies_2 = {
+	"securityModeCommand-ies",
+	"securityModeCommand-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_securityModeCommand_ies_tags_2,
+	sizeof(asn_DEF_securityModeCommand_ies_tags_2)
+		/sizeof(asn_DEF_securityModeCommand_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_securityModeCommand_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_securityModeCommand_ies_tags_2)
+		/sizeof(asn_DEF_securityModeCommand_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_securityModeCommand_ies_constr_2,
+	asn_MBR_securityModeCommand_ies_2,
+	1,	/* Single element */
+	&asn_SPC_securityModeCommand_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_SecurityModeCommand_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_SecurityModeCommand, securityModeCommand_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_securityModeCommand_ies_2,
+		memb_securityModeCommand_ies_constraint_1,
+		&asn_PER_memb_securityModeCommand_ies_constr_2,
+		0,
+		"securityModeCommand-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_SecurityModeCommand_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_SecurityModeCommand_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* securityModeCommand-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_SecurityModeCommand_specs_1 = {
+	sizeof(struct RANAP_SecurityModeCommand),
+	offsetof(struct RANAP_SecurityModeCommand, _asn_ctx),
+	asn_MAP_RANAP_SecurityModeCommand_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_SecurityModeCommand = {
+	"RANAP_SecurityModeCommand",
+	"RANAP_SecurityModeCommand",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_SecurityModeCommand_tags_1,
+	sizeof(asn_DEF_RANAP_SecurityModeCommand_tags_1)
+		/sizeof(asn_DEF_RANAP_SecurityModeCommand_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_SecurityModeCommand_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_SecurityModeCommand_tags_1)
+		/sizeof(asn_DEF_RANAP_SecurityModeCommand_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_SecurityModeCommand_1,
+	1,	/* Elements count */
+	&asn_SPC_RANAP_SecurityModeCommand_specs_1	/* Additional specs */
+};
+
