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,
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;
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);
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;
}
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;
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:
{
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