void doit (void) { int i; break_on_error = 1; // asn1_xer_print = 1; // asn_debug = 1; for (i = 0; i < sizeof(s1ap_test) / sizeof(s1ap_test_t); i++) { struct s1ap_message_s message; uint8_t *buffer; uint32_t length; memset(&message, 0, sizeof(struct s1ap_message_s)); if (s1ap_test[i].originating == ENB) { /* eNB originated procedure -> USE MME decoder */ if (s1ap_mme_decode_pdu(&message, s1ap_test[i].buffer, s1ap_test[i].buf_len) < 0) { fail("Failed to decode %s\n", s1ap_test[i].procedure_name); } else { success("Decoded %s correctly\n", s1ap_test[i].procedure_name); } } else { /* MME originated procedure -> USE eNB decoder */ if (s1ap_eNB_decode_pdu(&message, s1ap_test[i].buffer, s1ap_test[i].buf_len) < 0) { fail("Failed to decode %s\n", s1ap_test[i].procedure_name); } else { success("Decoded %s correctly\n", s1ap_test[i].procedure_name); } } if (s1ap_test[i].originating == ENB) { /* eNB originated procedure -> USE eNB encoder */ if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { fail("Failed to decode %s\n", s1ap_test[i].procedure_name); } else { success("Encoded %s correctly\n", s1ap_test[i].procedure_name); } } else { /* MME originated procedure -> USE mme encoder */ if (s1ap_mme_encode_pdu(&message, &buffer, &length) < 0) { fail("Failed to encode %s\n", s1ap_test[i].procedure_name); } else { success("Encoded %s correctly\n", s1ap_test[i].procedure_name); } } if (compare_buffer(buffer, length, s1ap_test[i].buffer, s1ap_test[i].buf_len) < 0) { fail("Mismatch in buffers\n"); } } }
int main(int argc, char *argv[]) { int i; asn1_xer_print = 2; if (argc > 1) { asn_debug = 1; } for (i = 0; i < sizeof(s1ap_test) / sizeof(s1ap_test_t); i++) { struct s1ap_message_s message; uint8_t *buffer; uint32_t length; memset(&message, 0, sizeof(struct s1ap_message_s)); printf("Trying to decode %s procedure with asn1c decoder\n", s1ap_test[i].procedure_name); if (s1ap_mme_decode_pdu(&message, s1ap_test[i].buffer, s1ap_test[i].buf_len) < 0) { if (s1ap_eNB_decode_pdu(&message, s1ap_test[i].buffer, s1ap_test[i].buf_len) < 0) { printf("Failed to decode this message\n"); } else { printf("Succesfully decoded %s with eNB decoder\n", s1ap_test[i].procedure_name); } } else { printf("Succesfully decoded %s with MME decoder\n", s1ap_test[i].procedure_name); } printf("Trying to encode %s procedure with asn1c encoder\n", s1ap_test[i].procedure_name); if (s1ap_eNB_encode_pdu(&message, &buffer, &length) < 0) { printf("Failed to encode this message on MME side, trying eNB side\n"); } else { compare_buffer(buffer, length, s1ap_test[i].buffer, s1ap_test[i].buf_len); free(buffer); } } return 0; }