Commit 180f9787 authored by Swetank Srivastava's avatar Swetank Srivastava Committed by Vijay C

sync issue fix for portman, sys task and rrc

parent 73a46650
......@@ -472,6 +472,7 @@ int logInit (void)
register_log_component("ENB_APP","log",ENB_APP);
register_log_component("ENB_SS","log",ENB_SS);
register_log_component("ENB_SS_PORTMAN","log",ENB_SS_PORTMAN);
register_log_component("ENB_SS_PORTMAN_ACP","log",ENB_SS_PORTMAN_ACP);
register_log_component("ENB_SS_SYS_TASK","log",ENB_SS_SYS_TASK);
register_log_component("ENB_SS_SRB_ACP","log",ENB_SS_SRB_ACP);
register_log_component("ENB_SS_SYSIND","log",ENB_SS_SYSIND);
......
......@@ -172,6 +172,7 @@ extern "C" {
#define DEBUG_ENB_SS_VNG (1<<30)
#define DEBUG_ENB_SS_VTP (1<<31)
#define DEBUG_ENB_SS_VT_TIMER (1<<32)
#define DEBUG_ENB_SS_PORTMAN_ACP (1<<33)
#define LOG_MASKMAP_INIT {\
{"PRACH", DEBUG_PRACH},\
......@@ -192,6 +193,7 @@ extern "C" {
{"UE_TIMING", UE_TIMING},\
{"ENB_SS", DEBUG_ENB_SS},\
{"ENB_SS_PORTMAN", DEBUG_ENB_SS_PORTMAN},\
{"ENB_SS_PORTMAN_ACP", DEBUG_ENB_SS_PORTMAN_ACP},\
{"ENB_SS_SYS_TASK", DEBUG_ENB_SS_SYS_TASK},\
{"ENB_SS_SRB_ACP", DEBUG_ENB_SS_SRB_ACP},\
{"ENB_SS_SYSIND", DEBUG_ENB_SS_SYSIND},\
......@@ -253,6 +255,7 @@ typedef enum {
ENB_APP,
ENB_SS,
ENB_SS_PORTMAN,
ENB_SS_PORTMAN_ACP,
ENB_SS_SYS_TASK,
ENB_SS_SRB_ACP,
ENB_SS_SYSIND,
......
......@@ -655,6 +655,27 @@ ID = LEGACY_ENB_SS_PORTMAN_TRACE
GROUP = ALL:LEGACY_ENB_SS_PORTMAN:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log
ID = LEGACY_ENB_SS_PORTMAN_ACP_INFO
DESC = ENB_SS_PORTMAN_ACP legacy logs - info level
GROUP = ALL:LEGACY_ENB_SS_PORTMAN_ACP:LEGACY_GROUP_INFO:LEGACY
FORMAT = string,log
ID = LEGACY_ENB_SS_PORTMAN_ACP_ERROR
DESC = ENB_SS_PORTMAN_ACP legacy logs - error level
GROUP = ALL:LEGACY_ENB_SS_PORTMAN_ACP:LEGACY_GROUP_ERROR:LEGACY
FORMAT = string,log
ID = LEGACY_ENB_SS_PORTMAN_ACP_WARNING
DESC = ENB_SS_PORTMAN_ACP legacy logs - warning level
GROUP = ALL:LEGACY_ENB_SS_PORTMAN_ACP:LEGACY_GROUP_WARNING:LEGACY
FORMAT = string,log
ID = LEGACY_ENB_SS_PORTMAN_ACP_DEBUG
DESC = ENB_SS_PORTMAN_ACP legacy logs - debug level
GROUP = ALL:LEGACY_ENB_SS_PORTMAN_ACP:LEGACY_GROUP_DEBUG:LEGACY
FORMAT = string,log
ID = LEGACY_ENB_SS_PORTMAN_ACP_TRACE
DESC = ENB_SS_PORTMAN_ACP legacy logs - trace level
GROUP = ALL:LEGACY_ENB_SS_PORTMAN_ACP:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log
ID = LEGACY_ENB_SS_SYS_TASK_INFO
DESC = ENB_SS_SYS_TASK legacy logs - info level
GROUP = ALL:LEGACY_ENB_SS_SYS_TASK:LEGACY_GROUP_INFO:LEGACY
......
......@@ -327,6 +327,7 @@ void *rrc_enb_process_msg(void *);
TASK_DEF(TASK_M3AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SCTP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SS_PORTMAN, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SS_PORTMAN_ACP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SS_PORTMAN_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SYS, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SYS_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
......
......@@ -62,7 +62,10 @@ int create_tasks(uint32_t enb_nb) {
if (RC.ss.mode >= SS_SOFTMODEM)
{
rc = itti_create_task(TASK_SS_PORTMAN, ss_eNB_port_man_task, NULL);
rc = itti_create_task(TASK_SS_PORTMAN, ss_eNB_port_man_eNB_task, NULL);
AssertFatal(rc >= 0, "Create task for SS manager failed\n");
rc = itti_create_task(TASK_SS_PORTMAN_ACP, ss_eNB_port_man_acp_task, NULL);
AssertFatal(rc >= 0, "Create task for SS manager failed\n");
rc = itti_create_task(TASK_SYS, ss_eNB_sys_task, NULL);
......
......@@ -54,9 +54,12 @@ MESSAGE_DEF(RRC_STATE_IND, MESSAGE_PRIORITY_MED, RrcStateInd,
//-------------------------------------------------------------------------------------------//
// eNB: ENB_APP -> RRC messages
MESSAGE_DEF(RRC_CONFIGURATION_REQ, MESSAGE_PRIORITY_MED, RrcConfigurationReq, rrc_configuration_req)
MESSAGE_DEF(RRC_CONFIGURATION_CNF, MESSAGE_PRIORITY_MED, RrcConfigurationCnf, rrc_configuration_cnf)
MESSAGE_DEF(RRC_RBLIST_CFG_REQ, MESSAGE_PRIORITY_MED, RrcRblistCfgReq, rrc_rblist_cfg_req)
MESSAGE_DEF(RRC_RBLIST_CFG_CNF, MESSAGE_PRIORITY_MED, RrcRblistCfgCnf, rrc_rblist_cfg_cnf)
MESSAGE_DEF(RRC_UE_CAT_INFO, MESSAGE_PRIORITY_MED, rrcUECatInfo, rrc_ue_cat_info)
MESSAGE_DEF(RRC_AS_SECURITY_CONFIG_REQ, MESSAGE_PRIORITY_MED, RrcAsSecurityConfigReq, rrc_as_security_config_req)
MESSAGE_DEF(RRC_AS_SECURITY_CONFIG_CNF, MESSAGE_PRIORITY_MED, RrcAsSecurityConfigCnf, rrc_as_security_config_cnf)
MESSAGE_DEF(NBIOTRRC_CONFIGURATION_REQ, MESSAGE_PRIORITY_MED, NbIoTRrcConfigurationReq, nbiotrrc_configuration_req)
// gNB: gNB_APP -> RRC messages
......
......@@ -83,12 +83,15 @@
#define RRC_STATE_IND(mSGpTR) (mSGpTR)->ittiMsg.rrc_state_ind
#define RRC_CONFIGURATION_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_configuration_req
#define RRC_CONFIGURATION_CNF(mSGpTR) (mSGpTR)->ittiMsg.rrc_configuration_cnf
#define RRC_RBLIST_CFG_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_rblist_cfg_req
#define RRC_RBLIST_CFG_CNF(mSGpTR) (mSGpTR)->ittiMsg.rrc_rblist_cfg_cnf
#define RRC_UE_CAT_INFO(mSGpTR) (mSGpTR)->ittiMsg.rrc_ue_cat_info
#define RRC_AS_SECURITY_CONFIG_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_as_security_config_req
#define RRC_AS_SECURITY_CONFIG_CNF(mSGpTR) (mSGpTR)->ittiMsg.rrc_as_security_config_cnf
#define NBIOTRRC_CONFIGURATION_REQ(mSGpTR) (mSGpTR)->ittiMsg.nbiotrrc_configuration_req
......@@ -167,6 +170,10 @@ typedef struct RrcAsSecurityConfigReq_s {
int rnti;
}RrcAsSecurityConfigReq;
typedef struct RrcAsSecurityConfigCnf_s {
bool status;
}RrcAsSecurityConfigCnf;
enum ue_CategoryDL_v1310_e {
ue_CategoryDL_v1310_e_n17 = 0,
ue_CategoryDL_v1310_e_m1 = 1,
......@@ -228,6 +235,10 @@ typedef struct RrcRblistCfgReq_s {
rb_info rb_list[MAX_RBS];
} RrcRblistCfgReq;
typedef struct RrcRblistCfgCnf_s {
bool status;
}RrcRblistCfgCnf;
typedef struct RrcStateInd_s {
Rrc_State_t state;
Rrc_Sub_State_t sub_state;
......@@ -575,6 +586,11 @@ typedef struct RrcConfigurationReq_s {
} RrcConfigurationReq;
typedef struct RrcConfigurationCnf_s
{
bool status;
}RrcConfigurationCnf;
#define MAX_NUM_NBIOT_CELEVELS 3
typedef struct NbIoTRrcConfigurationReq_s {
......
......@@ -48,6 +48,7 @@
#define SS_SYS_PROXY_MSG_CNF(mSGpTR) (mSGpTR)->ittiMsg.udp_data_ind
#define SS_PAGING_IND(mSGpTR) (mSGpTR)->ittiMsg.ss_paging_ind
#define SS_NR_PAGING_IND(mSGpTR) (mSGpTR)->ittiMsg.ss_nr_paging_ind
#define SS_PAGING_CNF(mSGpTR) (mSGpTR)->ittiMsg.ss_paging_cnf
#define SS_L1MACIND_CTRL(mSGpTR) (mSGpTR)->ittiMsg.ss_l1macind_ctrl
#define SS_ULGRANT_INFO(mSGpTR) (mSGpTR)->ittiMsg.ss_ulgrant_info
......
......@@ -495,7 +495,6 @@ rx_sdu(const module_id_t enb_mod_idP,
}
UE_template_ptr->ul_SR = 1;
LOG_D(MAC, "swetank: fxn:%s line:%d rnti:%d ul_SR=1\n", __FUNCTION__, __LINE__, UE_RNTI(enb_mod_idP, UE_id));
UE_scheduling_control->crnti_reconfigurationcomplete_flag = 1;
UE_info->UE_template[UE_PCCID(enb_mod_idP, UE_id)][UE_id].configured = 1;
cancel_ra_proc(enb_mod_idP,
......@@ -559,7 +558,6 @@ rx_sdu(const module_id_t enb_mod_idP,
}
UE_template_ptr->ul_SR = 1;
LOG_D(MAC, "swetank: fxn:%s line:%d rnti:%d ul_SR=1\n", __FUNCTION__, __LINE__, UE_RNTI(enb_mod_idP, UE_id));
UE_scheduling_control->crnti_reconfigurationcomplete_flag = 1;
} else {
cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti);
......@@ -1897,7 +1895,6 @@ schedule_ulsch_rnti(module_id_t module_idP,
//uint8_t aggregation = 2;
int sched_frame = frameP;
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
if (sched_subframeP < subframeP) {
sched_frame++;
......@@ -1924,7 +1921,6 @@ schedule_ulsch_rnti(module_id_t module_idP,
for (int UE_id = UE_info->list.head; UE_id >= 0; UE_id = UE_info->list.next[UE_id]) {
if (UE_info->UE_template[CC_id][UE_id].rach_resource_type > 0)
{
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
continue;
}
......@@ -2552,7 +2548,6 @@ schedule_ulsch_ss(module_id_t module_idP,
uint8_t ue_found = 0;
/* Note: RC.nb_mac_CC[module_idP] should be lower than or equal to NFAPI_CC_MAX */
LOG_D(MAC, "swetank: num CC:%d\n", RC.nb_mac_CC[module_idP]);
for (int CC_id = 0; CC_id < RC.nb_mac_CC[module_idP]; CC_id++, cc++) {
/* MultiCell: Common channels modify for multiple CC */
cc = &RC.mac[module_idP]->common_channels[CC_id];
......@@ -2568,7 +2563,7 @@ schedule_ulsch_ss(module_id_t module_idP,
if (ue_found == 0)
{
LOG_D(MAC, "%s No UE found\n", __FUNCTION__);
return;
continue;
}
/* if schedule is false, it means SFN/SF for ULGrant had not yet arrived */
......@@ -2584,7 +2579,6 @@ schedule_ulsch_ss(module_id_t module_idP,
switch (subframeP) {
case 0:
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
if ((tdd_sfa == 0) || (tdd_sfa == 3))
sched_subframe = 4;
else if (tdd_sfa == 6)
......@@ -2595,7 +2589,6 @@ schedule_ulsch_ss(module_id_t module_idP,
break;
case 1:
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
if ((tdd_sfa == 0) || (tdd_sfa == 1))
sched_subframe = 7;
else if (tdd_sfa == 6)
......@@ -2606,11 +2599,9 @@ schedule_ulsch_ss(module_id_t module_idP,
break;
case 2: // Don't schedule UL in subframe 2 for TDD
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
return;
case 3:
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
if (tdd_sfa == 2)
sched_subframe = 7;
else
......@@ -2619,7 +2610,6 @@ schedule_ulsch_ss(module_id_t module_idP,
break;
case 4:
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
if (tdd_sfa == 1)
sched_subframe = 8;
else
......@@ -2628,7 +2618,6 @@ schedule_ulsch_ss(module_id_t module_idP,
break;
case 5:
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
if (tdd_sfa == 0)
sched_subframe = 9;
else if (tdd_sfa == 6)
......@@ -2639,7 +2628,6 @@ schedule_ulsch_ss(module_id_t module_idP,
break;
case 6:
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
if (tdd_sfa == 0 || tdd_sfa == 1)
sched_subframe = 2;
else if (tdd_sfa == 6)
......@@ -2650,11 +2638,9 @@ schedule_ulsch_ss(module_id_t module_idP,
break;
case 7:
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
return;
case 8:
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
if ((tdd_sfa >= 2) && (tdd_sfa <= 5))
sched_subframe = 2;
else
......@@ -2663,7 +2649,6 @@ schedule_ulsch_ss(module_id_t module_idP,
break;
case 9:
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
if ((tdd_sfa == 1) || (tdd_sfa == 3) || (tdd_sfa == 4))
sched_subframe = 3;
else if (tdd_sfa == 6)
......@@ -2674,7 +2659,6 @@ schedule_ulsch_ss(module_id_t module_idP,
break;
default:
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
return;
}
}
......@@ -2687,9 +2671,7 @@ schedule_ulsch_ss(module_id_t module_idP,
int emtc_active[5];
memset(emtc_active, 0, 5 * sizeof(int));
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
schedule_ulsch_rnti_emtc(module_idP, frameP, subframeP, sched_subframe, emtc_active);
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
if (is_prach_subframe0(cc->tdd_Config!=NULL ? cc->tdd_Config->subframeAssignment : 0,cc->tdd_Config!=NULL ? 1 : 0,
cc->radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex,
......@@ -2704,7 +2686,6 @@ schedule_ulsch_ss(module_id_t module_idP,
for (int i = 0; i < 6; i++)
cc->vrb_map_UL[start_rb + i] = 1;
}
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
/* HACK: let's remove the PUCCH from available RBs
* we suppose PUCCH size is:
......@@ -2740,7 +2721,6 @@ schedule_ulsch_ss(module_id_t module_idP,
exit(1);
}
LOG_D(MAC, "swetank: fxn:%s line:%d\n", __FUNCTION__, __LINE__);
schedule_ulsch_rnti(module_idP, CC_id, frameP, subframeP, sched_subframe);
}
......
......@@ -257,7 +257,7 @@ void free_LTE_PagingRecord_t(LTE_PagingRecord_t * ptr)
}
}
uint8_t do_MIB_FeMBMS(rrc_eNB_carrier_data_t *carrier, uint32_t N_RB_DL, uint32_t additionalNonMBSFN, uint32_t frame) {
int do_MIB_FeMBMS(rrc_eNB_carrier_data_t *carrier, uint32_t N_RB_DL, uint32_t additionalNonMBSFN, uint32_t frame) {
asn_enc_rval_t enc_rval;
LTE_BCCH_BCH_Message_MBMS_t *mib_fembms=&carrier->mib_fembms;
frame=198;
......@@ -461,7 +461,7 @@ uint8_t do_MIB_SL(const protocol_ctxt_t *const ctxt_pP, const uint8_t eNB_index,
return((enc_rval.encoded+7)/8);
}
uint8_t do_SIB1_MBMS(rrc_eNB_carrier_data_t *carrier,
int do_SIB1_MBMS(rrc_eNB_carrier_data_t *carrier,
int Mod_id,int CC_id,
RrcConfigurationReq *configuration
) {
......
......@@ -136,6 +136,37 @@ pthread_mutex_t lock_ue_freelist;
uint8_t ul_sqn,dl_sqn;
void rrc_send_cnf_to_ss(MessageDef *msg_p)
{
MessageDef *message_p = NULL;
instance_t instance = ITTI_MSG_DESTINATION_INSTANCE(msg_p);
LOG_I(RRC,"Sending confirmation to SYS_TASK for message:%s\n", ITTI_MSG_NAME(msg_p));
switch (ITTI_MSG_ID(msg_p))
{
case RRC_CONFIGURATION_REQ:
message_p = itti_alloc_new_message(TASK_RRC_ENB, instance, RRC_CONFIGURATION_CNF);
RRC_CONFIGURATION_CNF(message_p).status = 1;
break;
case RRC_AS_SECURITY_CONFIG_REQ:
message_p = itti_alloc_new_message(TASK_RRC_ENB, instance, RRC_AS_SECURITY_CONFIG_CNF);
RRC_AS_SECURITY_CONFIG_CNF(message_p).status = 1;
break;
case RRC_RBLIST_CFG_REQ:
message_p = itti_alloc_new_message(TASK_RRC_ENB, instance, RRC_RBLIST_CFG_CNF);
RRC_RBLIST_CFG_CNF(message_p).status = 1;
break;
default:
LOG_E(RRC, "fxn:%s Received invalid message type\n", __FUNCTION__);
break;
}
itti_send_msg_to_task(TASK_SYS, instance, message_p);
LOG_I(RRC, "Sent Message to SYS_TASK\n");
}
void
openair_rrc_on(
const protocol_ctxt_t *const ctxt_pP
......@@ -9741,6 +9772,8 @@ void *rrc_enb_process_itti_msg(void *notUsed) {
case RRC_CONFIGURATION_REQ:
LOG_I(RRC, "[eNB %ld] Received %s : %p\n", instance, msg_name_p, &RRC_CONFIGURATION_REQ(msg_p));
openair_rrc_eNB_configuration(ENB_INSTANCE_TO_MODULE_ID(instance), &RRC_CONFIGURATION_REQ(msg_p));
if (RC.ss.mode >= SS_SOFTMODEM)
rrc_send_cnf_to_ss(msg_p);
break;
/* Messages from F1AP task */
......@@ -9799,7 +9832,6 @@ void *rrc_enb_process_itti_msg(void *notUsed) {
RLC_SDU_INDICATION(msg_p).message_id);
break;
//#ifdef ENB_SS
case SS_RRC_PDU_REQ:
if (RC.ss.mode >= SS_SOFTMODEM)
{
......@@ -10044,42 +10076,49 @@ void *rrc_enb_process_itti_msg(void *notUsed) {
pdcp_data_req(&ctxt, SRB_FLAG_NO, SS_DRB_PDU_REQ(msg_p).drb_id, 0, 0, SS_DRB_PDU_REQ(msg_p).sdu_size, SS_DRB_PDU_REQ(msg_p).sdu, PDCP_TRANSMISSION_MODE_DATA, NULL, NULL);
break;
case RRC_AS_SECURITY_CONFIG_REQ:
LOG_A(RRC,"[eNB %ld] Received %s : %p, Integrity_Algo: %d, Ciphering_Algo: %ld \n",instance, msg_name_p, &RRC_AS_SECURITY_CONFIG_REQ(msg_p),RRC_AS_SECURITY_CONFIG_REQ(msg_p).Integrity.integrity_algorithm,RRC_AS_SECURITY_CONFIG_REQ(msg_p).Ciphering.ciphering_algorithm);
if(RRC_AS_SECURITY_CONFIG_REQ(msg_p).isIntegrityInfoPresent && RRC_AS_SECURITY_CONFIG_REQ(msg_p).Integrity.kRRCint)
{
printf("kRRCint in RRC:\n");
for(int i=0;i<32;i++)
case RRC_AS_SECURITY_CONFIG_REQ:
LOG_A(RRC,"[eNB %ld] Received %s : %p, Integrity_Algo: %d, Ciphering_Algo: %ld \n",
instance,
msg_name_p,
&RRC_AS_SECURITY_CONFIG_REQ(msg_p),
RRC_AS_SECURITY_CONFIG_REQ(msg_p).Integrity.integrity_algorithm,
RRC_AS_SECURITY_CONFIG_REQ(msg_p).Ciphering.ciphering_algorithm);
if(RRC_AS_SECURITY_CONFIG_REQ(msg_p).isIntegrityInfoPresent && RRC_AS_SECURITY_CONFIG_REQ(msg_p).Integrity.kRRCint)
{
LOG_D(RRC,"kRRCint in RRC: %02x\n",RRC_AS_SECURITY_CONFIG_REQ(msg_p).Integrity.kRRCint[i]);
printf("kRRCint in RRC:\n");
for(int i=0;i<32;i++)
{
LOG_D(RRC,"kRRCint in RRC: %02x\n",RRC_AS_SECURITY_CONFIG_REQ(msg_p).Integrity.kRRCint[i]);
}
printf("\n");
}
printf("\n");
}
if(RRC_AS_SECURITY_CONFIG_REQ(msg_p).isCipheringInfoPresent && RRC_AS_SECURITY_CONFIG_REQ(msg_p).Ciphering.kRRCenc)
{
printf("kRRCenc in RRC:\n");
for(int j=0;j<16;j++)
if(RRC_AS_SECURITY_CONFIG_REQ(msg_p).isCipheringInfoPresent && RRC_AS_SECURITY_CONFIG_REQ(msg_p).Ciphering.kRRCenc)
{
LOG_D(RRC,"kRRCenc in RRC: %02x\n",RRC_AS_SECURITY_CONFIG_REQ(msg_p).Ciphering.kRRCenc[j]);
printf("kRRCenc in RRC:\n");
for(int j=0;j<16;j++)
{
LOG_D(RRC,"kRRCenc in RRC: %02x\n",RRC_AS_SECURITY_CONFIG_REQ(msg_p).Ciphering.kRRCenc[j]);
}
printf("\n");
}
printf("\n");
}
if(RRC_AS_SECURITY_CONFIG_REQ(msg_p).isCipheringInfoPresent && RRC_AS_SECURITY_CONFIG_REQ(msg_p).Ciphering.kUPenc)
{
LOG_D(RRC,"kUPenc in RRC:\n");
for(int k=0;k<16;k++)
if(RRC_AS_SECURITY_CONFIG_REQ(msg_p).isCipheringInfoPresent && RRC_AS_SECURITY_CONFIG_REQ(msg_p).Ciphering.kUPenc)
{
LOG_D(RRC,"kUPenc in RRC: %02x\n",RRC_AS_SECURITY_CONFIG_REQ(msg_p).Ciphering.kUPenc[k]);
LOG_D(RRC,"kUPenc in RRC:\n");
for(int k=0;k<16;k++)
{
LOG_D(RRC,"kUPenc in RRC: %02x\n",RRC_AS_SECURITY_CONFIG_REQ(msg_p).Ciphering.kUPenc[k]);
}
LOG_D(RRC,"\n");
}
LOG_D(RRC,"\n");
}
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt,
instance,
ENB_FLAG_YES,
RRC_AS_SECURITY_CONFIG_REQ(msg_p).rnti,
msg_p->ittiMsgHeader.lte_time.frame,
msg_p->ittiMsgHeader.lte_time.slot);
rrc_eNB_as_security_configuration_req(&ctxt, ENB_INSTANCE_TO_MODULE_ID(instance), &RRC_AS_SECURITY_CONFIG_REQ(msg_p));
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt,
instance,
ENB_FLAG_YES,
RRC_AS_SECURITY_CONFIG_REQ(msg_p).rnti,
msg_p->ittiMsgHeader.lte_time.frame,
msg_p->ittiMsgHeader.lte_time.slot);
rrc_eNB_as_security_configuration_req(&ctxt, ENB_INSTANCE_TO_MODULE_ID(instance), &RRC_AS_SECURITY_CONFIG_REQ(msg_p));
rrc_send_cnf_to_ss(msg_p);
break;
case SS_SS_PAGING_IND:
......@@ -10092,6 +10131,7 @@ void *rrc_enb_process_itti_msg(void *notUsed) {
case RRC_RBLIST_CFG_REQ:
LOG_A(RRC, "[eNB %ld] Received %s : %p, RB Count:%d\n", instance, msg_name_p, &RRC_RBLIST_CFG_REQ(msg_p),RRC_RBLIST_CFG_REQ(msg_p).rb_count);
rrc_eNB_rblist_configuration(ENB_INSTANCE_TO_MODULE_ID(instance), &RRC_RBLIST_CFG_REQ(msg_p));
rrc_send_cnf_to_ss(msg_p);
break;
default:
......
......@@ -22,7 +22,7 @@
#define _SS_ENB_CONTEXT_
#include "SidlCommon.h"
#include "SIDL_EUTRA_SYSTEM_PORT.h"
#if 0
#define SYS_L LOG_SYS(evId, SSConfig.sfn, SSConfig.sf, __VA_ARGS__)
#define SRB_L LOG_SRB(evId, SSConfig.sfn, SSConfig.sf, __VA_ARGS__)
......@@ -62,6 +62,15 @@ typedef struct SS_Cell_Context_s{
uint16_t ss_rnti_g;
} SS_Cell_Context_t;
typedef struct sys_cnf_info
{
enum ConfirmationResult_Type_Sel resType;
bool resVal;
enum SystemConfirm_Type_Sel cnfType;
uint8_t msg_buffer[1000];
uint8_t cnfFlag;
}sys_cnf_info_t;
typedef struct SSConfigContext_s {
/** List of Cells */
SS_Cell_Context_t SSCell_list[8];
......@@ -73,8 +82,8 @@ typedef struct SSConfigContext_s {
ss_set_timinfo_t vtinfo;
hash_table_t *vt_timer_table ; // key is SFN_SF
bool send_atten_cnf;
sys_cnf_info_t sys_cnf;
/** TODO: To add more */
} SSConfigContext_t;
typedef enum {
......
......@@ -63,6 +63,23 @@ enum MsgUserId
};
extern SSConfigContext_t SS_context;
pthread_cond_t sys_confirm_done_cond;
pthread_mutex_t sys_confirm_done_mutex;
int sys_confirm_done=-1;
static void wait_sys_confirm(char *thread_name) {
LOG_I(ENB_SS_PORTMAN_ACP, "Entry in fxn:%s\n",__FUNCTION__);
LOG_I(ENB_SS_PORTMAN_ACP, "waiting for SYS CONFRIM DONE Indication (%s)\n",thread_name);
pthread_mutex_lock( &sys_confirm_done_mutex );
while ( sys_confirm_done < 0 )
pthread_cond_wait( &sys_confirm_done_cond, &sys_confirm_done_mutex );
pthread_mutex_unlock(&sys_confirm_done_mutex );
LOG_I(ENB_SS_PORTMAN_ACP, "Received SYS CONFIRM (%s)\n", thread_name);
LOG_I(ENB_SS_PORTMAN_ACP, "Exit from fxn:%s\n",__FUNCTION__);
}
/*
* Function : ss_dumpReqMsg
* Description: Function for print the received message
......@@ -286,7 +303,7 @@ void ss_port_man_send_data(
void ss_eNB_port_man_init(void)
{
IpAddress_t ipaddr;
LOG_A(ENB_SS_PORTMAN, "Starting System Simulator Manager\n");
LOG_A(ENB_SS_PORTMAN_ACP, "Starting System Simulator Manager\n");
const char *hostIp;
hostIp = RC.ss.hostIp;
......@@ -311,11 +328,11 @@ void ss_eNB_port_man_init(void)
int ret = acpServerInitWithCtx(ipaddr, port, msgTable, aSize, &ctx_g);
if (ret < 0)
{
LOG_A(ENB_SS_PORTMAN, "Connection failure err=%d\n", ret);
LOG_A(ENB_SS_PORTMAN_ACP, "Connection failure err=%d\n", ret);
return;
}
int fd1 = acpGetSocketFd(ctx_g);
LOG_A(ENB_SS_PORTMAN, "Connection performed : %d\n", fd1);
LOG_A(ENB_SS_PORTMAN_ACP, "Connection performed : %d\n", fd1);
//itti_subscribe_event_fd(TASK_SS_PORTMAN, fd1);
......@@ -338,7 +355,7 @@ static inline void ss_eNB_read_from_socket(acpCtx_t ctx)
size_t msgSize = size; //2
unsigned char *buffer = (unsigned char *)acpMalloc(size);
assert(buffer);
LOG_D(ENB_SS_PORTMAN, "Entry in fxn:%s\n", __FUNCTION__);
LOG_D(ENB_SS_PORTMAN_ACP, "Entry in fxn:%s\n", __FUNCTION__);
int userId = acpRecvMsg(ctx, &msgSize, buffer);
// Error handling
......@@ -349,23 +366,23 @@ static inline void ss_eNB_read_from_socket(acpCtx_t ctx)
// Message not mapped to user id,
// this error should not appear on server side for the messages
// received from clients
LOG_E(GNB_APP, "Error: Message not mapped to user id\n");
LOG_E(ENB_SS_PORTMAN_ACP, "Error: Message not mapped to user id\n");
}
else if (userId == -ACP_ERR_SIDL_FAILURE)
{
// Server returned service error,
// this error should not appear on server side for the messages
// received from clients
LOG_E(GNB_APP, "Error: Server returned service error \n");
LOG_E(ENB_SS_PORTMAN_ACP, "Error: Server returned service error \n");
SidlStatus sidlStatus = -1;
acpGetMsgSidlStatus(msgSize, buffer, &sidlStatus);
acpFree(buffer);
}
else if (userId == -ACP_PEER_DISCONNECTED){
LOG_E(GNB_APP, "[SS_SRB] Error: Peer ordered shutdown\n");
LOG_E(ENB_SS_PORTMAN_ACP, "Error: Peer ordered shutdown\n");
}
else if (userId == -ACP_PEER_CONNECTED){
LOG_A(GNB_APP, "[SS_SRB] Peer connection established\n");
LOG_A(ENB_SS_PORTMAN_ACP, " Peer connection established\n");
}
else
{
......@@ -378,7 +395,7 @@ static inline void ss_eNB_read_from_socket(acpCtx_t ctx)
//Send Dummy Wake up ITTI message to SRB task.
if (RC.ss.mode >= SS_SOFTMODEM && SS_context.SSCell_list[cell_index_pm].State >= SS_STATE_CELL_ACTIVE)
{
LOG_A(ENB_SS_PORTMAN,"Sending Wake up signal/SS_RRC_PDU_IND (msg_Id:%d) to TASK_SS_SRB task \n", SS_RRC_PDU_IND);
LOG_A(ENB_SS_PORTMAN_ACP,"Sending Wake up signal/SS_RRC_PDU_IND (msg_Id:%d) to TASK_SS_SRB task \n", SS_RRC_PDU_IND);
MessageDef *message_p = itti_alloc_new_message(TASK_SS_PORTMAN, 0, SS_RRC_PDU_IND);
if (message_p)
{
......@@ -392,58 +409,62 @@ static inline void ss_eNB_read_from_socket(acpCtx_t ctx)
int send_res = itti_send_msg_to_task(TASK_SS_SRB, 0, message_p);
if (send_res < 0)
{
LOG_E(ENB_SS_PORTMAN, "Error in sending Wake up signal /SS_RRC_PDU_IND (msg_Id:%d) to TASK_SS_SRB\n", SS_RRC_PDU_IND);
LOG_E(ENB_SS_PORTMAN_ACP, "Error in sending Wake up signal /SS_RRC_PDU_IND (msg_Id:%d) to TASK_SS_SRB\n", SS_RRC_PDU_IND);
}
}
}
}
else
{
LOG_A(ENB_SS_PORTMAN, "received msg %d from the client.\n", userId);
if (acpSysProcessDecSrv(ctx, buffer, msgSize, &req) != 0)
LOG_A(ENB_SS_PORTMAN_ACP, "received msg %d from the client.\n", userId);
if (acpSysProcessDecSrv(ctx, buffer, msgSize, &req) != 0)
{
acpFree(buffer);
return;
}
ss_dumpReqMsg(req);
if (userId == MSG_SysProcess_userId)
{
bool ret_Val = false;
struct SYSTEM_CTRL_REQ *sys_req = (struct SYSTEM_CTRL_REQ *)req;
if (sys_req->Request.d == SystemRequest_Type_EnquireTiming)
{
acpFree(buffer);
return;
LOG_I(ENB_SS_PORTMAN_ACP, "Received EnquireTiming\n");
ret_Val = ss_eNB_port_man_handle_enquiryTiming(sys_req);
if (ret_Val == false)
LOG_E(ENB_SS_PORTMAN_ACP, "Error Sending EnquiryTiming Respone to TTCN\n");
}
ss_dumpReqMsg(req);
if (userId == MSG_SysProcess_userId)
else
{
bool ret_Val = false;
struct SYSTEM_CTRL_REQ *sys_req = (struct SYSTEM_CTRL_REQ *)req;
if (sys_req->Request.d == SystemRequest_Type_EnquireTiming)
{
LOG_I(ENB_SS_PORTMAN, "Locked the mutex for enq Timing\n");
LOG_I(ENB_SS_PORTMAN, "Received EnquireTiming\n");
ret_Val = ss_eNB_port_man_handle_enquiryTiming(sys_req);
if (ret_Val == false)
LOG_E(ENB_SS_PORTMAN, "Error Sending EnquiryTiming Respone to TTCN\n");
}
else
int rc = 0;
MessageDef *message_p = itti_alloc_new_message(TASK_SS_PORTMAN, 0, SS_SYS_PORT_MSG_IND);
if (message_p)
{
MessageDef *message_p = itti_alloc_new_message(TASK_SS_PORTMAN, 0, SS_SYS_PORT_MSG_IND);
if (message_p)
SS_SYS_PORT_MSG_IND(message_p).req = (struct SYSTEM_CTRL_REQ *)malloc(sizeof(struct SYSTEM_CTRL_REQ));
if (SS_SYS_PORT_MSG_IND(message_p).req == NULL)
{
LOG_E(ENB_SS_PORTMAN_ACP, "Error allocating memory for SYSTEM CTRL REQ\n");
return;
}
memset(SS_SYS_PORT_MSG_IND(message_p).req, 0, sizeof(struct SYSTEM_CTRL_REQ));
memcpy(SS_SYS_PORT_MSG_IND(message_p).req, req, sizeof(struct SYSTEM_CTRL_REQ));
SS_SYS_PORT_MSG_IND(message_p).userId = userId;
rc = itti_send_msg_to_task(TASK_SYS, 0, message_p);
if (rc == 0 )
{
SS_SYS_PORT_MSG_IND(message_p).req = (struct SYSTEM_CTRL_REQ *)malloc(sizeof(struct SYSTEM_CTRL_REQ));
if (SS_SYS_PORT_MSG_IND(message_p).req == NULL)
{
LOG_E(ENB_SS_PORTMAN, "Error allocating memory for SYSTEM CTRL REQ\n");
return;
}
memset(SS_SYS_PORT_MSG_IND(message_p).req, 0, sizeof(struct SYSTEM_CTRL_REQ));
memcpy(SS_SYS_PORT_MSG_IND(message_p).req, req, sizeof(struct SYSTEM_CTRL_REQ));
SS_SYS_PORT_MSG_IND(message_p).userId = userId;
if (SS_SYS_PORT_MSG_IND(message_p).req)
itti_send_msg_to_task(TASK_SYS, 0, message_p);
sys_confirm_done = -1;
/* wait for signal */
wait_sys_confirm("TASK_SYS");
}
}
sys_req = NULL;
}
sys_req = NULL;
}
}
acpSysProcessFreeSrv(req);
LOG_D(ENB_SS_PORTMAN, "Exit from fxn:%s\n", __FUNCTION__);
LOG_D(ENB_SS_PORTMAN_ACP, "Exit from fxn:%s\n", __FUNCTION__);
acpFree(buffer);
return;
......@@ -463,7 +484,7 @@ void *ss_port_man_process_itti_msg(void *notUsed)
MessageDef *received_msg = NULL;
int result;
LOG_D(ENB_SS_PORTMAN, "Entry in fxn:%s\n", __FUNCTION__);
itti_poll_msg(TASK_SS_PORTMAN, &received_msg);
itti_receive_msg(TASK_SS_PORTMAN, &received_msg);
if (received_msg != NULL)
{
LOG_A(ENB_SS_PORTMAN, "Received a message id : %d \n",
......@@ -502,7 +523,6 @@ void *ss_port_man_process_itti_msg(void *notUsed)
received_msg = NULL;
}
ss_eNB_read_from_socket(ctx_g);
LOG_D(ENB_SS_PORTMAN, "Exit from fxn:%s\n", __FUNCTION__);
return NULL;
}
......@@ -517,13 +537,25 @@ void *ss_port_man_process_itti_msg(void *notUsed)
* newState: No impact on state machine.
*
*/
void *ss_eNB_port_man_task(void *arg)
void *ss_eNB_port_man_eNB_task(void *arg)
{
while (1)
{
/* Now handle notifications for other sockets */
ss_port_man_process_itti_msg(NULL);
}
return NULL;
}
void *ss_eNB_port_man_acp_task(void *arg)
{
ss_eNB_port_man_init();
while (1)
{
/* Now handle notifications for other sockets */
(void)ss_port_man_process_itti_msg(NULL);
ss_eNB_read_from_socket(ctx_g);
}
return NULL;
......
......@@ -24,7 +24,7 @@
#include "acpSys.h"
void ss_eNB_port_man_init(void);
void *ss_eNB_port_man_task(void *arg);
void *ss_eNB_port_man_eNB_task(void *arg);
void *ss_eNB_port_man_acp_task(void *arg);
bool ss_eNB_port_man_handle_enquiryTiming(struct SYSTEM_CTRL_REQ *sys_req);
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment