Commit dc8694ce authored by Sreeshma Shiv's avatar Sreeshma Shiv

cleaning-xnsetup

parent b633b497
...@@ -95,6 +95,11 @@ typedef struct xnap_tdd_info_t { ...@@ -95,6 +95,11 @@ typedef struct xnap_tdd_info_t {
xnap_transmission_bandwidth_t tbw; xnap_transmission_bandwidth_t tbw;
} xnap_tdd_info_t; } xnap_tdd_info_t;
typedef struct xnap_snssai_s {
uint8_t sst;
uint8_t sd;
} xnap_snssai_t;
typedef struct xnap_served_cell_info_t { typedef struct xnap_served_cell_info_t {
// NR CGI // NR CGI
xnap_plmn_t plmn; xnap_plmn_t plmn;
...@@ -120,9 +125,8 @@ typedef struct xnap_setup_req_s { ...@@ -120,9 +125,8 @@ typedef struct xnap_setup_req_s {
uint32_t tai_support; uint32_t tai_support;
xnap_plmn_t plmn_support; xnap_plmn_t plmn_support;
// Number of slide support items // Number of slide support items
uint16_t num_ssi; uint16_t num_snssai;
uint8_t sst; xnap_snssai_t snssai[2];
uint8_t sd;
xnap_amf_regioninfo_t amf_region_info; xnap_amf_regioninfo_t amf_region_info;
uint8_t num_cells_available; uint8_t num_cells_available;
xnap_served_cell_info_t info; xnap_served_cell_info_t info;
......
...@@ -127,13 +127,9 @@ void gNB_app_register_xn(uint32_t gnb_id_num) ...@@ -127,13 +127,9 @@ void gNB_app_register_xn(uint32_t gnb_id_num)
LOG_I(XNAP, "GNB_ID: %d \n", gnb_id); LOG_I(XNAP, "GNB_ID: %d \n", gnb_id);
uint64_t id; uint64_t id;
char *name = NULL; char *name = NULL;
xnap_served_cell_info_t info; read_xn_setup(&id, &name, &XNAP_REGISTER_GNB_REQ(msg).setup_req);
read_xn_cell_info (&id, &name, &info); XNAP_REGISTER_GNB_REQ(msg).net_config = Read_IPconfig_Xn();
//read_xn_cell_info (&id, &name, &XNAP_REGISTER_GNB_REQ(msg).setup_req); XNAP_REGISTER_GNB_REQ(msg).gNB_name = name;
//XNAP_REGISTER_GNB_REQ(msg).setup_req = Read_setup_req_Xn (&id, &name, &info, &XNAP_REGISTER_GNB_REQ(msg).setup_req);
Read_setup_req_Xn (&id, &name, &info, &XNAP_REGISTER_GNB_REQ(msg).setup_req);
XNAP_REGISTER_GNB_REQ(msg).net_config = Read_IPconfig_Xn ();
//F1AP_DU_REGISTER_REQ(msg).net_config = read_DU_IP_config(&RC.nrmac[0]->eth_params_n);
itti_send_msg_to_task(TASK_XNAP, GNB_MODULE_ID_TO_INSTANCE(gnb_id), msg); itti_send_msg_to_task(TASK_XNAP, GNB_MODULE_ID_TO_INSTANCE(gnb_id), msg);
} }
} }
......
...@@ -2227,47 +2227,37 @@ int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_up ...@@ -2227,47 +2227,37 @@ int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_up
return(ret); return(ret);
} }
int read_xn_cell_info(uint64_t *id, void read_xn_setup(uint64_t *id, char **name, xnap_setup_req_t *req)
char **name,
xnap_served_cell_info_t *info)
{ {
memset(info, 0, sizeof(*info)); memset(req, 0, sizeof(*req));
int k=0; xnap_served_cell_info_t *info = &req->info;
paramdef_t GNBSParams[] = GNBSPARAMS_DESC; paramdef_t GNBSParams[] = GNBSPARAMS_DESC;
paramdef_t GNBParams[] = GNBPARAMS_DESC; paramdef_t GNBParams[] = GNBPARAMS_DESC;
paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0}; paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST, NULL, 0};
config_get(config_get_if(), GNBSParams, sizeofArray(GNBSParams), NULL); config_get(config_get_if(), GNBSParams, sizeofArray(GNBSParams), NULL);
NR_ServingCellConfigCommon_t *scc = calloc(1, sizeof(NR_ServingCellConfigCommon_t));
uint64_t ssb_bitmap = 0xff;
memset((void *)scc, 0, sizeof(NR_ServingCellConfigCommon_t));
prepare_scc(scc);
paramdef_t SCCsParams[] = SCCPARAMS_DESC(scc);
paramlist_def_t SCCsParamList = {GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON, NULL, 0};
int num_gnbs = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt; int num_gnbs = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt;
AssertFatal(num_gnbs > 0, "Failed to parse config file\n"); AssertFatal(num_gnbs == 1, "Failed to parse config file\n");
// Output a list of all gNBs. // Output a list of all gNBs.
config_getlist(config_get_if(),&GNBParamList, GNBParams, sizeofArray(GNBParams), NULL); config_getlist(config_get_if(), &GNBParamList, GNBParams, sizeof(GNBParams) / sizeof(paramdef_t), NULL);
AssertFatal(GNBParamList.paramarray[0][GNB_GNB_ID_IDX].uptr != NULL, "gNB id %u is not defined in configuration file\n", 0); AssertFatal(config_isparamset(GNBParamList.paramarray[0], GNB_GNB_ID_IDX),
for (int j = 0; j < num_gnbs; j++) { "%s is not defined in configuration file\n",
if (strcmp(GNBSParams[GNB_ACTIVE_GNBS_IDX].strlistptr[j], *(GNBParamList.paramarray[k][GNB_GNB_NAME_IDX].strptr)) == 0) { GNB_CONFIG_STRING_GNB_ID);
*id = *GNBParamList.paramarray[0][GNB_GNB_ID_IDX].uptr;
AssertFatal(strcmp(GNBSParams[GNB_ACTIVE_GNBS_IDX].strlistptr[0], *GNBParamList.paramarray[0][GNB_GNB_NAME_IDX].strptr) == 0,
"no active gNB found/mismatch of gNBs: %s vs %s\n",
GNBSParams[GNB_ACTIVE_GNBS_IDX].strlistptr[0],
*GNBParamList.paramarray[0][GNB_GNB_NAME_IDX].strptr);
char aprefix[MAX_OPTNAME_SIZE * 2 + 8]; char aprefix[MAX_OPTNAME_SIZE * 2 + 8];
sprintf(aprefix, "%s.[0]", GNB_CONFIG_STRING_GNB_LIST); sprintf(aprefix, "%s.[0]", GNB_CONFIG_STRING_GNB_LIST);
paramdef_t PLMNParams[] = GNBPLMNPARAMS_DESC; paramdef_t PLMNParams[] = GNBPLMNPARAMS_DESC;
/* map parameter checking array instances to parameter definition array instances */ /* map parameter checking array instances to parameter definition array instances */
checkedparam_t config_check_PLMNParams[] = PLMNPARAMS_CHECK; checkedparam_t config_check_PLMNParams[] = PLMNPARAMS_CHECK;
/* char* gnb_ipv4_address_for_NGU = NULL;
uint32_t gnb_port_for_NGU = 0;
char* gnb_ipv4_address_for_S1U = NULL;
uint32_t gnb_port_for_S1U = 0;*/
for (int I = 0; I < sizeof(PLMNParams) / sizeof(paramdef_t); ++I) for (int I = 0; I < sizeof(PLMNParams) / sizeof(paramdef_t); ++I)
PLMNParams[I].chkPptr = &(config_check_PLMNParams[I]); PLMNParams[I].chkPptr = &(config_check_PLMNParams[I]);
paramlist_def_t PLMNParamList = {GNB_CONFIG_STRING_PLMN_LIST, NULL, 0}; paramlist_def_t PLMNParamList = {GNB_CONFIG_STRING_PLMN_LIST, NULL, 0};
config_getlist(config_get_if(), &PLMNParamList, PLMNParams, sizeofArray(PLMNParams), aprefix); config_getlist(config_get_if(), &PLMNParamList, PLMNParams, sizeofArray(PLMNParams), aprefix);
*id = *(GNBParamList.paramarray[0][GNB_GNB_ID_IDX].uptr);
*name = strdup(*(GNBParamList.paramarray[0][GNB_GNB_NAME_IDX].strptr)); *name = strdup(*(GNBParamList.paramarray[0][GNB_GNB_NAME_IDX].strptr));
//info->tac = malloc(sizeof(*info->tac));
//AssertFatal(info->tac != NULL, "out of memory\n");
info->tac = *GNBParamList.paramarray[0][GNB_TRACKING_AREA_CODE_IDX].uptr; info->tac = *GNBParamList.paramarray[0][GNB_TRACKING_AREA_CODE_IDX].uptr;
info->plmn.mcc = *PLMNParamList.paramarray[0][GNB_MOBILE_COUNTRY_CODE_IDX].uptr; info->plmn.mcc = *PLMNParamList.paramarray[0][GNB_MOBILE_COUNTRY_CODE_IDX].uptr;
info->plmn.mnc = *PLMNParamList.paramarray[0][GNB_MOBILE_NETWORK_CODE_IDX].uptr; info->plmn.mnc = *PLMNParamList.paramarray[0][GNB_MOBILE_NETWORK_CODE_IDX].uptr;
...@@ -2276,13 +2266,18 @@ int read_xn_cell_info(uint64_t *id, ...@@ -2276,13 +2266,18 @@ int read_xn_cell_info(uint64_t *id,
"BAD MNC DIGIT LENGTH %d", "BAD MNC DIGIT LENGTH %d",
info->plmn.mnc_digit_length); info->plmn.mnc_digit_length);
info->nr_cellid = (uint64_t) * (GNBParamList.paramarray[0][GNB_NRCELLID_IDX].u64ptr); info->nr_cellid = (uint64_t) * (GNBParamList.paramarray[0][GNB_NRCELLID_IDX].u64ptr);
//sprintf(aprefix, "%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, 0); paramdef_t SNSSAIParams[] = GNBSNSSAIPARAMS_DESC;
config_getlist(config_get_if(),&SCCsParamList, NULL, 0, aprefix); checkedparam_t config_check_SNSSAIParams[] = SNSSAIPARAMS_CHECK;
if (SCCsParamList.numelt > 0) { for (int J = 0; J < sizeofArray(SNSSAIParams); ++J)
//sprintf(aprefix, "%s.[%i].%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, 0, GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON, 0); SNSSAIParams[J].chkPptr = &(config_check_SNSSAIParams[J]);
config_get(config_get_if(), SCCsParams, sizeofArray(SCCsParams), aprefix); paramlist_def_t SNSSAIParamList = {GNB_CONFIG_STRING_SNSSAI_LIST, NULL, 0};
fix_scc(scc, ssb_bitmap); config_getlist(config_get_if(), &SNSSAIParamList, SNSSAIParams, sizeofArray(SNSSAIParams), aprefix);
req->num_snssai = SNSSAIParamList.numelt;
for (int s = 0; s < SNSSAIParamList.numelt; ++s) {
req->snssai[s].sst = *SNSSAIParamList.paramarray[s][GNB_SLICE_SERVICE_TYPE_IDX].uptr;
req->snssai[s].sd = (*SNSSAIParamList.paramarray[s][GNB_SLICE_DIFFERENTIATOR_IDX].uptr & 0xffffff);
} }
NR_ServingCellConfigCommon_t *scc = get_scc_config(config_get_if(), 6);
info->nr_pci = *scc->physCellId; info->nr_pci = *scc->physCellId;
struct NR_FrequencyInfoDL *frequencyInfoDL = scc->downlinkConfigCommon->frequencyInfoDL; struct NR_FrequencyInfoDL *frequencyInfoDL = scc->downlinkConfigCommon->frequencyInfoDL;
if (scc->tdd_UL_DL_ConfigurationCommon) { if (scc->tdd_UL_DL_ConfigurationCommon) {
...@@ -2304,44 +2299,19 @@ int read_xn_cell_info(uint64_t *id, ...@@ -2304,44 +2299,19 @@ int read_xn_cell_info(uint64_t *id,
fdd->dl_freqinfo.band = *frequencyInfoDL->frequencyBandList.list.array[0]; fdd->dl_freqinfo.band = *frequencyInfoDL->frequencyBandList.list.array[0];
fdd->ul_freqinfo.band = *scc->uplinkConfigCommon->frequencyInfoUL->frequencyBandList->list.array[0]; fdd->ul_freqinfo.band = *scc->uplinkConfigCommon->frequencyInfoUL->frequencyBandList->list.array[0];
} }
info->measurement_timing_information = "0"; info->measurement_timing_information = "0";
}
}
return 1;
}
void Read_setup_req_Xn(uint64_t *id, char **name,
xnap_served_cell_info_t *info,
xnap_setup_req_t *req)
{
memset(req, 0, sizeof(*req));
AssertFatal(info != NULL, "out of memory\n");
printf("gnb id %lu \n",*id);
req->gNB_id = *id; req->gNB_id = *id;
req->info = *info;
req->tai_support = info->tac; req->tai_support = info->tac;
req->plmn_support = info->plmn; req->plmn_support = info->plmn;
LOG_I(GNB_APP,
"XNAP: gNB_id %ld, TAC %d MCC/MNC/length %d/%d/%d cellID %ld\n",
req->gNB_id,
req->info.tac,
req->info.plmn.mcc,
req->info.plmn.mnc,
req->info.plmn.mnc_digit_length,
req->info.nr_cellid);
//req.gNB_id = *(GNBParamList.paramarray[0][GNB_GNB_ID_IDX].uptr);
//req.tai_support = *GNBParamList.paramarray[0][GNB_TRACKING_AREA_CODE_IDX].uptr;
// return req;
} }
xnap_net_config_t Read_IPconfig_Xn(void) xnap_net_config_t Read_IPconfig_Xn(void)
{ {
char *cidr = NULL; char *cidr = NULL;
char *address = NULL; char *address = NULL;
char* gnb_ipv4_address_for_NGU = NULL; char *gnb_ipv4_address_for_NGU = NULL;
uint32_t gnb_port_for_NGU = 0; uint32_t gnb_port_for_NGU = 0;
char* gnb_ipv4_address_for_S1U = NULL; char *gnb_ipv4_address_for_S1U = NULL;
uint32_t gnb_port_for_S1U = 0; uint32_t gnb_port_for_S1U = 0;
xnap_net_config_t nc = {0}; xnap_net_config_t nc = {0};
paramdef_t XnParams[] = XnPARAMS_DESC; paramdef_t XnParams[] = XnPARAMS_DESC;
...@@ -2350,13 +2320,15 @@ xnap_net_config_t Read_IPconfig_Xn(void) ...@@ -2350,13 +2320,15 @@ xnap_net_config_t Read_IPconfig_Xn(void)
paramdef_t SCTPParams[] = GNBSCTPPARAMS_DESC; paramdef_t SCTPParams[] = GNBSCTPPARAMS_DESC;
char aprefix[MAX_OPTNAME_SIZE * 2 + 8]; char aprefix[MAX_OPTNAME_SIZE * 2 + 8];
config_getlist(config_get_if(), &XnParamList, XnParams, sizeofArray(XnParams), aprefix); config_getlist(config_get_if(), &XnParamList, XnParams, sizeofArray(XnParams), aprefix);
AssertFatal(XnParamList.numelt <= XNAP_MAX_NB_GNB_IP_ADDRESS, "value of XnParamList.numelt %d must be lower than XnAP_MAX_NB_GNB_IP_ADDRESS %d value: reconsider to increase XNAP_MAX_NB_GNB_IP_ADDRESS\n", XnParamList.numelt, XNAP_MAX_NB_GNB_IP_ADDRESS); AssertFatal(XnParamList.numelt <= XNAP_MAX_NB_GNB_IP_ADDRESS,
"value of XnParamList.numelt %d must be lower than XnAP_MAX_NB_GNB_IP_ADDRESS %d value: reconsider to increase "
"XNAP_MAX_NB_GNB_IP_ADDRESS\n",
XnParamList.numelt,
XNAP_MAX_NB_GNB_IP_ADDRESS);
for (int l = 0; l < XnParamList.numelt; l++) { for (int l = 0; l < XnParamList.numelt; l++) {
nc.nb_xn += 1; nc.nb_xn += 1;
strcpy(nc.target_gnb_xn_ip_address[l].ipv4_address, strcpy(nc.target_gnb_xn_ip_address[l].ipv4_address, *(XnParamList.paramarray[l][GNB_Xn_IPV4_ADDRESS_IDX].strptr));
*(XnParamList.paramarray[l][GNB_Xn_IPV4_ADDRESS_IDX].strptr)); strcpy(nc.target_gnb_xn_ip_address[l].ipv6_address, *(XnParamList.paramarray[l][GNB_Xn_IPV6_ADDRESS_IDX].strptr));
strcpy(nc.target_gnb_xn_ip_address[l].ipv6_address,
*(XnParamList.paramarray[l][GNB_Xn_IPV6_ADDRESS_IDX].strptr));
if (strcmp(*(XnParamList.paramarray[l][GNB_Xn_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) { if (strcmp(*(XnParamList.paramarray[l][GNB_Xn_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) {
nc.target_gnb_xn_ip_address[l].ipv4 = 1; nc.target_gnb_xn_ip_address[l].ipv4 = 1;
...@@ -2373,10 +2345,6 @@ xnap_net_config_t Read_IPconfig_Xn(void) ...@@ -2373,10 +2345,6 @@ xnap_net_config_t Read_IPconfig_Xn(void)
// NETWORK_INTERFACES // NETWORK_INTERFACES
config_get(config_get_if(), NETParams, sizeofArray(NETParams), aprefix); config_get(config_get_if(), NETParams, sizeofArray(NETParams), aprefix);
nc.gnb_port_for_XNC = (uint32_t) * (NETParams[GNB_PORT_FOR_XNC_IDX].uptr); nc.gnb_port_for_XNC = (uint32_t) * (NETParams[GNB_PORT_FOR_XNC_IDX].uptr);
if (NETParams[GNB_IPV4_ADDR_FOR_XNC_IDX].strptr == NULL){
printf("fhjjkkjhhjkj \n");
}
printf("gnb port %d \n",nc.gnb_port_for_XNC);
if ((NETParams[GNB_IPV4_ADDR_FOR_XNC_IDX].strptr == NULL) || (nc.gnb_port_for_XNC == 0)) { if ((NETParams[GNB_IPV4_ADDR_FOR_XNC_IDX].strptr == NULL) || (nc.gnb_port_for_XNC == 0)) {
LOG_E(RRC, "Add gNB IPv4 address and/or port for XNC in the CONF file!\n"); LOG_E(RRC, "Add gNB IPv4 address and/or port for XNC in the CONF file!\n");
exit(1); exit(1);
...@@ -2392,7 +2360,7 @@ xnap_net_config_t Read_IPconfig_Xn(void) ...@@ -2392,7 +2360,7 @@ xnap_net_config_t Read_IPconfig_Xn(void)
nc.sctp_streams.sctp_out_streams = SCTP_OUT_STREAMS; nc.sctp_streams.sctp_out_streams = SCTP_OUT_STREAMS;
nc.sctp_streams.sctp_in_streams = SCTP_IN_STREAMS; nc.sctp_streams.sctp_in_streams = SCTP_IN_STREAMS;
if (get_softmodem_params()->sa) { if (get_softmodem_params()->sa) {
//sprintf(aprefix, "%s.[%i].%s", GNB_CONFIG_STRING_GNB_LIST, 0, GNB_CONFIG_STRING_SCTP_CONFIG); // sprintf(aprefix, "%s.[%i].%s", GNB_CONFIG_STRING_GNB_LIST, 0, GNB_CONFIG_STRING_SCTP_CONFIG);
config_get(config_get_if(), SCTPParams, sizeofArray(SCTPParams), aprefix); config_get(config_get_if(), SCTPParams, sizeofArray(SCTPParams), aprefix);
nc.sctp_streams.sctp_in_streams = (uint16_t) * (SCTPParams[GNB_SCTP_INSTREAMS_IDX].uptr); nc.sctp_streams.sctp_in_streams = (uint16_t) * (SCTPParams[GNB_SCTP_INSTREAMS_IDX].uptr);
nc.sctp_streams.sctp_out_streams = (uint16_t) * (SCTPParams[GNB_SCTP_OUTSTREAMS_IDX].uptr); nc.sctp_streams.sctp_out_streams = (uint16_t) * (SCTPParams[GNB_SCTP_OUTSTREAMS_IDX].uptr);
......
...@@ -108,8 +108,7 @@ int RCconfig_NR_X2(MessageDef *msg_p, uint32_t i); ...@@ -108,8 +108,7 @@ int RCconfig_NR_X2(MessageDef *msg_p, uint32_t i);
void wait_f1_setup_response(void); void wait_f1_setup_response(void);
int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_update_t *gnb_cu_cfg_update); int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_update_t *gnb_cu_cfg_update);
MessageDef *RCconfig_NR_CU_E1(const E1_t *entity); MessageDef *RCconfig_NR_CU_E1(const E1_t *entity);
int read_xn_cell_info(uint64_t *id, char **name, xnap_served_cell_info_t *info); void read_xn_setup(uint64_t *id, char **name, xnap_setup_req_t *req);
void Read_setup_req_Xn(uint64_t *id, char **name, xnap_served_cell_info_t *info, xnap_setup_req_t *req);
xnap_net_config_t Read_IPconfig_Xn(void); xnap_net_config_t Read_IPconfig_Xn(void);
ngran_node_t get_node_type(void); ngran_node_t get_node_type(void);
......
...@@ -112,15 +112,14 @@ int xnap_gNB_generate_xn_setup_request(sctp_assoc_t assoc_id, xnap_setup_req_t * ...@@ -112,15 +112,14 @@ int xnap_gNB_generate_xn_setup_request(sctp_assoc_t assoc_id, xnap_setup_req_t *
req->info.plmn.mnc_digit_length, req->info.plmn.mnc_digit_length,
&e_BroadcastPLMNinTAISupport_ItemIE->plmn_id); &e_BroadcastPLMNinTAISupport_ItemIE->plmn_id);
{
for (int k = 0; k < 1; k++) { for (int k = 0; k < 1; k++) {
e_S_NSSAI_ItemIE = (XNAP_S_NSSAI_t *)calloc(1, sizeof(XNAP_S_NSSAI_t)); e_S_NSSAI_ItemIE = (XNAP_S_NSSAI_t *)calloc(1, sizeof(XNAP_S_NSSAI_t));
e_S_NSSAI_ItemIE->sst.size = 1; // OCTET STRING(SIZE(1)) INT8_TO_OCTET_STRING(req->snssai[k].sst, &e_S_NSSAI_ItemIE->sst);
e_S_NSSAI_ItemIE->sst.buf = calloc(e_S_NSSAI_ItemIE->sst.size, sizeof(OCTET_STRING_t)); if (req->snssai[k].sd != 0xffffff && req->snssai[k].sd != 0) {
e_S_NSSAI_ItemIE->sst.buf[0] = 1; e_S_NSSAI_ItemIE->sd = calloc(3, sizeof(OCTET_STRING_t));
INT24_TO_OCTET_STRING(req->snssai[k].sd, e_S_NSSAI_ItemIE->sd);
asn1cSeqAdd(&e_BroadcastPLMNinTAISupport_ItemIE->tAISliceSupport_List.list, e_S_NSSAI_ItemIE);
} }
asn1cSeqAdd(&e_BroadcastPLMNinTAISupport_ItemIE->tAISliceSupport_List.list, e_S_NSSAI_ItemIE);
} }
asn1cSeqAdd(&TAISupport_ItemIEs->broadcastPLMNs.list, e_BroadcastPLMNinTAISupport_ItemIE); asn1cSeqAdd(&TAISupport_ItemIEs->broadcastPLMNs.list, e_BroadcastPLMNinTAISupport_ItemIE);
} }
...@@ -310,7 +309,6 @@ int xnap_gNB_generate_xn_setup_request(sctp_assoc_t assoc_id, xnap_setup_req_t * ...@@ -310,7 +309,6 @@ int xnap_gNB_generate_xn_setup_request(sctp_assoc_t assoc_id, xnap_setup_req_t *
servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRSCS = XNAP_NRSCS_scs120; servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRSCS = XNAP_NRSCS_scs120;
break; break;
} }
switch (tdd->tbw.nrb) { switch (tdd->tbw.nrb) {
case 11: case 11:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb11; servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb11;
...@@ -371,7 +369,7 @@ int xnap_gNB_generate_xn_setup_request(sctp_assoc_t assoc_id, xnap_setup_req_t * ...@@ -371,7 +369,7 @@ int xnap_gNB_generate_xn_setup_request(sctp_assoc_t assoc_id, xnap_setup_req_t *
e_GlobalAMF_Region_Information_ItemIEs->amf_region_id.size = 1; e_GlobalAMF_Region_Information_ItemIEs->amf_region_id.size = 1;
e_GlobalAMF_Region_Information_ItemIEs->amf_region_id.buf = e_GlobalAMF_Region_Information_ItemIEs->amf_region_id.buf =
calloc(1, e_GlobalAMF_Region_Information_ItemIEs->amf_region_id.size); calloc(1, e_GlobalAMF_Region_Information_ItemIEs->amf_region_id.size);
e_GlobalAMF_Region_Information_ItemIEs->amf_region_id.buf[0] = 80; e_GlobalAMF_Region_Information_ItemIEs->amf_region_id.buf[0] = 80; // TODO: Hardcoded for now
e_GlobalAMF_Region_Information_ItemIEs->amf_region_id.bits_unused = 0; e_GlobalAMF_Region_Information_ItemIEs->amf_region_id.bits_unused = 0;
asn1cSeqAdd(&ie->value.choice.AMF_Region_Information.list, e_GlobalAMF_Region_Information_ItemIEs); asn1cSeqAdd(&ie->value.choice.AMF_Region_Information.list, e_GlobalAMF_Region_Information_ItemIEs);
...@@ -608,28 +606,28 @@ int xnap_gNB_generate_xn_setup_response(sctp_assoc_t assoc_id, xnap_setup_resp_t ...@@ -608,28 +606,28 @@ int xnap_gNB_generate_xn_setup_response(sctp_assoc_t assoc_id, xnap_setup_resp_t
} }
switch (fdd->ul_tbw.nrb) { switch (fdd->ul_tbw.nrb) {
case 11: case 0:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb11; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb11;
break; break;
case 18: case 1:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb18; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb18;
break; break;
case 24: case 2:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb24; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb24;
break; break;
case 78: case 11:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb78; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb78;
break; break;
case 106: case 14:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb106; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb106;
break; break;
case 162: case 21:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb162; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb162;
break; break;
case 217: case 24:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb217; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb217;
break; break;
case 273: case 28:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb273; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->ulNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb273;
break; break;
default: default:
...@@ -651,32 +649,32 @@ int xnap_gNB_generate_xn_setup_response(sctp_assoc_t assoc_id, xnap_setup_resp_t ...@@ -651,32 +649,32 @@ int xnap_gNB_generate_xn_setup_response(sctp_assoc_t assoc_id, xnap_setup_resp_t
break; break;
} }
switch (fdd->dl_tbw.nrb) { switch (fdd->dl_tbw.nrb) {
case 11: case 0:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb11; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb11;
break; break;
case 18: case 1:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb18; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb18;
break; break;
case 24: case 2:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb24; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb24;
break; break;
case 78: case 11:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb78; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb78;
break; break;
case 106: case 14:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb106; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb106;
break; break;
case 162: case 21:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb162; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb162;
break; break;
case 217: case 24:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb217; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb217;
break; break;
case 273: case 28:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb273; servedCellMember->served_cell_info_NR.nrModeInfo.choice.fdd->dlNRTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb273;
break; break;
default: default:
AssertFatal(0, "Failed: Check value for N_RB_DL/N_RB_UL"); AssertFatal(0, "Failed: Check value for N_RB_DL/N_RB_UL"); // TODO: Add all values or function to convert
break; break;
} }
} else if (resp->info.mode == XNAP_MODE_TDD) { // TDD } else if (resp->info.mode == XNAP_MODE_TDD) { // TDD
...@@ -690,6 +688,7 @@ int xnap_gNB_generate_xn_setup_response(sctp_assoc_t assoc_id, xnap_setup_resp_t ...@@ -690,6 +688,7 @@ int xnap_gNB_generate_xn_setup_response(sctp_assoc_t assoc_id, xnap_setup_resp_t
asn1cSeqAdd(&servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrFrequencyInfo.frequencyBand_List.list, asn1cSeqAdd(&servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrFrequencyInfo.frequencyBand_List.list,
nrfreqbanditem); nrfreqbanditem);
} }
printf("nrnrb %d \n", tdd->tbw.nrb);
switch (tdd->tbw.scs) { switch (tdd->tbw.scs) {
case 15: case 15:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRSCS = XNAP_NRSCS_scs15; servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRSCS = XNAP_NRSCS_scs15;
...@@ -705,32 +704,32 @@ int xnap_gNB_generate_xn_setup_response(sctp_assoc_t assoc_id, xnap_setup_resp_t ...@@ -705,32 +704,32 @@ int xnap_gNB_generate_xn_setup_response(sctp_assoc_t assoc_id, xnap_setup_resp_t
break; break;
} }
switch (tdd->tbw.nrb) { switch (tdd->tbw.nrb) {
case 11: case 0:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb11; servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb11;
break; break;
case 18: case 1:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb18; servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb18;
break; break;
case 24: case 2:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb24; servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb24;
break; break;
case 78: case 11:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb78; servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb78;
break; break;
case 106: case 14:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb106; servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb106;
break; break;
case 162: case 21:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb162; servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb162;
break; break;
case 217: case 24:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb217; servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb217;
break; break;
case 273: case 28:
servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb273; servedCellMember->served_cell_info_NR.nrModeInfo.choice.tdd->nrTransmissonBandwidth.nRNRB = XNAP_NRNRB_nrb273;
break; break;
default: default:
AssertFatal(0, "Failed: Check value for N_RB_DL/N_RB_UL"); AssertFatal(0, "Failed: Check value for N_RB_DL/N_RB_UL"); // TODO: Add all values or function to convert.
break; break;
} }
} }
......
...@@ -74,7 +74,6 @@ static void xnap_gNB_handle_sctp_association_resp(instance_t instance, sctp_new_ ...@@ -74,7 +74,6 @@ static void xnap_gNB_handle_sctp_association_resp(instance_t instance, sctp_new_
xnap_gNB_instance_t *instance_xn = xnap_gNB_get_instance(instance); // managementproc; xnap_gNB_instance_t *instance_xn = xnap_gNB_get_instance(instance); // managementproc;
DevAssert(sctp_new_association_resp != NULL); DevAssert(sctp_new_association_resp != NULL);
DevAssert(instance_xn != NULL); DevAssert(instance_xn != NULL);
printf("reached ass resp %d \n", sctp_new_association_resp->assoc_id);
/*Return if connection to gNB failed- to be modified if needed. (Exit on error in X2AP)*/ /*Return if connection to gNB failed- to be modified if needed. (Exit on error in X2AP)*/
if (sctp_new_association_resp->sctp_state == SCTP_STATE_UNREACHABLE) { if (sctp_new_association_resp->sctp_state == SCTP_STATE_UNREACHABLE) {
LOG_E(XNAP, LOG_E(XNAP,
...@@ -106,8 +105,6 @@ static void xnap_gNB_handle_sctp_association_resp(instance_t instance, sctp_new_ ...@@ -106,8 +105,6 @@ static void xnap_gNB_handle_sctp_association_resp(instance_t instance, sctp_new_
xnap_gnb_data_p->out_streams = sctp_new_association_resp->out_streams; xnap_gnb_data_p->out_streams = sctp_new_association_resp->out_streams;
xnap_dump_trees(instance); xnap_dump_trees(instance);
xnap_insert_gnb(instance, xnap_gnb_data_p); xnap_insert_gnb(instance, xnap_gnb_data_p);
// RB_INSERT(xnap_gnb_tree, &instance_xn->xnap_gnbs, xnap_gnb_data_p);
// instance_xn->num_gnbs++;
xnap_dump_trees(instance); xnap_dump_trees(instance);
xnap_gNB_generate_xn_setup_request(sctp_new_association_resp->assoc_id, &instance_xn->setup_req); xnap_gNB_generate_xn_setup_request(sctp_new_association_resp->assoc_id, &instance_xn->setup_req);
} }
...@@ -141,9 +138,7 @@ static void xnap_gNB_send_sctp_assoc_req(instance_t instance, xnap_net_config_t ...@@ -141,9 +138,7 @@ static void xnap_gNB_send_sctp_assoc_req(instance_t instance, xnap_net_config_t
MessageDef *message = NULL; MessageDef *message = NULL;
sctp_new_association_req_t *sctp_new_association_req = NULL; sctp_new_association_req_t *sctp_new_association_req = NULL;
DevAssert(nc != NULL); DevAssert(nc != NULL);
printf("blahblahblah \n");
message = itti_alloc_new_message(TASK_XNAP, 0, SCTP_NEW_ASSOCIATION_REQ); message = itti_alloc_new_message(TASK_XNAP, 0, SCTP_NEW_ASSOCIATION_REQ);
printf("ghjfghjjdfhj\n");
sctp_new_association_req = &message->ittiMsg.sctp_new_association_req; sctp_new_association_req = &message->ittiMsg.sctp_new_association_req;
sctp_new_association_req->port = nc->gnb_port_for_XNC; sctp_new_association_req->port = nc->gnb_port_for_XNC;
sctp_new_association_req->ppid = XNAP_SCTP_PPID; sctp_new_association_req->ppid = XNAP_SCTP_PPID;
...@@ -155,7 +150,6 @@ static void xnap_gNB_send_sctp_assoc_req(instance_t instance, xnap_net_config_t ...@@ -155,7 +150,6 @@ static void xnap_gNB_send_sctp_assoc_req(instance_t instance, xnap_net_config_t
sizeof(nc->target_gnb_xn_ip_address[index])); sizeof(nc->target_gnb_xn_ip_address[index]));
memcpy(&sctp_new_association_req->local_address, &nc->gnb_xn_ip_address, sizeof(nc->gnb_xn_ip_address)); memcpy(&sctp_new_association_req->local_address, &nc->gnb_xn_ip_address, sizeof(nc->gnb_xn_ip_address));
sctp_new_association_req->ulp_cnx_id = index; sctp_new_association_req->ulp_cnx_id = index;
// instance_p->xn_target_gnb_pending_nb++;
itti_send_msg_to_task(TASK_SCTP, instance, message); itti_send_msg_to_task(TASK_SCTP, instance, message);
} }
...@@ -185,20 +179,13 @@ static void xnap_gNB_handle_sctp_init_msg_multi_cnf(instance_t instance, sctp_in ...@@ -185,20 +179,13 @@ static void xnap_gNB_handle_sctp_init_msg_multi_cnf(instance_t instance, sctp_in
static void xnap_gNB_handle_sctp_association_ind(instance_t instance, sctp_new_association_ind_t *sctp_new_association_ind) static void xnap_gNB_handle_sctp_association_ind(instance_t instance, sctp_new_association_ind_t *sctp_new_association_ind)
{ {
// f1ap_cudu_inst_t *f1ap_cu_data = getCxt(instance);
xnap_gNB_instance_t *instance_p = xnap_gNB_get_instance(instance); xnap_gNB_instance_t *instance_p = xnap_gNB_get_instance(instance);
DevAssert(instance_p != NULL); DevAssert(instance_p != NULL);
xnap_gNB_data_t *xnap_gnb_data_p; xnap_gNB_data_t *xnap_gnb_data_p;
DevAssert(sctp_new_association_ind != NULL); DevAssert(sctp_new_association_ind != NULL);
// we don't need the assoc_id, subsequent messages (the first being Xn Setup
// Request), will deliver the assoc_id
// f1ap_cu_data->sctp_in_streams = sctp_new_association_ind->in_streams;
// f1ap_cu_data->sctp_out_streams = sctp_new_association_ind->out_streams;
LOG_W(XNAP, "SCTP Association IND Received.\n"); LOG_W(XNAP, "SCTP Association IND Received.\n");
xnap_dump_trees(instance); xnap_dump_trees(instance);
xnap_gnb_data_p = xnap_get_gNB(instance, sctp_new_association_ind->assoc_id); xnap_gnb_data_p = xnap_get_gNB(instance, sctp_new_association_ind->assoc_id);
// DevAssert(xnap_gnb_data_p != NULL);
if (xnap_gnb_data_p == NULL) { if (xnap_gnb_data_p == NULL) {
LOG_W(XNAP, "xnap_gnb_data_p does not exist\n"); LOG_W(XNAP, "xnap_gnb_data_p does not exist\n");
/* TODO: Create new gNB descriptor-not yet associated? */ /* TODO: Create new gNB descriptor-not yet associated? */
...@@ -206,13 +193,10 @@ static void xnap_gNB_handle_sctp_association_ind(instance_t instance, sctp_new_a ...@@ -206,13 +193,10 @@ static void xnap_gNB_handle_sctp_association_ind(instance_t instance, sctp_new_a
AssertFatal(xnap_gnb_data_p != NULL, "out of memory\n"); AssertFatal(xnap_gnb_data_p != NULL, "out of memory\n");
xnap_gnb_data_p->assoc_id = sctp_new_association_ind->assoc_id; xnap_gnb_data_p->assoc_id = sctp_new_association_ind->assoc_id;
xnap_gnb_data_p->state = XNAP_GNB_STATE_WAITING; xnap_gnb_data_p->state = XNAP_GNB_STATE_WAITING;
printf("reached here1\n");
xnap_gnb_data_p->in_streams = sctp_new_association_ind->in_streams; xnap_gnb_data_p->in_streams = sctp_new_association_ind->in_streams;
xnap_gnb_data_p->out_streams = sctp_new_association_ind->out_streams; xnap_gnb_data_p->out_streams = sctp_new_association_ind->out_streams;
xnap_dump_trees(instance); xnap_dump_trees(instance);
xnap_insert_gnb(instance, xnap_gnb_data_p); xnap_insert_gnb(instance, xnap_gnb_data_p);
// RB_INSERT(xnap_gnb_tree, &instance_xn->xnap_gnbs, xnap_gnb_data_p);
// instance_xn->num_gnbs++;
xnap_dump_trees(instance); xnap_dump_trees(instance);
} else { } else {
xnap_gnb_data_p->in_streams = sctp_new_association_ind->in_streams; xnap_gnb_data_p->in_streams = sctp_new_association_ind->in_streams;
...@@ -227,7 +211,6 @@ void *xnap_task(void *arg) ...@@ -227,7 +211,6 @@ void *xnap_task(void *arg)
MessageDef *received_msg = NULL; MessageDef *received_msg = NULL;
int result; int result;
LOG_D(XNAP, "Starting XNAP layer\n"); LOG_D(XNAP, "Starting XNAP layer\n");
// xnap_gNB_prepare_internal_data(); // management procedures
itti_mark_task_ready(TASK_XNAP); itti_mark_task_ready(TASK_XNAP);
while (1) { while (1) {
......
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