Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
96c62e4c
Commit
96c62e4c
authored
Dec 23, 2020
by
Xue Song
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
modify F1 Setup Response
add rrc_gNB_process_f1_setup_req
parent
00b29a8c
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
136 additions
and
11 deletions
+136
-11
openair2/F1AP/f1ap_cu_interface_management.c
openair2/F1AP/f1ap_cu_interface_management.c
+13
-4
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+8
-5
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+9
-1
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+106
-1
No files found.
openair2/F1AP/f1ap_cu_interface_management.c
View file @
96c62e4c
...
...
@@ -37,6 +37,7 @@
#include "f1ap_cu_interface_management.h"
extern
f1ap_setup_req_t
*
f1ap_du_data_from_du
;
extern
RAN_CONTEXT_t
RC
;
int
CU_send_RESET
(
instance_t
instance
,
F1AP_Reset_t
*
Reset
)
{
AssertFatal
(
1
==
0
,
"Not implemented yet
\n
"
);
...
...
@@ -102,8 +103,8 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
assoc_id
,
stream
);
}
message_p
=
itti_alloc_new_message
(
TASK_
RRC_ENB
,
F1AP_SETUP_REQ
);
message_p
=
itti_alloc_new_message
(
TASK_
CU_F1
,
F1AP_SETUP_REQ
);
/* assoc_id */
F1AP_SETUP_REQ
(
message_p
).
assoc_id
=
assoc_id
;
...
...
@@ -245,10 +246,18 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
);
if
(
num_cells_available
>
0
)
{
itti_send_msg_to_task
(
TASK_RRC_ENB
,
ENB_MODULE_ID_TO_INSTANCE
(
instance
),
message_p
);
if
(
RC
.
nrrrc
[
0
]
->
node_type
==
ngran_gNB_CU
)
{
itti_send_msg_to_task
(
TASK_RRC_GNB
,
GNB_MODULE_ID_TO_INSTANCE
(
instance
),
message_p
);
}
else
{
itti_send_msg_to_task
(
TASK_RRC_ENB
,
ENB_MODULE_ID_TO_INSTANCE
(
instance
),
message_p
);
}
}
else
{
CU_send_F1_SETUP_FAILURE
(
instance
);
itti_free
(
TASK_RRC_ENB
,
message_p
);
if
(
RC
.
nrrrc
[
0
]
->
node_type
==
ngran_gNB_CU
)
{
itti_free
(
TASK_RRC_GNB
,
message_p
);
}
else
{
itti_free
(
TASK_RRC_ENB
,
message_p
);
}
return
-
1
;
}
return
0
;
...
...
openair2/GNB_APP/gnb_config.c
View file @
96c62e4c
...
...
@@ -636,7 +636,7 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
}
}
rrc
->
nr_cellid
=
(
uint64_t
)
*
(
GNBParamList
.
paramarray
[
i
][
E
NB_NRCELLID_IDX
].
u64ptr
);
rrc
->
nr_cellid
=
(
uint64_t
)
*
(
GNBParamList
.
paramarray
[
i
][
G
NB_NRCELLID_IDX
].
u64ptr
);
if
(
strcmp
(
*
(
GNBParamList
.
paramarray
[
i
][
GNB_TRANSPORT_S_PREFERENCE_IDX
].
strptr
),
"local_mac"
)
==
0
)
{
...
...
@@ -711,6 +711,7 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
}
//
}
//End for (k=0; k <num_gnbs ; k++)
memcpy
(
&
rrc
->
configuration
,
&
NRRRC_CONFIGURATION_REQ
(
msg_p
),
sizeof
(
NRRRC_CONFIGURATION_REQ
(
msg_p
)));
}
//End if (num_gnbs>0)
...
...
@@ -1364,10 +1365,11 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i) {
// pthread_mutex_unlock(&rrc->cell_info_mutex);
// } while (cell_info_configured ==0);
//
rrc->configuration.mcc[0] = F1AP_SETUP_REQ (msg_p).mcc[k];
//
rrc->configuration.mnc[0] = F1AP_SETUP_REQ (msg_p).mnc[k];
//
rrc->configuration.tac = F1AP_SETUP_REQ (msg_p).tac[k];
rrc
->
configuration
.
mcc
[
0
]
=
F1AP_SETUP_REQ
(
msg_p
).
mcc
[
k
];
rrc
->
configuration
.
mnc
[
0
]
=
F1AP_SETUP_REQ
(
msg_p
).
mnc
[
k
];
rrc
->
configuration
.
tac
=
F1AP_SETUP_REQ
(
msg_p
).
tac
[
k
];
rrc
->
nr_cellid
=
F1AP_SETUP_REQ
(
msg_p
).
nr_cellid
[
k
];
// F1AP_SETUP_REQ (msg_p).nr_pci[k] = rrc->carrier.physCellId;
F1AP_SETUP_REQ
(
msg_p
).
nr_pci
[
k
]
=
0
;
F1AP_SETUP_REQ
(
msg_p
).
num_ssi
[
k
]
=
0
;
...
...
@@ -1381,7 +1383,7 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i) {
F1AP_SETUP_REQ
(
msg_p
).
nr_mode_info
[
k
].
tdd
.
nr_band
[
0
]
=
1
;
F1AP_SETUP_REQ
(
msg_p
).
nr_mode_info
[
k
].
fdd
.
sul_active
=
0
;
}
else
{
/
/ for test
/
***************** for test *****************/
LOG_I
(
GNB_APP
,
"ngran_DU: Configuring Cell %d for FDD
\n
"
,
k
);
F1AP_SETUP_REQ
(
msg_p
).
fdd_flag
=
1
;
F1AP_SETUP_REQ
(
msg_p
).
nr_mode_info
[
k
].
fdd
.
dl_nr_arfcn
=
26200UL
;
...
...
@@ -1402,6 +1404,7 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i) {
F1AP_SETUP_REQ
(
msg_p
).
nr_mode_info
[
k
].
fdd
.
dl_num_sul_frequency_bands
=
0
;
F1AP_SETUP_REQ
(
msg_p
).
nr_mode_info
[
k
].
fdd
.
dl_nr_sul_band
[
0
]
=
7
;
F1AP_SETUP_REQ
(
msg_p
).
nr_mode_info
[
k
].
fdd
.
sul_active
=
0
;
/***************** for test *****************/
}
F1AP_SETUP_REQ
(
msg_p
).
measurement_timing_information
[
k
]
=
"0"
;
...
...
openair2/RRC/NR/nr_rrc_defs.h
View file @
96c62e4c
...
...
@@ -66,6 +66,7 @@
#include "NR_CellGroupConfig.h"
#include "NR_ServingCellConfigCommon.h"
#include "NR_EstablishmentCause.h"
#include "NR_SIB1.h"
//-------------------
#include "intertask_interface.h"
...
...
@@ -428,7 +429,12 @@ typedef struct {
uint8_t
*
ServingCellConfigCommon
;
uint8_t
sizeof_servingcellconfigcommon
;
int
physCellId
;
NR_BCCH_BCH_Message_t
mib
;
NR_BCCH_BCH_Message_t
*
mib_DU
;
NR_BCCH_DL_SCH_Message_t
*
siblock1_DU
;
NR_SIB1_t
*
sib1
;
int
ssb_SubcarrierOffset
;
int
pdsch_AntennaPorts
;
int
pusch_TargetSNRx10
;
...
...
@@ -439,7 +445,6 @@ typedef struct {
NR_SRB_INFO
SI
;
NR_SRB_INFO
Srb0
;
int
initial_csi_index
[
MAX_NR_RRC_UE_CONTEXTS
];
int
physCellId
;
int
p_gNB
;
}
rrc_gNB_carrier_data_t
;
...
...
@@ -467,6 +472,9 @@ typedef struct gNB_RRC_INST_s {
/// NR cell id
uint64_t
nr_cellid
;
// RRC configuration
gNB_RrcConfigurationReq
configuration
;
// other PLMN parameters
/// Mobile country code
int
mcc
;
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
96c62e4c
...
...
@@ -281,7 +281,6 @@ static void init_NR_SI(gNB_RRC_INST *rrc, gNB_RrcConfigurationReq *configuration
}
}
char
openair_rrc_gNB_configuration
(
const
module_id_t
gnb_mod_idP
,
gNB_RrcConfigurationReq
*
configuration
)
{
protocol_ctxt_t
ctxt
;
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
gnb_mod_idP
];
...
...
@@ -2344,6 +2343,104 @@ rrc_gNB_decode_dcch(
return
0
;
}
void
rrc_gNB_process_f1_setup_req
(
f1ap_setup_req_t
*
f1_setup_req
)
{
LOG_I
(
NR_RRC
,
"Received F1 Setup Request from gNB_DU %llu (%s)
\n
"
,(
unsigned
long
long
int
)
f1_setup_req
->
gNB_DU_id
,
f1_setup_req
->
gNB_DU_name
);
int
cu_cell_ind
=
0
;
MessageDef
*
msg_p
=
NULL
;
for
(
int
i
=
0
;
i
<
f1_setup_req
->
num_cells_available
;
i
++
)
{
int
found_cell
=
0
;
for
(
int
j
=
0
;
j
<
RC
.
nb_nr_inst
;
j
++
)
{
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
j
];
if
(
rrc
->
configuration
.
mcc
[
0
]
==
f1_setup_req
->
mcc
[
i
]
&&
rrc
->
configuration
.
mnc
[
0
]
==
f1_setup_req
->
mnc
[
i
]
&&
rrc
->
nr_cellid
==
f1_setup_req
->
nr_cellid
[
i
])
{
// check that CU rrc instance corresponds to mcc/mnc/cgi (normally cgi should be enough, but just in case)
rrc
->
carrier
.
MIB
=
malloc
(
f1_setup_req
->
mib_length
[
i
]);
rrc
->
carrier
.
sizeof_MIB
=
f1_setup_req
->
mib_length
[
i
];
LOG_W
(
NR_RRC
,
"instance %d mib length %d
\n
"
,
i
,
f1_setup_req
->
mib_length
[
i
]);
LOG_W
(
NR_RRC
,
"instance %d sib1 length %d
\n
"
,
i
,
f1_setup_req
->
sib1_length
[
i
]);
memcpy
((
void
*
)
rrc
->
carrier
.
MIB
,
f1_setup_req
->
mib
[
i
],
f1_setup_req
->
mib_length
[
i
]);
if
(
0
)
{
asn_dec_rval_t
dec_rval
=
uper_decode_complete
(
NULL
,
&
asn_DEF_NR_BCCH_BCH_Message
,
(
void
**
)
&
rrc
->
carrier
.
mib_DU
,
f1_setup_req
->
mib
[
i
],
f1_setup_req
->
mib_length
[
i
]);
AssertFatal
(
dec_rval
.
code
==
RC_OK
,
"[gNB_DU %"
PRIu8
"] Failed to decode NR_BCCH_BCH_MESSAGE (%zu bits)
\n
"
,
j
,
dec_rval
.
consumed
);
NR_BCCH_BCH_Message_t
*
mib
=
&
rrc
->
carrier
.
mib
;
NR_BCCH_BCH_Message_t
*
mib_DU
=
rrc
->
carrier
.
mib_DU
;
mib
->
message
.
present
=
NR_BCCH_BCH_MessageType_PR_mib
;
// mib->message.choice.mib = calloc(1, sizeof(NR_MIB_t));
mib
->
message
.
choice
.
mib
=
mib_DU
->
message
.
choice
.
mib
;
rrc
->
carrier
.
SIB1
=
malloc
(
f1_setup_req
->
sib1_length
[
i
]);
rrc
->
carrier
.
sizeof_SIB1
=
f1_setup_req
->
sib1_length
[
i
];
memcpy
((
void
*
)
rrc
->
carrier
.
SIB1
,
f1_setup_req
->
sib1
[
i
],
f1_setup_req
->
sib1_length
[
i
]);
dec_rval
=
uper_decode_complete
(
NULL
,
&
asn_DEF_NR_BCCH_DL_SCH_Message
,
(
void
**
)
&
rrc
->
carrier
.
siblock1_DU
,
f1_setup_req
->
sib1
[
i
],
f1_setup_req
->
sib1_length
[
i
]);
AssertFatal
(
dec_rval
.
code
==
RC_OK
,
"[gNB_DU %"
PRIu8
"] Failed to decode NR_BCCH_DLSCH_MESSAGE (%zu bits)
\n
"
,
j
,
dec_rval
.
consumed
);
// Parse message and extract SystemInformationBlockType1 field
NR_BCCH_DL_SCH_Message_t
*
bcch_message
=
rrc
->
carrier
.
siblock1_DU
;
AssertFatal
(
bcch_message
->
message
.
present
==
NR_BCCH_DL_SCH_MessageType_PR_c1
,
"bcch_message->message.present != NR_BCCH_DL_SCH_MessageType_PR_c1
\n
"
);
AssertFatal
(
bcch_message
->
message
.
choice
.
c1
->
present
==
NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1
,
"bcch_message->message.choice.c1->present != NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1
\n
"
);
rrc
->
carrier
.
sib1
=
bcch_message
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
;
rrc
->
carrier
.
physCellId
=
f1_setup_req
->
nr_pci
[
i
];
}
// prepare F1_SETUP_RESPONSE
if
(
msg_p
==
NULL
)
{
msg_p
=
itti_alloc_new_message
(
TASK_RRC_GNB
,
F1AP_SETUP_RESP
);
}
F1AP_SETUP_RESP
(
msg_p
).
gNB_CU_name
=
rrc
->
node_name
;
F1AP_SETUP_RESP
(
msg_p
).
mcc
[
cu_cell_ind
]
=
rrc
->
configuration
.
mcc
[
0
];
F1AP_SETUP_RESP
(
msg_p
).
mnc
[
cu_cell_ind
]
=
rrc
->
configuration
.
mnc
[
0
];
F1AP_SETUP_RESP
(
msg_p
).
mnc_digit_length
[
cu_cell_ind
]
=
rrc
->
configuration
.
mnc_digit_length
[
0
];
F1AP_SETUP_RESP
(
msg_p
).
nr_cellid
[
cu_cell_ind
]
=
rrc
->
nr_cellid
;
F1AP_SETUP_RESP
(
msg_p
).
nrpci
[
cu_cell_ind
]
=
f1_setup_req
->
nr_pci
[
i
];
int
num_SI
=
0
;
// if (rrc->carrier.SIB23) {
// F1AP_SETUP_RESP (msg_p).SI_container[cu_cell_ind][num_SI] = rrc->carrier.SIB23;
// F1AP_SETUP_RESP (msg_p).SI_container_length[cu_cell_ind][num_SI] = rrc->carrier.sizeof_SIB23;
// num_SI++;
// }
F1AP_SETUP_RESP
(
msg_p
).
num_SI
[
cu_cell_ind
]
=
num_SI
;
cu_cell_ind
++
;
found_cell
=
1
;
F1AP_SETUP_RESP
(
msg_p
).
num_cells_to_activate
=
cu_cell_ind
;
// send ITTI message to F1AP-CU task
itti_send_msg_to_task
(
TASK_CU_F1
,
GNB_MODULE_ID_TO_INSTANCE
(
j
),
msg_p
);
break
;
}
else
{
// setup_req mcc/mnc match rrc internal list element
LOG_W
(
NR_RRC
,
"[Inst %d] No matching MCC/MNC: rrc->mcc/f1_setup_req->mcc %d/%d rrc->mnc/f1_setup_req->mnc %d/%d
\n
"
,
j
,
rrc
->
configuration
.
mcc
[
0
],
f1_setup_req
->
mcc
[
i
],
rrc
->
configuration
.
mnc
[
0
],
f1_setup_req
->
mnc
[
i
]);
}
}
// for (int j=0;j<RC.nb_inst;j++)
if
(
found_cell
==
0
)
{
AssertFatal
(
1
==
0
,
"No cell found
\n
"
);
}
// handle other failure cases
}
//for (int i=0;i<f1_setup_req->num_cells_available;i++)
}
void
rrc_gNB_process_release_request
(
const
module_id_t
gnb_mod_idP
,
x2ap_ENDC_sgnb_release_request_t
*
m
)
{
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
gnb_mod_idP
];
...
...
@@ -2523,6 +2620,14 @@ void *rrc_gnb_task(void *args_p) {
openair_rrc_gNB_configuration
(
GNB_INSTANCE_TO_MODULE_ID
(
instance
),
&
NRRRC_CONFIGURATION_REQ
(
msg_p
));
break
;
/* Messages from F1AP task */
case
F1AP_SETUP_REQ
:
AssertFatal
(
NODE_IS_CU
(
RC
.
nrrrc
[
instance
]
->
node_type
),
"should not receive F1AP_SETUP_REQUEST, need call by CU!
\n
"
);
LOG_I
(
NR_RRC
,
"[gNB %d] Received %s : %p
\n
"
,
instance
,
msg_name_p
,
&
F1AP_SETUP_REQ
(
msg_p
));
rrc_gNB_process_f1_setup_req
(
&
F1AP_SETUP_REQ
(
msg_p
));
break
;
/* Messages from X2AP */
case
X2AP_ENDC_SGNB_ADDITION_REQ
:
LOG_I
(
NR_RRC
,
"Received ENDC sgNB addition request from X2AP
\n
"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment