Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
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
spbro
OpenXG-RAN
Commits
4325b1fc
Commit
4325b1fc
authored
Sep 15, 2021
by
matzakos
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updates in the UE context setup request handling function at the DU
parent
222419dd
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
69 additions
and
53 deletions
+69
-53
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+66
-50
openair3/ocp-gtpu/gtp_itf.cpp
openair3/ocp-gtpu/gtp_itf.cpp
+3
-3
No files found.
openair2/RRC/NR/rrc_gNB.c
View file @
4325b1fc
...
@@ -1381,11 +1381,11 @@ rrc_gNB_process_RRCReconfigurationComplete(
...
@@ -1381,11 +1381,11 @@ rrc_gNB_process_RRCReconfigurationComplete(
DRBs
[
i
].
drb_id
=
DRB_configList
->
list
.
array
[
i
]
->
drb_Identity
;
DRBs
[
i
].
drb_id
=
DRB_configList
->
list
.
array
[
i
]
->
drb_Identity
;
DRBs
[
i
].
rlc_mode
=
RLC_MODE_AM
;
DRBs
[
i
].
rlc_mode
=
RLC_MODE_AM
;
DRBs
[
i
].
up_ul_tnl
[
0
].
tl_address
=
inet_addr
(
rrc
->
eth_params_s
.
my_addr
);
DRBs
[
i
].
up_ul_tnl
[
0
].
tl_address
=
inet_addr
(
rrc
->
eth_params_s
.
my_addr
);
DRBs
[
i
].
up_ul_tnl
[
0
].
port
=
rrc
->
eth_params_s
.
my_portd
;
DRBs
[
i
].
up_ul_tnl
[
0
].
port
=
rrc
->
eth_params_s
.
my_portd
;
DRBs
[
i
].
up_ul_tnl_length
=
1
;
DRBs
[
i
].
up_ul_tnl_length
=
1
;
DRBs
[
i
].
up_dl_tnl
[
0
].
tl_address
=
inet_addr
(
rrc
->
eth_params_s
.
remote_addr
);
DRBs
[
i
].
up_dl_tnl
[
0
].
tl_address
=
inet_addr
(
rrc
->
eth_params_s
.
remote_addr
);
DRBs
[
i
].
up_dl_tnl
[
0
].
port
=
rrc
->
eth_params_s
.
remote_portd
;
DRBs
[
i
].
up_dl_tnl
[
0
].
port
=
rrc
->
eth_params_s
.
remote_portd
;
DRBs
[
i
].
up_dl_tnl_length
=
1
;
DRBs
[
i
].
up_dl_tnl_length
=
1
;
}
}
F1AP_UE_CONTEXT_SETUP_REQ
(
message_p
).
gNB_CU_ue_id
=
0
;
F1AP_UE_CONTEXT_SETUP_REQ
(
message_p
).
gNB_CU_ue_id
=
0
;
F1AP_UE_CONTEXT_SETUP_REQ
(
message_p
).
gNB_DU_ue_id
=
0
;
F1AP_UE_CONTEXT_SETUP_REQ
(
message_p
).
gNB_DU_ue_id
=
0
;
...
@@ -3158,67 +3158,85 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
...
@@ -3158,67 +3158,85 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
/* Configure SRB2 */
/* Configure SRB2 */
NR_SRB_ToAddMod_t
*
SRB2_config
=
NULL
;
NR_SRB_ToAddMod_t
*
SRB2_config
=
NULL
;
NR_SRB_ToAddModList_t
*
SRB_configList
=
ue_context_p
->
ue_context
.
SRB_configList
;
NR_SRB_ToAddModList_t
*
SRB_configList
=
NULL
;
uint8_t
SRBs_before_new_addition
=
ue_context_p
->
ue_context
.
SRB_configList
->
list
.
count
;
uint8_t
SRBs_before_new_addition
=
0
;
if
(
SRB_configList
!=
NULL
){
if
(
req
->
srbs_to_be_setup_length
>
0
){
if
(
ue_context_p
->
ue_context
.
SRB_configList
==
NULL
){
LOG_W
(
NR_RRC
,
"The SRB list of the UE context is empty before the addition of new SRB at the DU
\n
"
);
ue_context_p
->
ue_context
.
SRB_configList
=
CALLOC
(
1
,
sizeof
(
*
ue_context_p
->
ue_context
.
SRB_configList
));
}
SRB_configList
=
ue_context_p
->
ue_context
.
SRB_configList
;
SRBs_before_new_addition
=
SRB_configList
->
list
.
count
;
for
(
int
i
=
0
;
i
<
req
->
srbs_to_be_setup_length
;
i
++
){
for
(
int
i
=
0
;
i
<
req
->
srbs_to_be_setup_length
;
i
++
){
SRB2_config
=
CALLOC
(
1
,
sizeof
(
*
SRB2_config
));
SRB2_config
=
CALLOC
(
1
,
sizeof
(
*
SRB2_config
));
SRB2_config
->
srb_Identity
=
req
->
srbs_to_be_setup
[
i
].
srb_id
;
SRB2_config
->
srb_Identity
=
req
->
srbs_to_be_setup
[
i
].
srb_id
;
ASN_SEQUENCE_ADD
(
&
SRB_configList
->
list
,
SRB2_config
);
ASN_SEQUENCE_ADD
(
&
SRB_configList
->
list
,
SRB2_config
);
}
}
}
}
else
{
LOG_E
(
NR_RRC
,
"The SRB list of the UE context is empty before the addition of SRB2
\n
"
);
return
;
}
/* Configure DRB */
/* Configure DRB */
NR_DRB_ToAddMod_t
*
DRB_config
=
NULL
;
NR_DRB_ToAddMod_t
*
DRB_config
=
NULL
;
if
(
ue_context_p
->
ue_context
.
DRB_configList
==
NULL
){
NR_DRB_ToAddModList_t
*
DRB_configList
=
NULL
;
ue_context_p
->
ue_context
.
DRB_configList
=
CALLOC
(
1
,
sizeof
(
*
ue_context_p
->
ue_context
.
DRB_configList
));
if
(
req
->
drbs_to_be_setup_length
>
0
){
if
(
ue_context_p
->
ue_context
.
DRB_configList
==
NULL
){
ue_context_p
->
ue_context
.
DRB_configList
=
CALLOC
(
1
,
sizeof
(
*
ue_context_p
->
ue_context
.
DRB_configList
));
}
DRB_configList
=
ue_context_p
->
ue_context
.
DRB_configList
;
for
(
int
i
=
0
;
i
<
req
->
drbs_to_be_setup_length
;
i
++
){
DRB_config
=
CALLOC
(
1
,
sizeof
(
*
DRB_config
));
DRB_config
->
drb_Identity
=
req
->
drbs_to_be_setup
[
i
].
drb_id
;
ASN_SEQUENCE_ADD
(
&
DRB_configList
->
list
,
DRB_config
);
f1ap_drb_to_be_setup_t
drb_p
=
req
->
drbs_to_be_setup
[
i
];
transport_layer_addr_t
addr
;
memcpy
(
addr
.
buffer
,
&
drb_p
.
up_ul_tnl
[
0
].
tl_address
,
sizeof
(
drb_p
.
up_ul_tnl
[
0
].
tl_address
));
addr
.
length
=
sizeof
(
drb_p
.
up_ul_tnl
[
0
].
tl_address
)
*
8
;
extern
instance_t
DUuniqInstance
;
incoming_teid
=
newGtpuCreateTunnel
(
DUuniqInstance
,
req
->
rnti
,
drb_p
.
drb_id
,
drb_p
.
drb_id
,
drb_p
.
up_ul_tnl
[
0
].
teid
,
addr
,
2152
,
DURecvCb
);
}
}
}
NR_DRB_ToAddModList_t
*
DRB_configList
=
ue_context_p
->
ue_context
.
DRB_configList
;
for
(
int
i
=
0
;
i
<
req
->
drbs_to_be_setup_length
;
i
++
){
DRB_config
=
CALLOC
(
1
,
sizeof
(
*
DRB_config
));
DRB_config
->
drb_Identity
=
req
->
drbs_to_be_setup
[
i
].
drb_id
;
ASN_SEQUENCE_ADD
(
&
DRB_configList
->
list
,
DRB_config
);
f1ap_drb_to_be_setup_t
drb_p
=
req
->
drbs_to_be_setup
[
i
];
transport_layer_addr_t
addr
;
memcpy
(
addr
.
buffer
,
&
drb_p
.
up_ul_tnl
[
0
].
tl_address
,
sizeof
(
drb_p
.
up_ul_tnl
[
0
].
tl_address
));
addr
.
length
=
sizeof
(
drb_p
.
up_ul_tnl
[
0
].
tl_address
)
*
8
;
extern
instance_t
DUuniqInstance
;
incoming_teid
=
newGtpuCreateTunnel
(
DUuniqInstance
,
req
->
rnti
,
drb_p
.
drb_id
,
drb_p
.
drb_id
,
drb_p
.
up_ul_tnl
[
0
].
teid
,
addr
,
2152
,
DURecvCb
);
}
apply_macrlc_config
(
rrc
,
ue_context_p
,
&
ctxt
);
apply_macrlc_config
(
rrc
,
ue_context_p
,
&
ctxt
);
/* Fill the UE context setup response ITTI message to send to F1AP */
/* Fill the UE context setup response ITTI message to send to F1AP */
resp
->
gNB_CU_ue_id
=
req
->
gNB_CU_ue_id
;
resp
->
gNB_CU_ue_id
=
req
->
gNB_CU_ue_id
;
resp
->
rnti
=
ctxt
.
rnti
;
resp
->
rnti
=
ctxt
.
rnti
;
resp
->
drbs_to_be_setup
=
calloc
(
1
,
DRB_configList
->
list
.
count
*
sizeof
(
f1ap_drb_to_be_setup_t
));
if
(
DRB_configList
){
resp
->
drbs_to_be_setup_length
=
DRB_configList
->
list
.
count
;
if
(
DRB_configList
->
list
.
count
>
0
){
for
(
int
i
=
0
;
i
<
DRB_configList
->
list
.
count
;
i
++
){
resp
->
drbs_to_be_setup
=
calloc
(
1
,
DRB_configList
->
list
.
count
*
sizeof
(
f1ap_drb_to_be_setup_t
));
resp
->
drbs_to_be_setup
[
i
].
drb_id
=
DRB_configList
->
list
.
array
[
i
]
->
drb_Identity
;
resp
->
drbs_to_be_setup_length
=
DRB_configList
->
list
.
count
;
resp
->
drbs_to_be_setup
[
i
].
rlc_mode
=
RLC_MODE_AM
;
for
(
int
i
=
0
;
i
<
DRB_configList
->
list
.
count
;
i
++
){
resp
->
drbs_to_be_setup
[
i
].
up_dl_tnl
[
0
].
teid
=
incoming_teid
;
resp
->
drbs_to_be_setup
[
i
].
drb_id
=
DRB_configList
->
list
.
array
[
i
]
->
drb_Identity
;
resp
->
drbs_to_be_setup
[
i
].
up_dl_tnl
[
0
].
tl_address
=
inet_addr
(
mac
->
eth_params_n
.
my_addr
);
resp
->
drbs_to_be_setup
[
i
].
rlc_mode
=
RLC_MODE_AM
;
resp
->
drbs_to_be_setup
[
i
].
up_dl_tnl_length
=
1
;
resp
->
drbs_to_be_setup
[
i
].
up_dl_tnl
[
0
].
teid
=
incoming_teid
;
}
resp
->
drbs_to_be_setup
[
i
].
up_dl_tnl
[
0
].
tl_address
=
inet_addr
(
mac
->
eth_params_n
.
my_addr
);
if
(
SRBs_before_new_addition
<
SRB_configList
->
list
.
count
){
resp
->
drbs_to_be_setup
[
i
].
up_dl_tnl_length
=
1
;
resp
->
srbs_to_be_setup
=
calloc
(
1
,
req
->
srbs_to_be_setup_length
*
sizeof
(
f1ap_srb_to_be_setup_t
));
}
resp
->
srbs_to_be_setup_length
=
req
->
srbs_to_be_setup_length
;
}
for
(
int
i
=
SRBs_before_new_addition
;
i
<
SRB_configList
->
list
.
count
;
i
++
){
else
{
resp
->
srbs_to_be_setup
[
i
-
SRBs_before_new_addition
].
srb_id
=
SRB_configList
->
list
.
array
[
i
]
->
srb_Identity
;
LOG_W
(
NR_RRC
,
"No DRB added upon reception of F1 UE context setup request with a DRB to setup list
\n
"
);
}
}
if
(
SRB_configList
){
if
(
SRB_configList
->
list
.
count
>
0
&&
SRBs_before_new_addition
<
SRB_configList
->
list
.
count
){
resp
->
srbs_to_be_setup
=
calloc
(
1
,
req
->
srbs_to_be_setup_length
*
sizeof
(
f1ap_srb_to_be_setup_t
));
resp
->
srbs_to_be_setup_length
=
req
->
srbs_to_be_setup_length
;
for
(
int
i
=
SRBs_before_new_addition
;
i
<
SRB_configList
->
list
.
count
;
i
++
){
resp
->
srbs_to_be_setup
[
i
-
SRBs_before_new_addition
].
srb_id
=
SRB_configList
->
list
.
array
[
i
]
->
srb_Identity
;
}
}
else
{
LOG_W
(
NR_RRC
,
"No SRB added upon reception of F1 UE Context setup request at the DU
\n
"
);
}
}
}
}
else
{
else
{
LOG_
E
(
NR_RRC
,
"SRB failed to get added
\n
"
);
LOG_
W
(
NR_RRC
,
"No SRB added upon reception of F1 UE Context setup request at the DU
\n
"
);
}
}
resp
->
du_to_cu_rrc_information
=
calloc
(
1
,
1024
*
sizeof
(
uint8_t
));
resp
->
du_to_cu_rrc_information
=
calloc
(
1
,
1024
*
sizeof
(
uint8_t
));
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_CellGroupConfig
,
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_CellGroupConfig
,
...
@@ -3228,8 +3246,6 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
...
@@ -3228,8 +3246,6 @@ static void rrc_DU_process_ue_context_setup_request(MessageDef *msg_p, const cha
1024
);
1024
);
resp
->
du_to_cu_rrc_information_length
=
(
enc_rval
.
encoded
+
7
)
>>
3
;
resp
->
du_to_cu_rrc_information_length
=
(
enc_rval
.
encoded
+
7
)
>>
3
;
itti_send_msg_to_task
(
TASK_DU_F1
,
ctxt
.
module_id
,
message_p
);
itti_send_msg_to_task
(
TASK_DU_F1
,
ctxt
.
module_id
,
message_p
);
}
}
static
void
rrc_CU_process_ue_context_setup_response
(
MessageDef
*
msg_p
,
const
char
*
msg_name
,
instance_t
instance
){
static
void
rrc_CU_process_ue_context_setup_response
(
MessageDef
*
msg_p
,
const
char
*
msg_name
,
instance_t
instance
){
...
...
openair3/ocp-gtpu/gtp_itf.cpp
View file @
4325b1fc
...
@@ -205,7 +205,7 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
...
@@ -205,7 +205,7 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
auto
ptrRnti
=
inst
->
ue2te_mapping
.
find
(
rnti
);
auto
ptrRnti
=
inst
->
ue2te_mapping
.
find
(
rnti
);
if
(
ptrRnti
==
inst
->
ue2te_mapping
.
end
()
)
{
if
(
ptrRnti
==
inst
->
ue2te_mapping
.
end
()
)
{
LOG_E
(
GTPU
,
"GTP-U instance: %d gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping
\n
"
,
instance
,
rnti
);
LOG_E
(
GTPU
,
"GTP-U instance: %
l
d gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping
\n
"
,
instance
,
rnti
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
return
;
return
;
}
}
...
@@ -213,12 +213,12 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
...
@@ -213,12 +213,12 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
map
<
int
,
ocp_gtpv1u_bearer_t
>::
iterator
ptr2
=
ptrRnti
->
second
.
bearers
.
find
(
rab_id
);
map
<
int
,
ocp_gtpv1u_bearer_t
>::
iterator
ptr2
=
ptrRnti
->
second
.
bearers
.
find
(
rab_id
);
if
(
ptr2
==
ptrRnti
->
second
.
bearers
.
end
()
)
{
if
(
ptr2
==
ptrRnti
->
second
.
bearers
.
end
()
)
{
LOG_D
(
GTPU
,
"GTP-U instance: %d sending a packet to a non existant RNTI:RAB: %x/%x
\n
"
,
instance
,
rnti
,
rab_id
);
LOG_D
(
GTPU
,
"GTP-U instance: %
l
d sending a packet to a non existant RNTI:RAB: %x/%x
\n
"
,
instance
,
rnti
,
rab_id
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
return
;
return
;
}
}
LOG_D
(
GTPU
,
"GTP-U instance: %d sending a packet to RNTI:RAB:teid %x/%x/%x, len %lu, oldseq %d, oldnum %d
\n
"
,
LOG_D
(
GTPU
,
"GTP-U instance: %
l
d sending a packet to RNTI:RAB:teid %x/%x/%x, len %lu, oldseq %d, oldnum %d
\n
"
,
instance
,
rnti
,
rab_id
,
ptr2
->
second
.
teid_outgoing
,
length
,
ptr2
->
second
.
seqNum
,
ptr2
->
second
.
npduNum
);
instance
,
rnti
,
rab_id
,
ptr2
->
second
.
teid_outgoing
,
length
,
ptr2
->
second
.
seqNum
,
ptr2
->
second
.
npduNum
);
if
(
seqNumFlag
)
if
(
seqNumFlag
)
...
...
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