osmo-iuh/src/tests/hnb-test-ranap.c

86 lines
2.4 KiB
C

#include <osmocom/core/msgb.h>
#include <osmocom/ranap/ranap_ies_defs.h>
#include "hnb-test-layers.h"
static const char *printstr(OCTET_STRING_t *s)
{
return osmo_hexdump((const unsigned char*)s->buf, s->size);
}
#define PP(octet_string_t) \
printf(#octet_string_t " = %s\n",\
printstr(&octet_string_t))
void hnb_test_rua_dt_handle_ranap(struct hnb_test *hnb,
struct ranap_message_s *ranap_msg)
{
int len;
char *data;
RANAP_PermittedIntegrityProtectionAlgorithms_t *algs;
RANAP_IntegrityProtectionAlgorithm_t *first_alg;
printf("rx ranap_msg->procedureCode %d\n",
ranap_msg->procedureCode);
switch (ranap_msg->procedureCode) {
case RANAP_ProcedureCode_id_DirectTransfer:
printf("rx DirectTransfer: presence = %hx\n",
ranap_msg->msg.directTransferIEs.presenceMask);
PP(ranap_msg->msg.directTransferIEs.nas_pdu);
len = ranap_msg->msg.directTransferIEs.nas_pdu.size;
data = ranap_msg->msg.directTransferIEs.nas_pdu.buf;
hnb_test_nas_rx_dtap(hnb, data, len);
return;
case RANAP_ProcedureCode_id_SecurityModeControl:
printf("rx SecurityModeControl: presence = %hx\n",
ranap_msg->msg.securityModeCommandIEs.presenceMask);
/* Just pick the first available IP alg, don't care about
* encryption (yet?) */
algs = &ranap_msg->msg.securityModeCommandIEs.integrityProtectionInformation.permittedAlgorithms;
if (algs->list.count < 1) {
printf("Security Mode Command: No permitted algorithms.\n");
return;
}
first_alg = *algs->list.array;
hnb_test_rx_secmode_cmd(hnb, *first_alg);
return;
case RANAP_ProcedureCode_id_Iu_Release:
hnb_test_rx_iu_release(hnb);
return;
}
}
void hnb_test_rua_cl_handle_ranap(struct hnb_test *hnb,
struct ranap_message_s *ranap_msg)
{
char imsi[16];
printf("rx ranap_msg->procedureCode %d\n",
ranap_msg->procedureCode);
switch (ranap_msg->procedureCode) {
case RANAP_ProcedureCode_id_Paging:
if (ranap_msg->msg.pagingIEs.permanentNAS_UE_ID.present == RANAP_PermanentNAS_UE_ID_PR_iMSI) {
ranap_bcd_decode(imsi, sizeof(imsi),
ranap_msg->msg.pagingIEs.permanentNAS_UE_ID.choice.iMSI.buf,
ranap_msg->msg.pagingIEs.permanentNAS_UE_ID.choice.iMSI.size);
} else imsi[0] = '\0';
printf("rx Paging: presence=%hx domain=%ld IMSI=%s\n",
ranap_msg->msg.pagingIEs.presenceMask,
ranap_msg->msg.pagingIEs.cN_DomainIndicator,
imsi
);
hnb_test_rx_paging(hnb, imsi);
return;
}
}