From a08aeac9dd68b86ce16ccec0498bbf08747a8d52 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 12 Sep 2022 09:00:48 +0200 Subject: [PATCH] Don't permit anything bug HNB (de)registration until HNB is registered UE registration or other HNBAP procedures should only happen once the HNB is registered. Change-Id: Iaa62ce89f4ffbff868309bfb8b1df7ebcca5c44a --- src/osmo-hnbgw/hnbgw_hnbap.c | 61 +++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/src/osmo-hnbgw/hnbgw_hnbap.c b/src/osmo-hnbgw/hnbgw_hnbap.c index 1d81e83..6152381 100644 --- a/src/osmo-hnbgw/hnbgw_hnbap.c +++ b/src/osmo-hnbgw/hnbgw_hnbap.c @@ -535,32 +535,41 @@ static int hnbgw_rx_initiating_msg(struct hnb_context *hnb, HNBAP_InitiatingMess { int rc = 0; - switch (imsg->procedureCode) { - case HNBAP_ProcedureCode_id_HNBRegister: /* 8.2 */ - rc = hnbgw_rx_hnb_register_req(hnb, &imsg->value); - break; - case HNBAP_ProcedureCode_id_HNBDe_Register: /* 8.3 */ - rc = hnbgw_rx_hnb_deregister(hnb, &imsg->value); - break; - case HNBAP_ProcedureCode_id_UERegister: /* 8.4 */ - rc = hnbgw_rx_ue_register_req(hnb, &imsg->value); - break; - case HNBAP_ProcedureCode_id_UEDe_Register: /* 8.5 */ - rc = hnbgw_rx_ue_deregister(hnb, &imsg->value); - break; - case HNBAP_ProcedureCode_id_ErrorIndication: /* 8.6 */ - rc = hnbgw_rx_err_ind(hnb, &imsg->value); - break; - case HNBAP_ProcedureCode_id_TNLUpdate: /* 8.9 */ - case HNBAP_ProcedureCode_id_HNBConfigTransfer: /* 8.10 */ - case HNBAP_ProcedureCode_id_RelocationComplete: /* 8.11 */ - case HNBAP_ProcedureCode_id_U_RNTIQuery: /* 8.12 */ - case HNBAP_ProcedureCode_id_privateMessage: - LOGHNB(hnb, DHNBAP, LOGL_NOTICE, "Unimplemented HNBAP Procedure %ld\n", imsg->procedureCode); - break; - default: - LOGHNB(hnb, DHNBAP, LOGL_NOTICE, "Unknown HNBAP Procedure %ld\n", imsg->procedureCode); - break; + if (!hnb->hnb_registered) { + switch (imsg->procedureCode) { + case HNBAP_ProcedureCode_id_HNBRegister: /* 8.2 */ + rc = hnbgw_rx_hnb_register_req(hnb, &imsg->value); + break; + case HNBAP_ProcedureCode_id_HNBDe_Register: /* 8.3 */ + rc = hnbgw_rx_hnb_deregister(hnb, &imsg->value); + break; + default: + LOGHNB(hnb, DHNBAP, LOGL_NOTICE, "HNBAP Procedure %ld not permitted for de-registered HNB\n", + imsg->procedureCode); + break; + } + } else { + switch (imsg->procedureCode) { + case HNBAP_ProcedureCode_id_UERegister: /* 8.4 */ + rc = hnbgw_rx_ue_register_req(hnb, &imsg->value); + break; + case HNBAP_ProcedureCode_id_UEDe_Register: /* 8.5 */ + rc = hnbgw_rx_ue_deregister(hnb, &imsg->value); + break; + case HNBAP_ProcedureCode_id_ErrorIndication: /* 8.6 */ + rc = hnbgw_rx_err_ind(hnb, &imsg->value); + break; + case HNBAP_ProcedureCode_id_TNLUpdate: /* 8.9 */ + case HNBAP_ProcedureCode_id_HNBConfigTransfer: /* 8.10 */ + case HNBAP_ProcedureCode_id_RelocationComplete: /* 8.11 */ + case HNBAP_ProcedureCode_id_U_RNTIQuery: /* 8.12 */ + case HNBAP_ProcedureCode_id_privateMessage: + LOGHNB(hnb, DHNBAP, LOGL_NOTICE, "Unimplemented HNBAP Procedure %ld\n", imsg->procedureCode); + break; + default: + LOGHNB(hnb, DHNBAP, LOGL_NOTICE, "Unknown HNBAP Procedure %ld\n", imsg->procedureCode); + break; + } } return rc;