From: lal.harshita Date: Thu, 22 Dec 2022 08:13:49 +0000 (+0530) Subject: [Task-ID: ODUHIGH-484] Support for NAS Authentication Messages X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=o-du%2Fl2.git;a=commitdiff_plain;h=c0421fee45d07243f1cc3b2250bd66600f15aac7 [Task-ID: ODUHIGH-484] Support for NAS Authentication Messages Signed-off-by: lal.harshita Change-Id: I08fc779c2fa37d4a6cb8b752ec8f7e86355d3502 Signed-off-by: lal.harshita --- diff --git a/build/odu/makefile b/build/odu/makefile index 2a7efea2c..d2d994eb7 100644 --- a/build/odu/makefile +++ b/build/odu/makefile @@ -44,7 +44,7 @@ PARALLEL_COMP=-j $(NUM_PARALLEL) # # Other apsects of tool chain set here # # These should be made available appropriately to the builds ifeq ($(MACHINE),BIT64) -ifeq ($(COVERAGE),1) +ifeq ($(COVERAGE),ENABLE) CC =gcc -m64 --coverage else CC =gcc -m64 @@ -158,6 +158,7 @@ help: @echo -e "$(OPTS) MODE=TDD - If not specified, MODE=FDD$(NORM)" @echo -e "$(OPTS) PHY=INTEL_L1 - If not specified, Phy stub is used$(NORM)" @echo -e "$(OPTS) PHY_MODE=TIMER - Testing mode for INTEL_L1" + @echo -e "$(OPTS) COVERAGE=ENABLE - To record the code coverage stats. Disabled by default" @echo -e "******************************************************************" prepare_dirs: diff --git a/src/cu_stub/cu_f1ap_msg_hdl.c b/src/cu_stub/cu_f1ap_msg_hdl.c index 6fd26b693..4f1858ec3 100644 --- a/src/cu_stub/cu_f1ap_msg_hdl.c +++ b/src/cu_stub/cu_f1ap_msg_hdl.c @@ -1519,6 +1519,28 @@ uint8_t BuildDLRRCContainer(CuUeCb *ueCb, uint8_t rrcMsgType, RRCContainer_t *rr DU_LOG("\nERROR --> F1AP: Failed to fill DL-CCCH Msg at RRC SETUP"); } else if(rrcMsgType == RRC_SETUP_COMPLETE) + { + DU_LOG("\nINFO --> F1AP : Sending NAS Authentication Request"); + char authReqBuf[51] = {0x00, ueCb->pdcpSn++, 0x2a, 0x85, 0x4f, 0xc0, 0x0a, 0xc0, 0x40, 0x40, 0x00, 0x04, 0x2f, 0x58, 0x39, 0x12,\ + 0x37, 0x15, 0x74, 0x16, 0x4c, 0x8d, 0xd3, 0x95, 0xa6, 0x9e, 0x94, 0x03, 0x24, 0x02, 0x00, 0x6f,\ + 0x0b, 0x39, 0x5e, 0xbc, 0xb0, 0x00, 0x1a, 0xb1, 0xc1, 0x3f, 0x84, 0x4f, 0x77, 0xe3, 0x20, 0x00,\ + 0x00, 0x00, 0x00}; + bufLen = 51; + rrcContainer->size = bufLen; + CU_ALLOC(rrcContainer->buf, rrcContainer->size); + if(rrcContainer->buf != NULLP) + { + memset(rrcContainer->buf, 0, bufLen); + memcpy(rrcContainer->buf, authReqBuf, bufLen); + } + else + { + DU_LOG("\nERROR --> F1AP : Memory allocation failure for RRC Container buffer"); + ret = RFAILED; + + } + } + else if(rrcMsgType == NAS_AUTHENTICATION_RSP) { DU_LOG("\nINFO --> F1AP : Sending NAS Security mode command"); char secModeBuf[30]={0x00, ueCb->pdcpSn++, 0x2e, 0x82, 0xaf, 0xc0, 0x7d, 0x1c, 0x4e, 0xfc, 0x80, 0x0f, 0xc0, @@ -1807,6 +1829,9 @@ uint8_t setDlRRCMsgType(CuUeCb *ueCb) case RRC_SETUP_COMPLETE: rrcMsgType = RRC_SETUP_COMPLETE; break; + case NAS_AUTHENTICATION_RSP: + rrcMsgType = NAS_AUTHENTICATION_RSP; + break; case NAS_SECURITY_MODE_COMPLETE: rrcMsgType = NAS_SECURITY_MODE_COMPLETE; break; @@ -9829,22 +9854,7 @@ uint8_t procUlRrcMsg(uint32_t duId, F1AP_PDU_t *f1apMsg) ueCb = &duDb->ueCb[duUeF1apId-1]; ueCb->f1apMsgDb.dlRrcMsgCount++; rrcMsgType = setDlRRCMsgType(ueCb); - if(rrcMsgType == RRC_SETUP_COMPLETE) - { - DU_LOG("\nINFO --> F1AP: Sending DL RRC MSG for NAS Security Mode Command"); - ret = BuildAndSendDLRRCMessageTransfer(duId, ueCb, srbId, rrcMsgType); - } - if(rrcMsgType == NAS_SECURITY_MODE_COMPLETE) - { - DU_LOG("\nINFO --> F1AP: Sending DL RRC MSG for RRC Security Mode Command"); - ret = BuildAndSendDLRRCMessageTransfer(duId, ueCb, srbId, rrcMsgType); - } - else if(rrcMsgType == RRC_SECURITY_MODE_COMPLETE) - { - DU_LOG("\nINFO --> F1AP: Sending DL RRC MSG for RRC Registration Accept"); - BuildAndSendDLRRCMessageTransfer(duId, ueCb, srbId, rrcMsgType); - } - else if(rrcMsgType == REGISTRATION_COMPLETE) + if(rrcMsgType == REGISTRATION_COMPLETE) { DU_LOG("\nINFO --> F1AP: Sending Ue Context Setup Request"); ret = BuildAndSendUeContextSetupReq(duId, ueCb); @@ -9854,6 +9864,11 @@ uint8_t procUlRrcMsg(uint32_t duId, F1AP_PDU_t *f1apMsg) DU_LOG("\nINFO --> F1AP: Sending UE Context Modification Request"); BuildAndSendUeContextModificationReq(duId, ueCb, RRC_RECONFIG_COMPLETE_IND); } + else + { + /* In case rrcMsgType is RRC_SETUP_COMPLETE / NAS_AUTHENTICATION_RSP / NAS_SECURITY_MODE_COMPLETE / RRC_SECURITY_MODE_COMPLETE */ + BuildAndSendDLRRCMessageTransfer(duId, ueCb, srbId, rrcMsgType); + } } return ret; } diff --git a/src/cu_stub/cu_f1ap_msg_hdl.h b/src/cu_stub/cu_f1ap_msg_hdl.h index 1de45b92a..6b97c9095 100644 --- a/src/cu_stub/cu_f1ap_msg_hdl.h +++ b/src/cu_stub/cu_f1ap_msg_hdl.h @@ -151,6 +151,7 @@ typedef enum { RRC_SETUP=1, RRC_SETUP_COMPLETE, + NAS_AUTHENTICATION_RSP, NAS_SECURITY_MODE_COMPLETE, RRC_SECURITY_MODE_COMPLETE, REGISTRATION_COMPLETE, diff --git a/src/phy_stub/phy_stub.h b/src/phy_stub/phy_stub.h index ecc4b2b3d..fc23df639 100644 --- a/src/phy_stub/phy_stub.h +++ b/src/phy_stub/phy_stub.h @@ -70,6 +70,7 @@ typedef struct ueCb bool msg5ShortBsrSent; bool msg5Sent; bool dlDedMsg; + bool msgNasAuthenticationComp; bool msgNasSecurityModeComp; bool msgRrcSecurityModeComp; bool msgRrcReconfigComp; @@ -106,6 +107,7 @@ typedef enum MSG_TYPE_MSG3, MSG_TYPE_SHORT_BSR, MSG_TYPE_MSG5, + MSG_TYPE_NAS_AUTHENTICATION_COMPLETE, MSG_TYPE_NAS_SECURITY_MODE_COMPLETE, MSG_TYPE_RRC_SECURITY_MODE_COMPLETE, MSG_TYPE_REGISTRATION_COMPLETE, diff --git a/src/phy_stub/phy_stub_msg_hdl.c b/src/phy_stub/phy_stub_msg_hdl.c index e08698279..2e8378d3d 100644 --- a/src/phy_stub/phy_stub_msg_hdl.c +++ b/src/phy_stub/phy_stub_msg_hdl.c @@ -450,6 +450,11 @@ uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn, fapi_ul_pusch_pdu_ phyDb.ueDb.ueCb[ueId-1].msg5Sent = true; type = MSG_TYPE_MSG5; } + else if(!phyDb.ueDb.ueCb[ueId-1].msgNasAuthenticationComp) + { + phyDb.ueDb.ueCb[ueId-1].msgNasAuthenticationComp = true; + type = MSG_TYPE_NAS_AUTHENTICATION_COMPLETE; + } else if(!phyDb.ueDb.ueCb[ueId-1].msgNasSecurityModeComp) { phyDb.ueDb.ueCb[ueId-1].msgNasSecurityModeComp = true; @@ -569,6 +574,31 @@ uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn, fapi_ul_pusch_pdu_ byteIdx += msg5PduLen; /* 4 bytes of header : MAC+RLC */ break; } + + case MSG_TYPE_NAS_AUTHENTICATION_COMPLETE: + { + /* For Authentication response where RRC Container is dummy + * + * MAC subheader format is R/F/LCId/L (2/3 bytes) + * LCId is 1 for SRB1 + * L is length of PDU i.e 6bytes here + * From 38.321 section 6.1.1 + * + * RLC subheader for AM PDU is D/C/P/SI/SN (2 bytes for 12-bit SN) + * From 38.322, section 6.2.2.4 + */ + DU_LOG("\nDEBUG --> PHY_STUB: Forming AUTHENTICATION RESPONSE PDU"); + uint8_t pduLen = 37; /* Length of PDU */ + pduLen += 2; /* RLC subheader */ + uint8_t msg[] = {1, pduLen, 128, phyDb.ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, phyDb.ueDb.ueCb[ueId-1].pdcpSn++, 0x3a, \ + 0x0e, 0x3f, 0x00, 0xca, 0x95, 0xe9, 0x19, 0x41, 0x3f, 0x00, 0x2b, 0x96, 0x88, 0x06, 0xd7, 0x16, 0xc6, \ + 0x8b, 0xea, 0xae, 0x45, 0xd1, 0x01, 0xfd, 0x34, 0xd4, 0xfd, 0xd5, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00}; + + pduLen += 2; /* 2 bytes of MAC header */ + memcpy(pdu, &msg, pduLen); + byteIdx += pduLen; /* 4 bytes of header : MAC+RLC */ + break; + } case MSG_TYPE_NAS_SECURITY_MODE_COMPLETE: { @@ -595,8 +625,9 @@ uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn, fapi_ul_pusch_pdu_ pduLen += 2; /* 2 bytes of MAC header */ memcpy(pdu, &msg, pduLen); byteIdx += pduLen; /* 4 bytes of header : MAC+RLC */ -break; + break; } + case MSG_TYPE_RRC_SECURITY_MODE_COMPLETE: { /* For security mode complete where RRC Container is dummy