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
00a6fa20
Commit
00a6fa20
authored
Apr 06, 2021
by
rmagueta
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop' into develop-SA-CBRA
parents
0750c131
cc4fbd07
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
89 additions
and
35 deletions
+89
-35
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+5
-0
cmake_targets/build_oai
cmake_targets/build_oai
+5
-0
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
+29
-16
openair2/LAYER2/nr_rlc/tests/run_tests.sh
openair2/LAYER2/nr_rlc/tests/run_tests.sh
+1
-1
openair2/LAYER2/nr_rlc/tests/test15.h
openair2/LAYER2/nr_rlc/tests/test15.h
+19
-0
openair2/LAYER2/nr_rlc/tests/test15.txt.gz
openair2/LAYER2/nr_rlc/tests/test15.txt.gz
+0
-0
openair2/RRC/LTE/rrc_defs.h
openair2/RRC/LTE/rrc_defs.h
+8
-1
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+18
-13
openair2/X2AP/x2ap_eNB.c
openair2/X2AP/x2ap_eNB.c
+1
-3
openair2/X2AP/x2ap_eNB_handler.c
openair2/X2AP/x2ap_eNB_handler.c
+3
-1
No files found.
cmake_targets/CMakeLists.txt
View file @
00a6fa20
...
...
@@ -333,6 +333,11 @@ else (CUDA_FOUND)
)
endif
()
if
(
SANITIZE_ADDRESS
)
set
(
CMAKE_C_FLAGS
"
${
CMAKE_C_FLAGS
}
-fsanitize=address"
)
set
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-fsanitize=address"
)
endif
()
add_definitions
(
"-DASN_DISABLE_OER_SUPPORT"
)
#########################
...
...
cmake_targets/build_oai
View file @
00a6fa20
...
...
@@ -68,6 +68,7 @@ USRP_REC_PLAY="False"
BUILD_ECLIPSE
=
0
NR
=
"False"
ITTI_SIM
=
"False"
SANITIZE_ADDRESS
=
"False"
OPTIONAL_LIBRARIES
=
"telnetsrv enbscope uescope nrscope msc"
trap
handle_ctrl_c INT
...
...
@@ -424,6 +425,9 @@ function main() {
CMAKE_CMD
=
"
$CMAKE_CMD
-GNinja"
MAKE_CMD
=
ninja
shift
;;
--sanitize-address
|
-fsanitize
=
address
)
SANITIZE_ADDRESS
=
True
shift
;;
--ittiSIM
)
ittiSIM
=
1
ITTI_SIM
=
"True"
...
...
@@ -612,6 +616,7 @@ function main() {
echo
"set ( USRP_REC_PLAY
$USRP_REC_PLAY
)"
>>
$cmake_file
echo
"set ( SKIP_SHARED_LIB_FLAG
$SKIP_SHARED_LIB_FLAG
)"
>>
$cmake_file
echo
"set ( ITTI_SIM
$ITTI_SIM
)"
>>
$cmake_file
echo
"set ( SANITIZE_ADDRESS
$SANITIZE_ADDRESS
)"
>>
$cmake_file
echo
'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)'
>>
$cmake_file
cd
$DIR
/
$build_dir
/build
eval
$CMAKE_CMD
...
...
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
View file @
00a6fa20
...
...
@@ -650,7 +650,7 @@ control:
control_decoder
=
decoder
;
control_e1
=
e1
;
while
(
control_e1
)
{
n
r_rlc_pdu_decoder_get_bits
(
&
control_decoder
,
entity
->
sn_field_length
);
R
(
control_decoder
);
/* NACK_SN */
n
ack_sn
=
nr_rlc_pdu_decoder_get_bits
(
&
control_decoder
,
entity
->
sn_field_length
);
R
(
control_decoder
);
control_e1
=
nr_rlc_pdu_decoder_get_bits
(
&
control_decoder
,
1
);
R
(
control_decoder
);
control_e2
=
nr_rlc_pdu_decoder_get_bits
(
&
control_decoder
,
1
);
R
(
control_decoder
);
control_e3
=
nr_rlc_pdu_decoder_get_bits
(
&
control_decoder
,
1
);
R
(
control_decoder
);
...
...
@@ -660,17 +660,36 @@ control:
}
else
{
nr_rlc_pdu_decoder_get_bits
(
&
control_decoder
,
1
);
R
(
control_decoder
);
}
/* check range and so_start/so_end consistency */
if
(
control_e2
)
{
nr_rlc_pdu_decoder_get_bits
(
&
control_decoder
,
16
);
R
(
control_decoder
);
/* SOstart */
nr_rlc_pdu_decoder_get_bits
(
&
control_decoder
,
16
);
R
(
control_decoder
);
/* SOend */
so_start
=
nr_rlc_pdu_decoder_get_bits
(
&
control_decoder
,
16
);
R
(
control_decoder
);
so_end
=
nr_rlc_pdu_decoder_get_bits
(
&
control_decoder
,
16
);
R
(
control_decoder
);
}
else
{
so_start
=
0
;
so_end
=
0xffff
;
}
if
(
control_e3
)
{
nr_rlc_pdu_decoder_get_bits
(
&
control_decoder
,
8
);
R
(
control_decoder
);
/* NACK range */
range
=
nr_rlc_pdu_decoder_get_bits
(
&
control_decoder
,
8
);
R
(
control_decoder
);
}
else
{
range
=
1
;
}
if
(
range
<
1
)
{
LOG_E
(
RLC
,
"%s:%d:%s: error, bad 'range' in RLC NACK (sn %d)
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
nack_sn
);
goto
err
;
}
/* so_start can be > so_end if more than one range; they don't refer
* to the same PDU then
*/
if
(
range
==
1
&&
so_end
<
so_start
)
{
LOG_E
(
RLC
,
"%s:%d:%s: error, bad so start/end (sn %d)
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
nack_sn
);
goto
err
;
}
}
/* 38.322 5.3.3.3 says to stop t_poll_retransmit if a ACK or NACK is
* received for the SN 'poll_sn'
* received for the SN 'poll_sn'
- check ACK case (NACK done below)
*/
if
(
sn_compare_tx
(
entity
,
entity
->
poll_sn
,
ack_sn
)
<
0
)
entity
->
t_poll_retransmit_start
=
0
;
...
...
@@ -697,28 +716,22 @@ control:
if
(
e2
)
{
so_start
=
nr_rlc_pdu_decoder_get_bits
(
&
decoder
,
16
);
R
(
decoder
);
so_end
=
nr_rlc_pdu_decoder_get_bits
(
&
decoder
,
16
);
R
(
decoder
);
if
(
so_end
<
so_start
)
{
LOG_W
(
RLC
,
"%s:%d:%s: warning, bad so start/end, NACK the whole PDU (sn %d)
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
nack_sn
);
so_start
=
0
;
so_end
=
-
1
;
}
/* special value 0xffff indicates 'all bytes to the end' */
if
(
so_end
==
0xffff
)
so_end
=
-
1
;
}
else
{
so_start
=
0
;
so_end
=
-
1
;
so_end
=
0xffff
;
}
if
(
e3
)
{
range
=
nr_rlc_pdu_decoder_get_bits
(
&
decoder
,
8
);
R
(
decoder
);
}
else
{
range
=
1
;
}
/* special value 0xffff indicates 'all bytes to the end' */
if
(
so_end
==
0xffff
)
so_end
=
-
1
;
process_received_nack
(
entity
,
nack_sn
,
so_start
,
so_end
,
range
,
sn_set
);
/* 38.322 5.3.3.3 says to stop t_poll_retransmit if a ACK or NACK is
* received for the SN 'poll_sn'
* received for the SN 'poll_sn'
- check NACK case (ACK done above)
*/
if
(
sn_compare_tx
(
entity
,
nack_sn
,
entity
->
poll_sn
)
<=
0
&&
sn_compare_tx
(
entity
,
entity
->
poll_sn
,
(
nack_sn
+
range
)
%
entity
->
sn_modulus
)
<
0
)
...
...
openair2/LAYER2/nr_rlc/tests/run_tests.sh
View file @
00a6fa20
#!/bin/sh
test_count
=
1
4
test_count
=
1
5
for
i
in
`
seq
$test_count
`
do
...
...
openair2/LAYER2/nr_rlc/tests/test15.h
0 → 100644
View file @
00a6fa20
/*
* am test (SN field size 18):
* test "range" in NACK, generate a case where so_start > so_end
* (so so_start and so_end are not from the same PDU)
*/
TIME
,
1
,
GNB_AM
,
100000
,
100000
,
45
,
35
,
0
,
-
1
,
-
1
,
8
,
18
,
UE_AM
,
100000
,
100000
,
45
,
35
,
0
,
-
1
,
-
1
,
8
,
18
,
GNB_PDU_SIZE
,
40
,
UE_PDU_SIZE
,
80
,
GNB_SDU
,
0
,
50
,
GNB_SDU
,
1
,
50
,
GNB_SDU
,
2
,
50
,
TIME
,
2
,
UE_RECV_FAILS
,
1
,
TIME
,
4
,
UE_RECV_FAILS
,
0
,
TIME
,
-
1
openair2/LAYER2/nr_rlc/tests/test15.txt.gz
0 → 100644
View file @
00a6fa20
File added
openair2/RRC/LTE/rrc_defs.h
View file @
00a6fa20
...
...
@@ -67,6 +67,8 @@
#define MAX_NUM_NEIGH_CELLs 6
/* maximum neighbouring cells number */
#define MAX_NUM_GNB_CELLs 1
/* maximum gNB cells number */
#define UE_STATE_NOTIFICATION_INTERVAL 50
#define IPV4_ADDR "%u.%u.%u.%u"
...
...
@@ -804,8 +806,13 @@ typedef struct eNB_RRC_INST_s {
int
num_neigh_cells_cc
[
MAX_NUM_CCs
];
uint32_t
neigh_cells_id
[
MAX_NUM_NEIGH_CELLs
][
MAX_NUM_CCs
];
// gNB cells connected to this eNB
int
num_gnb_cells
;
int
num_gnb_cells_cc
[
MAX_NUM_GNB_CELLs
];
uint32_t
gnb_cells_id
[
MAX_NUM_GNB_CELLs
][
MAX_NUM_CCs
];
// Nr scc freq band and SSB absolute frequency
uint32_t
nr_
neigh_freq_band
[
MAX_NUM_NEIGH
_CELLs
][
MAX_NUM_CCs
];
uint32_t
nr_
gnb_freq_band
[
MAX_NUM_GNB
_CELLs
][
MAX_NUM_CCs
];
int
nr_scg_ssb_freq
;
// other RAN parameters
...
...
openair2/RRC/LTE/rrc_eNB.c
View file @
00a6fa20
...
...
@@ -1283,7 +1283,7 @@ rrc_eNB_generate_UECapabilityEnquiry(
T
(
T_ENB_RRC_UE_CAPABILITY_ENQUIRY
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
int16_t
eutra_band
=
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
configuration
.
eutra_band
[
0
];
uint32_t
nr_band
=
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
nr_
neigh
_freq_band
[
0
][
0
];
uint32_t
nr_band
=
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
nr_
gnb
_freq_band
[
0
][
0
];
size
=
do_UECapabilityEnquiry
(
ctxt_pP
,
buffer
,
...
...
@@ -1333,7 +1333,7 @@ rrc_eNB_generate_NR_UECapabilityEnquiry(
T
(
T_ENB_RRC_UE_CAPABILITY_ENQUIRY
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
int16_t
eutra_band
=
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
configuration
.
eutra_band
[
0
];
uint32_t
nr_band
=
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
nr_
neigh
_freq_band
[
0
][
0
];
uint32_t
nr_band
=
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
nr_
gnb
_freq_band
[
0
][
0
];
size
=
do_NR_UECapabilityEnquiry
(
ctxt_pP
,
buffer
,
...
...
@@ -7588,8 +7588,8 @@ is_en_dc_supported(
)
//-----------------------------------------------------------------------------
{
/* to be refined - check that the
eNB is connected to a gNB, check that
* the band
s supported by the UE include the band
of the gNB
/* to be refined - check that the
bands supported by the UE include
* the band of the gNB
*/
#define NCE nonCriticalExtension
return
c
!=
NULL
...
...
@@ -8289,8 +8289,13 @@ rrc_eNB_decode_dcch(
ue_context_p
->
ue_context
.
UE_Capability
=
0
;
}
if
(
dec_rval
.
code
==
RC_OK
)
ue_context_p
->
ue_context
.
does_nr
=
is_en_dc_supported
(
ue_context_p
->
ue_context
.
UE_Capability
);
if
(
dec_rval
.
code
==
RC_OK
)
{
/* do NR only if at least one gNB connected */
if
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
num_gnb_cells
!=
0
)
ue_context_p
->
ue_context
.
does_nr
=
is_en_dc_supported
(
ue_context_p
->
ue_context
.
UE_Capability
);
else
ue_context_p
->
ue_context
.
does_nr
=
0
;
}
if
(
EPC_MODE_ENABLED
)
{
rrc_eNB_send_S1AP_UE_CAPABILITIES_IND
(
ctxt_pP
,
...
...
@@ -9029,22 +9034,22 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
}
void
rrc_eNB_process_ENDC_x2_setup_request
(
int
mod_id
,
x2ap_ENDC_setup_req_t
*
m
)
{
if
(
RC
.
rrc
[
mod_id
]
->
num_
neigh_cells
>
MAX_NUM_NEIGH
_CELLs
)
{
LOG_E
(
RRC
,
"Error: number of
neighbouring cells is exceeded
\n
"
);
if
(
RC
.
rrc
[
mod_id
]
->
num_
gnb_cells
>=
MAX_NUM_GNB
_CELLs
)
{
LOG_E
(
RRC
,
"Error: number of
gNB cells is exceeded
\n
"
);
return
;
}
if
(
m
->
num_cc
>
MAX_NUM_CCs
)
{
LOG_E
(
RRC
,
"Error: number of
neighbouring
cells carriers is exceeded
\n
"
);
LOG_E
(
RRC
,
"Error: number of
gNB
cells carriers is exceeded
\n
"
);
return
;
}
RC
.
rrc
[
mod_id
]
->
num_
neigh
_cells
++
;
RC
.
rrc
[
mod_id
]
->
num_
neigh_cells_cc
[
RC
.
rrc
[
mod_id
]
->
num_neigh
_cells
-
1
]
=
m
->
num_cc
;
RC
.
rrc
[
mod_id
]
->
num_
gnb
_cells
++
;
RC
.
rrc
[
mod_id
]
->
num_
gnb_cells_cc
[
RC
.
rrc
[
mod_id
]
->
num_gnb
_cells
-
1
]
=
m
->
num_cc
;
for
(
int
i
=
0
;
i
<
m
->
num_cc
;
i
++
)
{
RC
.
rrc
[
mod_id
]
->
neigh_cells_id
[
RC
.
rrc
[
mod_id
]
->
num_neigh
_cells
-
1
][
i
]
=
m
->
Nid_cell
[
i
];
RC
.
rrc
[
mod_id
]
->
nr_
neigh_freq_band
[
RC
.
rrc
[
mod_id
]
->
num_neigh
_cells
-
1
][
i
]
=
m
->
servedNrCell_band
[
i
];
RC
.
rrc
[
mod_id
]
->
gnb_cells_id
[
RC
.
rrc
[
mod_id
]
->
num_gnb
_cells
-
1
][
i
]
=
m
->
Nid_cell
[
i
];
RC
.
rrc
[
mod_id
]
->
nr_
gnb_freq_band
[
RC
.
rrc
[
mod_id
]
->
num_gnb
_cells
-
1
][
i
]
=
m
->
servedNrCell_band
[
i
];
}
}
...
...
openair2/X2AP/x2ap_eNB.c
View file @
00a6fa20
...
...
@@ -116,9 +116,7 @@ void x2ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_associa
/* some sanity check - to be refined at some point */
if
(
sctp_new_association_resp
->
sctp_state
!=
SCTP_STATE_ESTABLISHED
)
{
X2AP_ERROR
(
"x2ap_enb_data_p not NULL and sctp state not SCTP_STATE_ESTABLISHED, what to do?
\n
"
);
// Allow for a gracious exit when we kill first the gNB, then the eNB
//abort();
return
;
exit
(
1
);
}
x2ap_enb_data_p
->
in_streams
=
sctp_new_association_resp
->
in_streams
;
...
...
openair2/X2AP/x2ap_eNB_handler.c
View file @
00a6fa20
...
...
@@ -690,9 +690,11 @@ int x2ap_eNB_handle_x2_setup_failure(instance_t instance,
// need a FSM to handle all cases
if
((
ie
->
value
.
choice
.
Cause
.
present
==
X2AP_Cause_PR_misc
)
&&
(
ie
->
value
.
choice
.
Cause
.
choice
.
misc
==
X2AP_CauseMisc_unspecified
))
{
X2AP_WARN
(
"Received X2 setup failure for eNB ... eNB is not ready
\n
"
);
X2AP_ERROR
(
"Received X2 setup failure for eNB ... eNB is not ready
\n
"
);
exit
(
1
);
}
else
{
X2AP_ERROR
(
"Received x2 setup failure for eNB... please check your parameters
\n
"
);
exit
(
1
);
}
x2ap_eNB_data
->
state
=
X2AP_ENB_STATE_WAITING
;
...
...
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