Neels Hofmeyr | b984f36 | 2016-02-18 01:18:20 +0100 | [diff] [blame] | 1 | #include <osmocom/core/msgb.h> |
| 2 | #include <osmocom/ranap/ranap_ies_defs.h> |
Pau Espin Pedrol | 634fd81 | 2021-01-14 11:19:06 +0100 | [diff] [blame^] | 3 | #include <osmocom/ranap/iu_helpers.h> |
Neels Hofmeyr | b984f36 | 2016-02-18 01:18:20 +0100 | [diff] [blame] | 4 | |
Neels Hofmeyr | 4470f93 | 2016-04-19 00:13:53 +0200 | [diff] [blame] | 5 | #include "hnb-test-layers.h" |
| 6 | |
Neels Hofmeyr | b984f36 | 2016-02-18 01:18:20 +0100 | [diff] [blame] | 7 | static const char *printstr(OCTET_STRING_t *s) |
| 8 | { |
Pau Espin Pedrol | 825a1e4 | 2021-01-14 11:10:04 +0100 | [diff] [blame] | 9 | return osmo_hexdump((const unsigned char*)s->buf, s->size); |
Neels Hofmeyr | b984f36 | 2016-02-18 01:18:20 +0100 | [diff] [blame] | 10 | } |
| 11 | |
| 12 | #define PP(octet_string_t) \ |
| 13 | printf(#octet_string_t " = %s\n",\ |
| 14 | printstr(&octet_string_t)) |
| 15 | |
Neels Hofmeyr | 4470f93 | 2016-04-19 00:13:53 +0200 | [diff] [blame] | 16 | void hnb_test_rua_dt_handle_ranap(struct hnb_test *hnb, |
| 17 | struct ranap_message_s *ranap_msg) |
Neels Hofmeyr | b984f36 | 2016-02-18 01:18:20 +0100 | [diff] [blame] | 18 | { |
Neels Hofmeyr | 4470f93 | 2016-04-19 00:13:53 +0200 | [diff] [blame] | 19 | int len; |
Pau Espin Pedrol | 101fba2 | 2021-01-14 11:18:23 +0100 | [diff] [blame] | 20 | uint8_t *data; |
Neels Hofmeyr | 4a0a69a | 2016-04-19 00:06:28 +0200 | [diff] [blame] | 21 | RANAP_PermittedIntegrityProtectionAlgorithms_t *algs; |
| 22 | RANAP_IntegrityProtectionAlgorithm_t *first_alg; |
Neels Hofmeyr | b984f36 | 2016-02-18 01:18:20 +0100 | [diff] [blame] | 23 | |
Neels Hofmeyr | 4470f93 | 2016-04-19 00:13:53 +0200 | [diff] [blame] | 24 | printf("rx ranap_msg->procedureCode %d\n", |
| 25 | ranap_msg->procedureCode); |
Neels Hofmeyr | b984f36 | 2016-02-18 01:18:20 +0100 | [diff] [blame] | 26 | |
Neels Hofmeyr | 4470f93 | 2016-04-19 00:13:53 +0200 | [diff] [blame] | 27 | switch (ranap_msg->procedureCode) { |
| 28 | case RANAP_ProcedureCode_id_DirectTransfer: |
| 29 | printf("rx DirectTransfer: presence = %hx\n", |
| 30 | ranap_msg->msg.directTransferIEs.presenceMask); |
| 31 | PP(ranap_msg->msg.directTransferIEs.nas_pdu); |
Neels Hofmeyr | b984f36 | 2016-02-18 01:18:20 +0100 | [diff] [blame] | 32 | |
Neels Hofmeyr | 4470f93 | 2016-04-19 00:13:53 +0200 | [diff] [blame] | 33 | len = ranap_msg->msg.directTransferIEs.nas_pdu.size; |
| 34 | data = ranap_msg->msg.directTransferIEs.nas_pdu.buf; |
Neels Hofmeyr | b984f36 | 2016-02-18 01:18:20 +0100 | [diff] [blame] | 35 | |
Neels Hofmeyr | 4470f93 | 2016-04-19 00:13:53 +0200 | [diff] [blame] | 36 | hnb_test_nas_rx_dtap(hnb, data, len); |
| 37 | return; |
Neels Hofmeyr | 4a0a69a | 2016-04-19 00:06:28 +0200 | [diff] [blame] | 38 | |
| 39 | case RANAP_ProcedureCode_id_SecurityModeControl: |
| 40 | printf("rx SecurityModeControl: presence = %hx\n", |
| 41 | ranap_msg->msg.securityModeCommandIEs.presenceMask); |
| 42 | |
| 43 | /* Just pick the first available IP alg, don't care about |
| 44 | * encryption (yet?) */ |
| 45 | algs = &ranap_msg->msg.securityModeCommandIEs.integrityProtectionInformation.permittedAlgorithms; |
| 46 | if (algs->list.count < 1) { |
| 47 | printf("Security Mode Command: No permitted algorithms.\n"); |
| 48 | return; |
| 49 | } |
| 50 | first_alg = *algs->list.array; |
| 51 | |
| 52 | hnb_test_rx_secmode_cmd(hnb, *first_alg); |
| 53 | return; |
Neels Hofmeyr | bde4d3b | 2016-04-19 02:38:16 +0200 | [diff] [blame] | 54 | |
| 55 | case RANAP_ProcedureCode_id_Iu_Release: |
| 56 | hnb_test_rx_iu_release(hnb); |
| 57 | return; |
Neels Hofmeyr | 4470f93 | 2016-04-19 00:13:53 +0200 | [diff] [blame] | 58 | } |
Neels Hofmeyr | b984f36 | 2016-02-18 01:18:20 +0100 | [diff] [blame] | 59 | } |
Neels Hofmeyr | 5ad72b9 | 2016-04-19 18:09:05 +0200 | [diff] [blame] | 60 | |
| 61 | void hnb_test_rua_cl_handle_ranap(struct hnb_test *hnb, |
| 62 | struct ranap_message_s *ranap_msg) |
| 63 | { |
| 64 | char imsi[16]; |
| 65 | |
| 66 | printf("rx ranap_msg->procedureCode %d\n", |
| 67 | ranap_msg->procedureCode); |
| 68 | |
| 69 | switch (ranap_msg->procedureCode) { |
| 70 | case RANAP_ProcedureCode_id_Paging: |
| 71 | if (ranap_msg->msg.pagingIEs.permanentNAS_UE_ID.present == RANAP_PermanentNAS_UE_ID_PR_iMSI) { |
| 72 | ranap_bcd_decode(imsi, sizeof(imsi), |
| 73 | ranap_msg->msg.pagingIEs.permanentNAS_UE_ID.choice.iMSI.buf, |
| 74 | ranap_msg->msg.pagingIEs.permanentNAS_UE_ID.choice.iMSI.size); |
| 75 | } else imsi[0] = '\0'; |
| 76 | |
Pau Espin Pedrol | 4ab00db | 2020-03-20 20:19:47 +0100 | [diff] [blame] | 77 | printf("rx Paging: presence=%hx domain=%ld IMSI=%s\n", |
Neels Hofmeyr | 5ad72b9 | 2016-04-19 18:09:05 +0200 | [diff] [blame] | 78 | ranap_msg->msg.pagingIEs.presenceMask, |
| 79 | ranap_msg->msg.pagingIEs.cN_DomainIndicator, |
| 80 | imsi |
| 81 | ); |
| 82 | |
| 83 | hnb_test_rx_paging(hnb, imsi); |
| 84 | return; |
| 85 | } |
| 86 | } |