laforge has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-hnbgw/+/36478?usp=email )


Change subject: HNBAP: Make sure to respond with correct "reject"
......................................................................

HNBAP: Make sure to respond with correct "reject"

If we receive a procedure (like UE-REGISTER) in a state
where it's not permitted (e.g. HNB not registered), we should
send a UE-REGISTER-REJ with proper cause value, rather than not
sending any response at all.

Change-Id: I300db368a3d1d2fb5967f69f2ed4ac90ecf85e75
---
M src/osmo-hnbgw/hnbgw_hnbap.c
1 file changed, 57 insertions(+), 46 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-hnbgw refs/changes/78/36478/1

diff --git a/src/osmo-hnbgw/hnbgw_hnbap.c b/src/osmo-hnbgw/hnbgw_hnbap.c
index 99a6e3c..da87854 100644
--- a/src/osmo-hnbgw/hnbgw_hnbap.c
+++ b/src/osmo-hnbgw/hnbgw_hnbap.c
@@ -569,6 +569,13 @@
                                          
HNBAP_TriggeringMessage_initiating_message);
        }

+       if (!ctx->hnb_registered) {
+               /* UE registration requires prior HNB registration; reject with 
proper cause */
+               cause.choice.radioNetwork = 
HNBAP_CauseRadioNetwork_hNB_not_registered;
+               rc = hnbgw_tx_ue_register_rej(ctx, &ies.uE_Identity, &cause);
+               goto free_and_return_rc;
+       }
+
        switch (ies.uE_Identity.present) {
        case HNBAP_UE_Identity_PR_iMSI:
                ranap_bcd_decode(imsi, sizeof(imsi), 
ies.uE_Identity.choice.iMSI.buf,
@@ -633,11 +640,16 @@

        ctxid = asn1bitstr_to_u24(&ies.context_ID);

-       LOGHNB(ctx, DHNBAP, LOGL_DEBUG, "UE-DE-REGISTER context=%u cause=%s\n", 
ctxid, hnbap_cause_str(&ies.cause));
-
-       ue = ue_context_by_id(ctxid);
-       if (ue)
-               ue_context_free(ue);
+       if (!ctx->hnb_registered) {
+               LOGHNB(ctx, DHNBAP, LOGL_NOTICE, "UE-DE-REGISTER context=%u 
cause=%s not permitted; HNB not registered\n",
+                       ctxid, hnbap_cause_str(&ies.cause));
+               /* TODO: send general error? */
+       } else {
+               LOGHNB(ctx, DHNBAP, LOGL_DEBUG, "UE-DE-REGISTER context=%u 
cause=%s\n", ctxid, hnbap_cause_str(&ies.cause));
+               ue = ue_context_by_id(ctxid);
+               if (ue)
+                       ue_context_free(ue);
+       }

        hnbap_free_uede_registeries(&ies);
        return 0;
@@ -662,47 +674,32 @@
 {
        int rc = 0;

-       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_HNBRegister:        /*  8.2.4: 
Abnormal Condition, Accept. */
-                       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;
-               }
+       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;
        }

        return rc;

--
To view, visit https://gerrit.osmocom.org/c/osmo-hnbgw/+/36478?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-hnbgw
Gerrit-Branch: master
Gerrit-Change-Id: I300db368a3d1d2fb5967f69f2ed4ac90ecf85e75
Gerrit-Change-Number: 36478
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <[email protected]>
Gerrit-MessageType: newchange

Reply via email to