diff --git a/src/sabp/SABP_Error-Indication.c b/src/sabp/SABP_Error-Indication.c
new file mode 100644
index 0000000..78e62ad
--- /dev/null
+++ b/src/sabp/SABP_Error-Indication.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "SABP-PDU"
+ * 	found in "../../asn1/sabp/SABP-PDU.asn"
+ */
+
+#include <osmocom/sabp/SABP_Error-Indication.h>
+
+static int
+memb_error_Indication_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_error_Indication_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_error_Indication_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_error_Indication_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_SABP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_error_Indication_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_error_Indication_ies_specs_2 = {
+	sizeof(struct error_Indication_ies),
+	offsetof(struct error_Indication_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_error_Indication_ies_2 = {
+	"error-Indication-ies",
+	"error-Indication-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_error_Indication_ies_tags_2,
+	sizeof(asn_DEF_error_Indication_ies_tags_2)
+		/sizeof(asn_DEF_error_Indication_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_error_Indication_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_error_Indication_ies_tags_2)
+		/sizeof(asn_DEF_error_Indication_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_error_Indication_ies_constr_2,
+	asn_MBR_error_Indication_ies_2,
+	1,	/* Single element */
+	&asn_SPC_error_Indication_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_SABP_Error_Indication_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct SABP_Error_Indication, error_Indication_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_error_Indication_ies_2,
+		memb_error_Indication_ies_constraint_1,
+		&asn_PER_memb_error_Indication_ies_constr_2,
+		0,
+		"error-Indication-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_SABP_Error_Indication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SABP_Error_Indication_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* error-Indication-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_SABP_Error_Indication_specs_1 = {
+	sizeof(struct SABP_Error_Indication),
+	offsetof(struct SABP_Error_Indication, _asn_ctx),
+	asn_MAP_SABP_Error_Indication_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_SABP_Error_Indication = {
+	"SABP_Error-Indication",
+	"SABP_Error-Indication",
+	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_SABP_Error_Indication_tags_1,
+	sizeof(asn_DEF_SABP_Error_Indication_tags_1)
+		/sizeof(asn_DEF_SABP_Error_Indication_tags_1[0]), /* 1 */
+	asn_DEF_SABP_Error_Indication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_SABP_Error_Indication_tags_1)
+		/sizeof(asn_DEF_SABP_Error_Indication_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_SABP_Error_Indication_1,
+	1,	/* Elements count */
+	&asn_SPC_SABP_Error_Indication_specs_1	/* Additional specs */
+};
+
