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
fb12c6eb
Commit
fb12c6eb
authored
Oct 16, 2018
by
Raphael Defosseux
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of
https://gitlab.eurecom.fr/oai/openairinterface5g
into develop
parents
396dc20f
e91bc30a
Changes
57
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
57 changed files
with
803 additions
and
616 deletions
+803
-616
ci-scripts/buildOnVM.sh
ci-scripts/buildOnVM.sh
+2
-2
ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf
...f_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf
+2
-4
ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf
...nf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf
+2
-4
ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf
...nf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf
+2
-4
ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
+2
-5
ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
+2
-5
ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
+2
-5
ci-scripts/conf_files/lte-fdd-basic-sim.conf
ci-scripts/conf_files/lte-fdd-basic-sim.conf
+2
-5
ci-scripts/conf_files/lte-tdd-basic-sim.conf
ci-scripts/conf_files/lte-tdd-basic-sim.conf
+2
-4
cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
...utotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
+2
-5
cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
...utotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
+2
-5
cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
...autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
+2
-5
cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
...autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
+2
-5
cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
...autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
+2
-5
cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
.../autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
+2
-5
cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf
...argets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf
+2
-5
cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf
...argets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf
+2
-5
cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf
...targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf
+2
-5
cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf
...sts/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf
+2
-5
cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf
...sts/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf
+2
-5
cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf
...ests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf
+2
-5
cmake_targets/tools/build_helper
cmake_targets/tools/build_helper
+1
-1
common/config/config_userapi.c
common/config/config_userapi.c
+33
-0
common/config/config_userapi.h
common/config/config_userapi.h
+1
-1
openair2/COMMON/rrc_messages_types.h
openair2/COMMON/rrc_messages_types.h
+4
-3
openair2/COMMON/s1ap_messages_types.h
openair2/COMMON/s1ap_messages_types.h
+11
-3
openair2/ENB_APP/enb_config.c
openair2/ENB_APP/enb_config.c
+225
-186
openair2/ENB_APP/enb_paramdef.h
openair2/ENB_APP/enb_paramdef.h
+57
-7
openair2/RRC/LTE/MESSAGES/asn1_msg.c
openair2/RRC/LTE/MESSAGES/asn1_msg.c
+51
-47
openair2/RRC/LTE/rrc_defs.h
openair2/RRC/LTE/rrc_defs.h
+0
-7
openair2/RRC/LTE/rrc_eNB_S1AP.c
openair2/RRC/LTE/rrc_eNB_S1AP.c
+127
-126
openair2/UTIL/MEM/mem_block.c
openair2/UTIL/MEM/mem_block.c
+2
-0
openair2/UTIL/MEM/mem_block.h
openair2/UTIL/MEM/mem_block.h
+2
-1
openair3/S1AP/s1ap_eNB.c
openair3/S1AP/s1ap_eNB.c
+36
-14
openair3/S1AP/s1ap_eNB_defs.h
openair3/S1AP/s1ap_eNB_defs.h
+9
-3
openair3/S1AP/s1ap_eNB_nas_procedures.c
openair3/S1AP/s1ap_eNB_nas_procedures.c
+60
-14
openair3/S1AP/s1ap_eNB_nnsf.c
openair3/S1AP/s1ap_eNB_nnsf.c
+91
-25
openair3/S1AP/s1ap_eNB_nnsf.h
openair3/S1AP/s1ap_eNB_nnsf.h
+6
-0
openair3/S1AP/s1ap_eNB_ue_context.h
openair3/S1AP/s1ap_eNB_ue_context.h
+5
-0
openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf
...ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf
+2
-5
openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb1.conf
...r3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb1.conf
+2
-4
targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.calisson.conf
.../CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.calisson.conf
+3
-6
targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.memphis.conf
...S/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.memphis.conf
+3
-6
targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.nord.conf
...ECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.nord.conf
+3
-6
targets/PROJECTS/E-MBMS/enb.conf
targets/PROJECTS/E-MBMS/enb.conf
+3
-6
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf
.../GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf
+2
-3
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf
...ROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf
+2
-3
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf
...S/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf
+2
-4
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf
...RIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf
+2
-4
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf
...ENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf
+2
-4
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
...TS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
+2
-4
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf
...E-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf
+2
-4
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf
...S/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf
+2
-4
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf
.../GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf
+2
-5
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf
...JECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf
+2
-4
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf
...JECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf
+2
-4
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf
...TS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf
+2
-4
No files found.
ci-scripts/buildOnVM.sh
View file @
fb12c6eb
...
...
@@ -127,7 +127,7 @@ case $key in
ARCHIVES_LOC
=
enb_usrp
LOG_PATTERN
=
.Rel14.txt
NB_PATTERN_FILES
=
4
BUILD_OPTIONS
=
"--eNB -w USRP"
BUILD_OPTIONS
=
"--eNB -w USRP
--mu
"
shift
;;
-v2
)
...
...
@@ -181,7 +181,7 @@ case $key in
ARCHIVES_LOC
=
enb_usrp
LOG_PATTERN
=
.Rel14.txt
NB_PATTERN_FILES
=
4
BUILD_OPTIONS
=
"--eNB -w USRP"
BUILD_OPTIONS
=
"--eNB -w USRP
--mu
"
;;
basic-sim
)
VM_NAME
=
ci-basic-sim
...
...
ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf
View file @
fb12c6eb
...
...
@@ -13,10 +13,8 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf
View file @
fb12c6eb
...
...
@@ -13,10 +13,8 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf
View file @
fb12c6eb
...
...
@@ -13,10 +13,8 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
ci-scripts/conf_files/lte-fdd-basic-sim.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"93"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
93
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
ci-scripts/conf_files/lte-tdd-basic-sim.conf
View file @
fb12c6eb
...
...
@@ -13,10 +13,8 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"93"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
93
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
cmake_targets/tools/build_helper
View file @
fb12c6eb
...
...
@@ -683,7 +683,7 @@ install_asn1c_from_source(){
# better to use a given commit than a branch in case the branch
# is updated and requires modifications in the source of OAI
#git checkout velichkov_s1ap_plus_option_group
git checkout
73d6b23dcec9ab36605b4af884143824392134c1
git checkout
d3aed06bb2bec7df1b5c6d0333f8c7dfc5993372
autoreconf -iv
./configure
make -j`nproc`
...
...
common/config/config_userapi.c
View file @
fb12c6eb
...
...
@@ -29,6 +29,9 @@
* \note
* \warning
*/
#define _GNU_SOURCE
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
...
...
@@ -210,6 +213,36 @@ configmodule_interface_t *cfgif = config_get_if();
return
ret
;
}
int
config_getlist
(
paramlist_def_t
*
ParamList
,
paramdef_t
*
params
,
int
numparams
,
char
*
prefix
)
{
if
(
CONFIG_ISFLAGSET
(
CONFIG_ABORT
))
{
fprintf
(
stderr
,
"[CONFIG] config_get skipped, config module not properly initialized
\n
"
);
return
-
1
;
}
if
(
!
config_get_if
())
return
-
1
;
const
int
ret
=
config_get_if
()
->
getlist
(
ParamList
,
params
,
numparams
,
prefix
);
if
(
ret
>=
0
&&
params
)
{
char
*
newprefix
;
if
(
prefix
)
{
int
rc
=
asprintf
(
&
newprefix
,
"%s.%s"
,
prefix
,
ParamList
->
listname
);
if
(
rc
<
0
)
newprefix
=
NULL
;
}
else
{
newprefix
=
ParamList
->
listname
;
}
char
cfgpath
[
MAX_OPTNAME_SIZE
*
2
+
6
];
/* prefix.listname.[listindex] */
for
(
int
i
=
0
;
i
<
ParamList
->
numelt
;
++
i
)
{
// TODO config_process_cmdline?
sprintf
(
cfgpath
,
"%s.[%i]"
,
newprefix
,
i
);
config_execcheck
(
ParamList
->
paramarray
[
i
],
numparams
,
cfgpath
);
}
if
(
prefix
)
free
(
newprefix
);
}
return
ret
;
}
int
config_isparamset
(
paramdef_t
*
params
,
int
paramidx
)
{
if
((
params
[
paramidx
].
paramflags
&
PARAMFLAG_PARAMSET
)
!=
0
)
{
...
...
common/config/config_userapi.h
View file @
fb12c6eb
...
...
@@ -57,7 +57,7 @@ extern int config_assign_ipv4addr(paramdef_t *cfgoptions, char *ipv4addr);
/* apis to get parameters, to be used by oai modules, at configuration time */
extern
int
config_get
(
paramdef_t
*
params
,
int
numparams
,
char
*
prefix
);
#define config_getlist config_get_if()->getlist
extern
int
config_getlist
(
paramlist_def_t
*
ParamList
,
paramdef_t
*
params
,
int
numparams
,
char
*
prefix
);
/* apis to retrieve parameters info after calling get or getlist functions */
extern
int
config_isparamset
(
paramdef_t
*
params
,
int
paramidx
);
...
...
openair2/COMMON/rrc_messages_types.h
View file @
fb12c6eb
...
...
@@ -97,9 +97,10 @@ typedef struct RrcConfigurationReq_s {
uint16_t
tac
;
uint16_t
mcc
;
uint16_t
mnc
;
uint8_t
mnc_digit_length
;
uint16_t
mcc
[
PLMN_LIST_MAX_SIZE
];
uint16_t
mnc
[
PLMN_LIST_MAX_SIZE
];
uint8_t
mnc_digit_length
[
PLMN_LIST_MAX_SIZE
];
uint8_t
num_plmn
;
paging_drx_t
default_drx
;
...
...
openair2/COMMON/s1ap_messages_types.h
View file @
fb12c6eb
...
...
@@ -325,12 +325,14 @@ typedef struct s1ap_register_enb_req_s {
/* Tracking area code */
uint16_t
tac
;
#define PLMN_LIST_MAX_SIZE 6
/* Mobile Country Code
* Mobile Network Code
*/
uint16_t
mcc
;
uint16_t
mnc
;
uint8_t
mnc_digit_length
;
uint16_t
mcc
[
PLMN_LIST_MAX_SIZE
];
uint16_t
mnc
[
PLMN_LIST_MAX_SIZE
];
uint8_t
mnc_digit_length
[
PLMN_LIST_MAX_SIZE
];
uint8_t
num_plmn
;
/* Default Paging DRX of the eNB as defined in TS 36.304 */
paging_drx_t
default_drx
;
...
...
@@ -342,6 +344,8 @@ typedef struct s1ap_register_enb_req_s {
uint8_t
nb_mme
;
/* List of MME to connect to */
net_ip_address_t
mme_ip_address
[
S1AP_MAX_NB_MME_IP_ADDRESS
];
uint8_t
broadcast_plmn_num
[
S1AP_MAX_NB_MME_IP_ADDRESS
];
uint8_t
broadcast_plmn_index
[
S1AP_MAX_NB_MME_IP_ADDRESS
][
PLMN_LIST_MAX_SIZE
];
/* Number of SCTP streams used for a mme association */
uint16_t
sctp_in_streams
;
...
...
@@ -372,6 +376,10 @@ typedef struct s1ap_nas_first_req_s {
/* UE id for initial connection to S1AP */
uint16_t
ue_initial_id
;
/* the chosen PLMN identity as index, see TS 36.331 6.2.2 RRC Connection
* Setup Complete. This index here is zero-based, unlike the standard! */
int
selected_plmn_identity
;
/* Establishment cause as sent by UE */
rrc_establishment_cause_t
establishment_cause
;
...
...
openair2/ENB_APP/enb_config.c
View file @
fb12c6eb
This diff is collapsed.
Click to expand it.
openair2/ENB_APP/enb_paramdef.h
View file @
fb12c6eb
...
...
@@ -185,8 +185,8 @@ typedef enum {
#define ENB_CONFIG_STRING_CELL_TYPE "cell_type"
#define ENB_CONFIG_STRING_ENB_NAME "eNB_name"
#define ENB_CONFIG_STRING_TRACKING_AREA_CODE "tracking_area_code"
#define ENB_CONFIG_STRING_MOBILE_COUNTRY_CODE
"mobile_country_code"
#define ENB_CONFIG_STRING_MOBILE_NETWORK_CODE
"mobile_network_code"
#define ENB_CONFIG_STRING_MOBILE_COUNTRY_CODE
_OLD
"mobile_country_code"
#define ENB_CONFIG_STRING_MOBILE_NETWORK_CODE
_OLD
"mobile_network_code"
#define ENB_CONFIG_STRING_TRANSPORT_S_PREFERENCE "tr_s_preference"
#define ENB_CONFIG_STRING_LOCAL_S_IF_NAME "local_s_if_name"
#define ENB_CONFIG_STRING_LOCAL_S_ADDRESS "local_s_address"
...
...
@@ -204,9 +204,9 @@ typedef enum {
{ENB_CONFIG_STRING_ENB_ID, NULL, 0, uptr:NULL, defintval:0, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_CELL_TYPE, NULL, 0, strptr:NULL, defstrval:"CELL_MACRO_ENB", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_ENB_NAME, NULL, 0, strptr:NULL, defstrval:"OAIeNodeB", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_TRACKING_AREA_CODE, NULL, 0,
strptr:NULL, defstrval:"0", TYPE_STRING,
0}, \
{ENB_CONFIG_STRING_MOBILE_COUNTRY_CODE
, NULL, 0, strptr:NULL, defstrval:"0",
TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_MOBILE_NETWORK_CODE
, NULL, 0, strptr:NULL, defstrval:"0",
TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_TRACKING_AREA_CODE, NULL, 0,
uptr:NULL, defuintval:0, TYPE_UINT,
0}, \
{ENB_CONFIG_STRING_MOBILE_COUNTRY_CODE
_OLD, NULL, 0, strptr:NULL, defstrval:NULL,
TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_MOBILE_NETWORK_CODE
_OLD, NULL, 0, strptr:NULL, defstrval:NULL,
TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_TRANSPORT_S_PREFERENCE, NULL, 0, strptr:NULL, defstrval:"local_mac", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_LOCAL_S_IF_NAME, NULL, 0, strptr:NULL, defstrval:"lo", TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_LOCAL_S_ADDRESS, NULL, 0, strptr:NULL, defstrval:"127.0.0.1", TYPE_STRING, 0}, \
...
...
@@ -220,8 +220,8 @@ typedef enum {
#define ENB_CELL_TYPE_IDX 1
#define ENB_ENB_NAME_IDX 2
#define ENB_TRACKING_AREA_CODE_IDX 3
#define ENB_MOBILE_COUNTRY_CODE_IDX
4
#define ENB_MOBILE_NETWORK_CODE_IDX
5
#define ENB_MOBILE_COUNTRY_CODE_IDX
_OLD
4
#define ENB_MOBILE_NETWORK_CODE_IDX
_OLD
5
#define ENB_TRANSPORT_S_PREFERENCE_IDX 6
#define ENB_LOCAL_S_IF_NAME_IDX 7
#define ENB_LOCAL_S_ADDRESS_IDX 8
...
...
@@ -230,9 +230,56 @@ typedef enum {
#define ENB_REMOTE_S_PORTC_IDX 11
#define ENB_LOCAL_S_PORTD_IDX 12
#define ENB_REMOTE_S_PORTD_IDX 13
#define TRACKING_AREA_CODE_OKRANGE {0x0001,0xFFFD}
#define ENBPARAMS_CHECK { \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s2 = { config_check_intrange, TRACKING_AREA_CODE_OKRANGE } },\
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
{ .s5 = { NULL } }, \
}
/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
/* PLMN ID configuration */
#define ENB_CONFIG_STRING_PLMN_LIST "plmn_list"
#define ENB_CONFIG_STRING_MOBILE_COUNTRY_CODE "mcc"
#define ENB_CONFIG_STRING_MOBILE_NETWORK_CODE "mnc"
#define ENB_CONFIG_STRING_MNC_DIGIT_LENGTH "mnc_length"
#define ENB_MOBILE_COUNTRY_CODE_IDX 0
#define ENB_MOBILE_NETWORK_CODE_IDX 1
#define ENB_MNC_DIGIT_LENGTH 2
#define PLMNPARAMS_DESC { \
/* optname helpstr paramflags XXXptr def val type numelt */
\
{ENB_CONFIG_STRING_MOBILE_COUNTRY_CODE, "mobile country code", 0, uptr:NULL, defuintval:1000, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_MOBILE_NETWORK_CODE, "mobile network code", 0, uptr:NULL, defuintval:1000, TYPE_UINT, 0}, \
{ENB_CONFIG_STRING_MNC_DIGIT_LENGTH, "length of the MNC (2 or 3)", 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
}
#define MCC_MNC_OKRANGES {0,999}
#define MNC_DIGIT_LENGTH_OKVALUES {2,3}
#define PLMNPARAMS_CHECK { \
{ .s2 = { config_check_intrange, MCC_MNC_OKRANGES } }, \
{ .s2 = { config_check_intrange, MCC_MNC_OKRANGES } }, \
{ .s1 = { config_check_intval, MNC_DIGIT_LENGTH_OKVALUES, 2 } }, \
}
/* component carries configuration parameters name */
...
...
@@ -681,6 +728,7 @@ typedef enum {
#define ENB_CONFIG_STRING_MME_IPV6_ADDRESS "ipv6"
#define ENB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE "active"
#define ENB_CONFIG_STRING_MME_IP_ADDRESS_PREFERENCE "preference"
#define ENB_CONFIG_STRING_MME_BROADCAST_PLMN_INDEX "broadcast_plmn_index"
/*-------------------------------------------------------------------------------------------------------------------------------------*/
...
...
@@ -692,12 +740,14 @@ typedef enum {
{ENB_CONFIG_STRING_MME_IPV6_ADDRESS, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_MME_IP_ADDRESS_PREFERENCE, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_MME_BROADCAST_PLMN_INDEX, NULL, 0, uptr:NULL, defintarrayval:NULL,TYPE_UINTARRAY, 6} \
}
#define ENB_MME_IPV4_ADDRESS_IDX 0
#define ENB_MME_IPV6_ADDRESS_IDX 1
#define ENB_MME_IP_ADDRESS_ACTIVE_IDX 2
#define ENB_MME_IP_ADDRESS_PREFERENCE_IDX 3
#define ENB_MME_BROADCAST_PLMN_INDEX 4
/*---------------------------------------------------------------------------------------------------------------------------------------*/
/* X2 configuration parameters section name */
...
...
openair2/RRC/LTE/MESSAGES/asn1_msg.c
View file @
fb12c6eb
...
...
@@ -345,8 +345,13 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
{
// SystemInformation_t systemInformation;
PLMN_IdentityInfo_t
PLMN_identity_info
;
MCC_MNC_Digit_t
dummy_mcc
[
3
],
dummy_mnc
[
3
];
#if defined(ENABLE_ITTI)
int
num_plmn
=
configuration
->
num_plmn
;
#else
int
num_plmn
=
1
;
#endif
PLMN_IdentityInfo_t
PLMN_identity_info
[
num_plmn
];
MCC_MNC_Digit_t
dummy_mcc
[
num_plmn
][
3
],
dummy_mnc
[
num_plmn
][
3
];
asn_enc_rval_t
enc_rval
;
SchedulingInfo_t
schedulingInfo
;
SIB_Type_t
sib_type
;
...
...
@@ -354,6 +359,7 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
uint8_t
*
buffer
=
carrier
->
SIB1
;
BCCH_DL_SCH_Message_t
*
bcch_message
=
&
carrier
->
siblock1
;
SystemInformationBlockType1_t
**
sib1
=
&
carrier
->
sib1
;
int
i
;
memset
(
bcch_message
,
0
,
sizeof
(
BCCH_DL_SCH_Message_t
));
...
...
@@ -363,66 +369,67 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
*
sib1
=
&
bcch_message
->
message
.
choice
.
c1
.
choice
.
systemInformationBlockType1
;
memset
(
&
PLMN_identity_info
,
0
,
sizeof
(
PLMN_IdentityInfo_t
));
memset
(
PLMN_identity_info
,
0
,
num_plmn
*
sizeof
(
PLMN_IdentityInfo_t
));
memset
(
&
schedulingInfo
,
0
,
sizeof
(
SchedulingInfo_t
));
memset
(
&
sib_type
,
0
,
sizeof
(
SIB_Type_t
));
/* as per TS 36.311, up to 6 PLMN_identity_info are allowed in list -> add one by one */
for
(
i
=
0
;
i
<
configuration
->
num_plmn
;
++
i
)
{
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
=
CALLOC
(
1
,
sizeof
(
*
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
));
memset
(
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
,
0
,
sizeof
(
*
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
));
PLMN_identity_info
.
plmn_Identity
.
mcc
=
CALLOC
(
1
,
sizeof
(
*
PLMN_identity_info
.
plmn_Identity
.
mcc
));
memset
(
PLMN_identity_info
.
plmn_Identity
.
mcc
,
0
,
sizeof
(
*
PLMN_identity_info
.
plmn_Identity
.
mcc
));
asn_set_empty
(
&
PLMN_identity_info
.
plmn_Identity
.
mcc
->
list
);
//.size=0;
asn_set_empty
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
->
list
);
//.size=0;
#if defined(ENABLE_ITTI)
dummy_mcc
[
0
]
=
(
configuration
->
mcc
/
100
)
%
10
;
dummy_mcc
[
1
]
=
(
configuration
->
mcc
/
10
)
%
10
;
dummy_mcc
[
2
]
=
(
configuration
->
mcc
/
1
)
%
10
;
dummy_mcc
[
i
][
0
]
=
(
configuration
->
mcc
[
i
]
/
100
)
%
10
;
dummy_mcc
[
i
][
1
]
=
(
configuration
->
mcc
[
i
]
/
10
)
%
10
;
dummy_mcc
[
i
][
2
]
=
(
configuration
->
mcc
[
i
]
/
1
)
%
10
;
#else
dummy_mcc
[
0
]
=
0
;
dummy_mcc
[
1
]
=
0
;
dummy_mcc
[
2
]
=
1
;
dummy_mcc
[
i
]
[
0
]
=
0
;
dummy_mcc
[
i
]
[
1
]
=
0
;
dummy_mcc
[
i
]
[
2
]
=
1
;
#endif
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
.
plmn_Identity
.
mcc
->
list
,
&
dummy_mcc
[
0
]);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
.
plmn_Identity
.
mcc
->
list
,
&
dummy_mcc
[
1
]);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
.
plmn_Identity
.
mcc
->
list
,
&
dummy_mcc
[
2
]);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
->
list
,
&
dummy_mcc
[
i
]
[
0
]);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
->
list
,
&
dummy_mcc
[
i
]
[
1
]);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
->
list
,
&
dummy_mcc
[
i
]
[
2
]);
PLMN_identity_info
.
plmn_Identity
.
mnc
.
list
.
size
=
0
;
PLMN_identity_info
.
plmn_Identity
.
mnc
.
list
.
count
=
0
;
PLMN_identity_info
[
i
]
.
plmn_Identity
.
mnc
.
list
.
size
=
0
;
PLMN_identity_info
[
i
]
.
plmn_Identity
.
mnc
.
list
.
count
=
0
;
#if defined(ENABLE_ITTI)
if
(
configuration
->
mnc
>=
100
)
{
dummy_mnc
[
0
]
=
(
configuration
->
mnc
/
100
)
%
10
;
dummy_mnc
[
1
]
=
(
configuration
->
mnc
/
10
)
%
10
;
dummy_mnc
[
2
]
=
(
configuration
->
mnc
/
1
)
%
10
;
}
else
{
if
(
configuration
->
mnc_digit_length
==
2
)
{
dummy_mnc
[
0
]
=
(
configuration
->
mnc
/
10
)
%
10
;
dummy_mnc
[
1
]
=
(
configuration
->
mnc
/
1
)
%
10
;
dummy_mnc
[
2
]
=
0xf
;
if
(
configuration
->
mnc
[
i
]
>=
100
)
{
dummy_mnc
[
i
][
0
]
=
(
configuration
->
mnc
[
i
]
/
100
)
%
10
;
dummy_mnc
[
i
][
1
]
=
(
configuration
->
mnc
[
i
]
/
10
)
%
10
;
dummy_mnc
[
i
][
2
]
=
(
configuration
->
mnc
[
i
]
/
1
)
%
10
;
}
else
{
dummy_mnc
[
0
]
=
(
configuration
->
mnc
/
100
)
%
100
;
dummy_mnc
[
1
]
=
(
configuration
->
mnc
/
10
)
%
10
;
dummy_mnc
[
2
]
=
(
configuration
->
mnc
/
1
)
%
10
;
if
(
configuration
->
mnc_digit_length
[
i
]
==
2
)
{
dummy_mnc
[
i
][
0
]
=
(
configuration
->
mnc
[
i
]
/
10
)
%
10
;
dummy_mnc
[
i
][
1
]
=
(
configuration
->
mnc
[
i
]
/
1
)
%
10
;
dummy_mnc
[
i
][
2
]
=
0xf
;
}
else
{
dummy_mnc
[
i
][
0
]
=
(
configuration
->
mnc
[
i
]
/
100
)
%
100
;
dummy_mnc
[
i
][
1
]
=
(
configuration
->
mnc
[
i
]
/
10
)
%
10
;
dummy_mnc
[
i
][
2
]
=
(
configuration
->
mnc
[
i
]
/
1
)
%
10
;
}
}
}
#else
dummy_mnc
[
0
]
=
0
;
dummy_mnc
[
1
]
=
1
;
dummy_mnc
[
2
]
=
0xf
;
dummy_mnc
[
i
]
[
0
]
=
0
;
dummy_mnc
[
i
]
[
1
]
=
1
;
dummy_mnc
[
i
]
[
2
]
=
0xf
;
#endif
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
.
plmn_Identity
.
mnc
.
list
,
&
dummy_mnc
[
0
]);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
.
plmn_Identity
.
mnc
.
list
,
&
dummy_mnc
[
1
]);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mnc
.
list
,
&
dummy_mnc
[
i
]
[
0
]);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mnc
.
list
,
&
dummy_mnc
[
i
]
[
1
]);
if
(
dummy_mnc
[
2
]
!=
0xf
)
{
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
.
plmn_Identity
.
mnc
.
list
,
&
dummy_mnc
[
2
]);
}
if
(
dummy_mnc
[
i
]
[
2
]
!=
0xf
)
{
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mnc
.
list
,
&
dummy_mnc
[
i
]
[
2
]);
}
//assign_enum(&PLMN_identity_info.cellReservedForOperatorUse,PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved);
PLMN_identity_info
.
cellReservedForOperatorUse
=
PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved
;
//assign_enum(&PLMN_identity_info.cellReservedForOperatorUse,PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved);
PLMN_identity_info
[
i
]
.
cellReservedForOperatorUse
=
PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved
;
ASN_SEQUENCE_ADD
(
&
(
*
sib1
)
->
cellAccessRelatedInfo
.
plmn_IdentityList
.
list
,
&
PLMN_identity_info
);
ASN_SEQUENCE_ADD
(
&
(
*
sib1
)
->
cellAccessRelatedInfo
.
plmn_IdentityList
.
list
,
&
PLMN_identity_info
[
i
]);
}
// 16 bits
...
...
@@ -1670,10 +1677,7 @@ uint8_t do_RRCConnectionSetupComplete(uint8_t Mod_id, uint8_t *buffer, const uin
rrcConnectionSetupComplete
->
criticalExtensions
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete_r8
.
nonCriticalExtension
=
CALLOC
(
1
,
sizeof
(
*
rrcConnectionSetupComplete
->
criticalExtensions
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete_r8
.
nonCriticalExtension
));
if
(
usim_test
==
0
)
rrcConnectionSetupComplete
->
criticalExtensions
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete_r8
.
selectedPLMN_Identity
=
2
;
else
rrcConnectionSetupComplete
->
criticalExtensions
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete_r8
.
selectedPLMN_Identity
=
1
;
rrcConnectionSetupComplete
->
criticalExtensions
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete_r8
.
selectedPLMN_Identity
=
1
;
rrcConnectionSetupComplete
->
criticalExtensions
.
choice
.
c1
.
choice
.
rrcConnectionSetupComplete_r8
.
registeredMME
=
NULL
;
//calloc(1,sizeof(*rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME));
...
...
openair2/RRC/LTE/rrc_defs.h
View file @
fb12c6eb
...
...
@@ -699,13 +699,6 @@ typedef struct eNB_RRC_INST_s {
#if defined(ENABLE_ITTI)
RrcConfigurationReq
configuration
;
#endif
// other PLMN parameters
/// Mobile country code
int
mcc
;
/// Mobile network code
int
mnc
;
/// number of mnc digits
int
mnc_digit_length
;
// other RAN parameters
int
srb1_timer_poll_retransmit
;
...
...
openair2/RRC/LTE/rrc_eNB_S1AP.c
View file @
fb12c6eb
This diff is collapsed.
Click to expand it.
openair2/UTIL/MEM/mem_block.c
View file @
fb12c6eb
...
...
@@ -61,6 +61,7 @@ uint32_t counters[14] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
/*
* initialize all ures
*/
extern
mem_pool
*
memBlockVar
;
void
*
pool_buffer_init
(
void
)
{
...
...
@@ -68,6 +69,7 @@ pool_buffer_init (void)
uint32_t
index
,
mb_index
,
pool_index
;
mem_pool
*
memory
=
(
mem_pool
*
)
&
mem_block_var
;
memBlockVar
=
malloc
(
sizeof
(
mem_pool
));
int
pool_sizes
[
14
]
=
{
MEM_MNGT_MB0_NB_BLOCKS
,
MEM_MNGT_MB1_NB_BLOCKS
,
MEM_MNGT_MB2_NB_BLOCKS
,
MEM_MNGT_MB3_NB_BLOCKS
,
MEM_MNGT_MB4_NB_BLOCKS
,
MEM_MNGT_MB5_NB_BLOCKS
,
...
...
openair2/UTIL/MEM/mem_block.h
View file @
fb12c6eb
...
...
@@ -178,7 +178,8 @@ typedef struct {
}
mem_pool
;
mem_pool
mem_block_var
;
mem_pool
*
memBlockVar
;
#define mem_block_var (*memBlockVar)
#ifdef __cplusplus
}
...
...
openair3/S1AP/s1ap_eNB.c
View file @
fb12c6eb
...
...
@@ -97,7 +97,9 @@ static void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p,
net_ip_address_t
*
mme_ip_address
,
net_ip_address_t
*
local_ip_addr
,
uint16_t
in_streams
,
uint16_t
out_streams
)
uint16_t
out_streams
,
uint8_t
broadcast_plmn_num
,
uint8_t
broadcast_plmn_index
[
PLMN_LIST_MAX_SIZE
])
{
MessageDef
*
message_p
=
NULL
;
sctp_new_association_req_t
*
sctp_new_association_req_p
=
NULL
;
...
...
@@ -126,8 +128,8 @@ static void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p,
sizeof
(
*
local_ip_addr
));
S1AP_INFO
(
"[eNB %d] check the mme registration state
\n
"
,
instance_p
->
instance
);
mme
=
s1ap_eNB_get_MME_from_instance
(
instance_p
)
;
mme
=
NULL
;
if
(
mme
==
NULL
)
{
...
...
@@ -139,6 +141,9 @@ static void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p,
sctp_new_association_req_p
->
ulp_cnx_id
=
s1ap_mme_data_p
->
cnx_id
;
s1ap_mme_data_p
->
assoc_id
=
-
1
;
s1ap_mme_data_p
->
broadcast_plmn_num
=
broadcast_plmn_num
;
for
(
int
i
=
0
;
i
<
broadcast_plmn_num
;
++
i
)
s1ap_mme_data_p
->
broadcast_plmn_index
[
i
]
=
broadcast_plmn_index
[
i
];
s1ap_mme_data_p
->
s1ap_eNB_instance
=
instance_p
;
STAILQ_INIT
(
&
s1ap_mme_data_p
->
served_gummei
);
...
...
@@ -190,10 +195,14 @@ void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t *
/* Checks if it is a retry on the same eNB */
DevCheck
(
new_instance
->
eNB_id
==
s1ap_register_eNB
->
eNB_id
,
new_instance
->
eNB_id
,
s1ap_register_eNB
->
eNB_id
,
0
);
DevCheck
(
new_instance
->
cell_type
==
s1ap_register_eNB
->
cell_type
,
new_instance
->
cell_type
,
s1ap_register_eNB
->
cell_type
,
0
);
DevCheck
(
new_instance
->
num_plmn
==
s1ap_register_eNB
->
num_plmn
,
new_instance
->
num_plmn
,
s1ap_register_eNB
->
num_plmn
,
0
);
DevCheck
(
new_instance
->
tac
==
s1ap_register_eNB
->
tac
,
new_instance
->
tac
,
s1ap_register_eNB
->
tac
,
0
);
DevCheck
(
new_instance
->
mcc
==
s1ap_register_eNB
->
mcc
,
new_instance
->
mcc
,
s1ap_register_eNB
->
mcc
,
0
);
DevCheck
(
new_instance
->
mnc
==
s1ap_register_eNB
->
mnc
,
new_instance
->
mnc
,
s1ap_register_eNB
->
mnc
,
0
);
DevCheck
(
new_instance
->
mnc_digit_length
==
s1ap_register_eNB
->
mnc_digit_length
,
new_instance
->
mnc_digit_length
,
s1ap_register_eNB
->
mnc_digit_length
,
0
);
for
(
int
i
=
0
;
i
<
new_instance
->
num_plmn
;
i
++
)
{
DevCheck
(
new_instance
->
mcc
[
i
]
==
s1ap_register_eNB
->
mcc
[
i
],
new_instance
->
mcc
[
i
],
s1ap_register_eNB
->
mcc
[
i
],
0
);
DevCheck
(
new_instance
->
mnc
[
i
]
==
s1ap_register_eNB
->
mnc
[
i
],
new_instance
->
mnc
[
i
],
s1ap_register_eNB
->
mnc
[
i
],
0
);
DevCheck
(
new_instance
->
mnc_digit_length
[
i
]
==
s1ap_register_eNB
->
mnc_digit_length
[
i
],
new_instance
->
mnc_digit_length
[
i
],
s1ap_register_eNB
->
mnc_digit_length
[
i
],
0
);
}
DevCheck
(
new_instance
->
default_drx
==
s1ap_register_eNB
->
default_drx
,
new_instance
->
default_drx
,
s1ap_register_eNB
->
default_drx
,
0
);
}
else
{
new_instance
=
calloc
(
1
,
sizeof
(
s1ap_eNB_instance_t
));
...
...
@@ -208,9 +217,13 @@ void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t *
new_instance
->
eNB_id
=
s1ap_register_eNB
->
eNB_id
;
new_instance
->
cell_type
=
s1ap_register_eNB
->
cell_type
;
new_instance
->
tac
=
s1ap_register_eNB
->
tac
;
new_instance
->
mcc
=
s1ap_register_eNB
->
mcc
;
new_instance
->
mnc
=
s1ap_register_eNB
->
mnc
;
new_instance
->
mnc_digit_length
=
s1ap_register_eNB
->
mnc_digit_length
;
for
(
int
i
=
0
;
i
<
s1ap_register_eNB
->
num_plmn
;
i
++
)
{
new_instance
->
mcc
[
i
]
=
s1ap_register_eNB
->
mcc
[
i
];
new_instance
->
mnc
[
i
]
=
s1ap_register_eNB
->
mnc
[
i
];
new_instance
->
mnc_digit_length
[
i
]
=
s1ap_register_eNB
->
mnc_digit_length
[
i
];
}
new_instance
->
num_plmn
=
s1ap_register_eNB
->
num_plmn
;
new_instance
->
default_drx
=
s1ap_register_eNB
->
default_drx
;
/* Add the new instance to the list of eNB (meaningfull in virtual mode) */
...
...
@@ -231,7 +244,9 @@ void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_enb_req_t *
&
s1ap_register_eNB
->
mme_ip_address
[
index
],
&
s1ap_register_eNB
->
enb_ip_address
,
s1ap_register_eNB
->
sctp_in_streams
,
s1ap_register_eNB
->
sctp_out_streams
);
s1ap_register_eNB
->
sctp_out_streams
,
s1ap_register_eNB
->
broadcast_plmn_num
[
index
],
s1ap_register_eNB
->
broadcast_plmn_index
[
index
]);
}
}
...
...
@@ -459,7 +474,9 @@ static int s1ap_eNB_generate_s1_setup_request(
ie
->
id
=
S1AP_ProtocolIE_ID_id_Global_ENB_ID
;
ie
->
criticality
=
S1AP_Criticality_reject
;
ie
->
value
.
present
=
S1AP_S1SetupRequestIEs__value_PR_Global_ENB_ID
;
MCC_MNC_TO_PLMNID
(
instance_p
->
mcc
,
instance_p
->
mnc
,
instance_p
->
mnc_digit_length
,
MCC_MNC_TO_PLMNID
(
instance_p
->
mcc
[
s1ap_mme_data_p
->
broadcast_plmn_index
[
0
]],
instance_p
->
mnc
[
s1ap_mme_data_p
->
broadcast_plmn_index
[
0
]],
instance_p
->
mnc_digit_length
[
s1ap_mme_data_p
->
broadcast_plmn_index
[
0
]],
&
ie
->
value
.
choice
.
Global_ENB_ID
.
pLMNidentity
);
ie
->
value
.
choice
.
Global_ENB_ID
.
eNB_ID
.
present
=
S1AP_ENB_ID_PR_macroENB_ID
;
MACRO_ENB_ID_TO_BIT_STRING
(
instance_p
->
eNB_id
,
...
...
@@ -490,9 +507,14 @@ static int s1ap_eNB_generate_s1_setup_request(
ta
=
(
S1AP_SupportedTAs_Item_t
*
)
calloc
(
1
,
sizeof
(
S1AP_SupportedTAs_Item_t
));
INT16_TO_OCTET_STRING
(
instance_p
->
tac
,
&
ta
->
tAC
);
{
plmn
=
(
S1AP_PLMNidentity_t
*
)
calloc
(
1
,
sizeof
(
S1AP_PLMNidentity_t
));
MCC_MNC_TO_TBCD
(
instance_p
->
mcc
,
instance_p
->
mnc
,
instance_p
->
mnc_digit_length
,
plmn
);
ASN_SEQUENCE_ADD
(
&
ta
->
broadcastPLMNs
.
list
,
plmn
);
for
(
int
i
=
0
;
i
<
s1ap_mme_data_p
->
broadcast_plmn_num
;
++
i
)
{
plmn
=
(
S1AP_PLMNidentity_t
*
)
calloc
(
1
,
sizeof
(
S1AP_PLMNidentity_t
));
MCC_MNC_TO_TBCD
(
instance_p
->
mcc
[
s1ap_mme_data_p
->
broadcast_plmn_index
[
i
]],
instance_p
->
mnc
[
s1ap_mme_data_p
->
broadcast_plmn_index
[
i
]],
instance_p
->
mnc_digit_length
[
s1ap_mme_data_p
->
broadcast_plmn_index
[
i
]],
plmn
);
ASN_SEQUENCE_ADD
(
&
ta
->
broadcastPLMNs
.
list
,
plmn
);
}
}
ASN_SEQUENCE_ADD
(
&
ie
->
value
.
choice
.
SupportedTAs
.
list
,
ta
);
}
...
...
openair3/S1AP/s1ap_eNB_defs.h
View file @
fb12c6eb
...
...
@@ -154,6 +154,11 @@ typedef struct s1ap_eNB_mme_data_s {
/* SCTP association id */
int32_t
assoc_id
;
/* This is served PLMN IDs communicated to the MME via an index over the
* MCC/MNC array in s1ap_eNB_instance */
uint8_t
broadcast_plmn_num
;
uint8_t
broadcast_plmn_index
[
PLMN_LIST_MAX_SIZE
];
/* Only meaningfull in virtual mode */
struct
s1ap_eNB_instance_s
*
s1ap_eNB_instance
;
}
s1ap_eNB_mme_data_t
;
...
...
@@ -198,9 +203,10 @@ typedef struct s1ap_eNB_instance_s {
/* Mobile Country Code
* Mobile Network Code
*/
uint16_t
mcc
;
uint16_t
mnc
;
uint8_t
mnc_digit_length
;
uint16_t
mcc
[
PLMN_LIST_MAX_SIZE
];
uint16_t
mnc
[
PLMN_LIST_MAX_SIZE
];
uint8_t
mnc_digit_length
[
PLMN_LIST_MAX_SIZE
];
uint8_t
num_plmn
;
/* Default Paging DRX of the eNB as defined in TS 36.304 */
paging_drx_t
default_drx
;
...
...
openair3/S1AP/s1ap_eNB_nas_procedures.c
View file @
fb12c6eb
...
...
@@ -81,6 +81,16 @@ int s1ap_eNB_handle_nas_first_req(
instance_p
,
s1ap_nas_first_req_p
->
establishment_cause
,
s1ap_nas_first_req_p
->
ue_identity
.
gummei
);
if
(
mme_desc_p
)
{
S1AP_INFO
(
"[eNB %d] Chose MME '%s' (assoc_id %d) through GUMMEI MCC %d MNC %d MMEGI %d MMEC %d
\n
"
,
instance
,
mme_desc_p
->
mme_name
,
mme_desc_p
->
assoc_id
,
s1ap_nas_first_req_p
->
ue_identity
.
gummei
.
mcc
,
s1ap_nas_first_req_p
->
ue_identity
.
gummei
.
mnc
,
s1ap_nas_first_req_p
->
ue_identity
.
gummei
.
mme_group_id
,
s1ap_nas_first_req_p
->
ue_identity
.
gummei
.
mme_code
);
}
}
if
(
mme_desc_p
==
NULL
)
{
...
...
@@ -89,18 +99,53 @@ int s1ap_eNB_handle_nas_first_req(
mme_desc_p
=
s1ap_eNB_nnsf_select_mme_by_mme_code
(
instance_p
,
s1ap_nas_first_req_p
->
establishment_cause
,
s1ap_nas_first_req_p
->
selected_plmn_identity
,
s1ap_nas_first_req_p
->
ue_identity
.
s_tmsi
.
mme_code
);
if
(
mme_desc_p
)
{
S1AP_INFO
(
"[eNB %d] Chose MME '%s' (assoc_id %d) through S-TMSI MMEC %d and selected PLMN Identity index %d MCC %d MNC %d
\n
"
,
instance
,
mme_desc_p
->
mme_name
,
mme_desc_p
->
assoc_id
,
s1ap_nas_first_req_p
->
ue_identity
.
s_tmsi
.
mme_code
,
s1ap_nas_first_req_p
->
selected_plmn_identity
,
instance_p
->
mcc
[
s1ap_nas_first_req_p
->
selected_plmn_identity
],
instance_p
->
mnc
[
s1ap_nas_first_req_p
->
selected_plmn_identity
]);
}
}
}
if
(
mme_desc_p
==
NULL
)
{
/* Select MME based on the selected PLMN identity, received through RRC
* Connection Setup Complete */
mme_desc_p
=
s1ap_eNB_nnsf_select_mme_by_plmn_id
(
instance_p
,
s1ap_nas_first_req_p
->
establishment_cause
,
s1ap_nas_first_req_p
->
selected_plmn_identity
);
if
(
mme_desc_p
)
{
S1AP_INFO
(
"[eNB %d] Chose MME '%s' (assoc_id %d) through selected PLMN Identity index %d MCC %d MNC %d
\n
"
,
instance
,
mme_desc_p
->
mme_name
,
mme_desc_p
->
assoc_id
,
s1ap_nas_first_req_p
->
selected_plmn_identity
,
instance_p
->
mcc
[
s1ap_nas_first_req_p
->
selected_plmn_identity
],
instance_p
->
mnc
[
s1ap_nas_first_req_p
->
selected_plmn_identity
]);
}
}
if
(
mme_desc_p
==
NULL
)
{
/*
* If no MME corresponds to the GUMMEI
or the s-TMSI, selects the MME with the
* highest capacity.
* If no MME corresponds to the GUMMEI
, the s-TMSI, or the selected PLMN
*
identity, selects the MME with the
highest capacity.
*/
mme_desc_p
=
s1ap_eNB_nnsf_select_mme
(
instance_p
,
s1ap_nas_first_req_p
->
establishment_cause
);
if
(
mme_desc_p
)
{
S1AP_INFO
(
"[eNB %d] Chose MME '%s' (assoc_id %d) through highest relative capacity
\n
"
,
instance
,
mme_desc_p
->
mme_name
,
mme_desc_p
->
assoc_id
);
}
}
if
(
mme_desc_p
==
NULL
)
{
...
...
@@ -124,6 +169,7 @@ int s1ap_eNB_handle_nas_first_req(
ue_desc_p
->
mme_ref
=
mme_desc_p
;
ue_desc_p
->
ue_initial_id
=
s1ap_nas_first_req_p
->
ue_initial_id
;
ue_desc_p
->
eNB_instance
=
instance_p
;
ue_desc_p
->
selected_plmn_identity
=
s1ap_nas_first_req_p
->
selected_plmn_identity
;
do
{
struct
s1ap_eNB_ue_context_s
*
collision_p
;
...
...
@@ -172,9 +218,9 @@ int s1ap_eNB_handle_nas_first_req(
ie
->
value
.
present
=
S1AP_InitialUEMessage_IEs__value_PR_TAI
;
/* Assuming TAI is the TAI from the cell */
INT16_TO_OCTET_STRING
(
instance_p
->
tac
,
&
ie
->
value
.
choice
.
TAI
.
tAC
);
MCC_MNC_TO_PLMNID
(
instance_p
->
mcc
,
instance_p
->
mnc
,
instance_p
->
mnc_digit_length
,
MCC_MNC_TO_PLMNID
(
instance_p
->
mcc
[
ue_desc_p
->
selected_plmn_identity
]
,
instance_p
->
mnc
[
ue_desc_p
->
selected_plmn_identity
]
,
instance_p
->
mnc_digit_length
[
ue_desc_p
->
selected_plmn_identity
]
,
&
ie
->
value
.
choice
.
TAI
.
pLMNidentity
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
@@ -191,9 +237,9 @@ int s1ap_eNB_handle_nas_first_req(
MACRO_ENB_ID_TO_CELL_IDENTITY
(
instance_p
->
eNB_id
,
0
,
// Cell ID
&
ie
->
value
.
choice
.
EUTRAN_CGI
.
cell_ID
);
MCC_MNC_TO_TBCD
(
instance_p
->
mcc
,
instance_p
->
mnc
,
instance_p
->
mnc_digit_length
,
MCC_MNC_TO_TBCD
(
instance_p
->
mcc
[
ue_desc_p
->
selected_plmn_identity
]
,
instance_p
->
mnc
[
ue_desc_p
->
selected_plmn_identity
]
,
instance_p
->
mnc_digit_length
[
ue_desc_p
->
selected_plmn_identity
]
,
&
ie
->
value
.
choice
.
EUTRAN_CGI
.
pLMNidentity
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
@@ -608,9 +654,9 @@ int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_
ie
->
criticality
=
S1AP_Criticality_ignore
;
ie
->
value
.
present
=
S1AP_UplinkNASTransport_IEs__value_PR_EUTRAN_CGI
;
MCC_MNC_TO_PLMNID
(
s1ap_eNB_instance_p
->
mcc
,
s1ap_eNB_instance_p
->
mnc
,
s1ap_eNB_instance_p
->
mnc_digit_length
,
s1ap_eNB_instance_p
->
mcc
[
ue_context_p
->
selected_plmn_identity
]
,
s1ap_eNB_instance_p
->
mnc
[
ue_context_p
->
selected_plmn_identity
]
,
s1ap_eNB_instance_p
->
mnc_digit_length
[
ue_context_p
->
selected_plmn_identity
]
,
&
ie
->
value
.
choice
.
EUTRAN_CGI
.
pLMNidentity
);
//#warning "TODO get cell id from RRC"
MACRO_ENB_ID_TO_CELL_IDENTITY
(
s1ap_eNB_instance_p
->
eNB_id
,
...
...
@@ -624,9 +670,9 @@ int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_
ie
->
criticality
=
S1AP_Criticality_ignore
;
ie
->
value
.
present
=
S1AP_UplinkNASTransport_IEs__value_PR_TAI
;
MCC_MNC_TO_PLMNID
(
s1ap_eNB_instance_p
->
mcc
,
s1ap_eNB_instance_p
->
mnc
,
s1ap_eNB_instance_p
->
mnc_digit_length
,
s1ap_eNB_instance_p
->
mcc
[
ue_context_p
->
selected_plmn_identity
]
,
s1ap_eNB_instance_p
->
mnc
[
ue_context_p
->
selected_plmn_identity
]
,
s1ap_eNB_instance_p
->
mnc_digit_length
[
ue_context_p
->
selected_plmn_identity
]
,
&
ie
->
value
.
choice
.
TAI
.
pLMNidentity
);
TAC_TO_ASN1
(
s1ap_eNB_instance_p
->
tac
,
&
ie
->
value
.
choice
.
TAI
.
tAC
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
openair3/S1AP/s1ap_eNB_nnsf.c
View file @
fb12c6eb
...
...
@@ -90,9 +90,9 @@ s1ap_eNB_nnsf_select_mme(s1ap_eNB_instance_t *instance_p,
}
struct
s1ap_eNB_mme_data_s
*
s1ap_eNB_nnsf_select_mme_by_
mme_code
(
s1ap_eNB_instance_t
*
instance_p
,
rrc_establishment_cause_t
cause
,
uint8_t
mme_code
)
s1ap_eNB_nnsf_select_mme_by_
plmn_id
(
s1ap_eNB_instance_t
*
instance_p
,
rrc_establishment_cause_t
cause
,
int
selected_plmn_identity
)
{
struct
s1ap_eNB_mme_data_s
*
mme_data_p
=
NULL
;
struct
s1ap_eNB_mme_data_s
*
mme_highest_capacity_p
=
NULL
;
...
...
@@ -100,7 +100,7 @@ s1ap_eNB_nnsf_select_mme_by_mme_code(s1ap_eNB_instance_t *instance_p,
RB_FOREACH
(
mme_data_p
,
s1ap_mme_map
,
&
instance_p
->
s1ap_mme_head
)
{
struct
served_gummei_s
*
gummei_p
=
NULL
;
struct
plmn_identity_s
*
served_plmn_p
=
NULL
;
if
(
mme_data_p
->
state
!=
S1AP_ENB_STATE_CONNECTED
)
{
/* The association between MME and eNB is not ready for the moment,
* go to the next known MME.
...
...
@@ -135,30 +135,106 @@ s1ap_eNB_nnsf_select_mme_by_mme_code(s1ap_eNB_instance_t *instance_p,
}
}
/* Looking for served GUMMEI PLMN Identity selected matching the one provided by the UE */
STAILQ_FOREACH
(
gummei_p
,
&
mme_data_p
->
served_gummei
,
next
)
{
STAILQ_FOREACH
(
served_plmn_p
,
&
gummei_p
->
served_plmns
,
next
)
{
if
((
served_plmn_p
->
mcc
==
instance_p
->
mcc
[
selected_plmn_identity
])
&&
(
served_plmn_p
->
mnc
==
instance_p
->
mnc
[
selected_plmn_identity
]))
{
break
;
}
}
/* if found, we can stop the outer loop, too */
if
(
served_plmn_p
)
break
;
}
/* if we didn't find such a served PLMN, go on with the next MME */
if
(
!
served_plmn_p
)
continue
;
if
(
current_capacity
<
mme_data_p
->
relative_mme_capacity
)
{
/* We find a better MME, keep a reference to it */
current_capacity
=
mme_data_p
->
relative_mme_capacity
;
mme_highest_capacity_p
=
mme_data_p
;
}
}
return
mme_highest_capacity_p
;
}
struct
s1ap_eNB_mme_data_s
*
s1ap_eNB_nnsf_select_mme_by_mme_code
(
s1ap_eNB_instance_t
*
instance_p
,
rrc_establishment_cause_t
cause
,
int
selected_plmn_identity
,
uint8_t
mme_code
)
{
struct
s1ap_eNB_mme_data_s
*
mme_data_p
=
NULL
;
RB_FOREACH
(
mme_data_p
,
s1ap_mme_map
,
&
instance_p
->
s1ap_mme_head
)
{
struct
served_gummei_s
*
gummei_p
=
NULL
;
if
(
mme_data_p
->
state
!=
S1AP_ENB_STATE_CONNECTED
)
{
/* The association between MME and eNB is not ready for the moment,
* go to the next known MME.
*/
if
(
mme_data_p
->
state
==
S1AP_ENB_OVERLOAD
)
{
/* MME is overloaded. We have to check the RRC establishment
* cause and take decision to the select this MME depending on
* the overload state.
*/
if
((
cause
==
RRC_CAUSE_MO_DATA
)
&&
(
mme_data_p
->
overload_state
==
S1AP_OVERLOAD_REJECT_MO_DATA
))
{
continue
;
}
if
((
mme_data_p
->
overload_state
==
S1AP_OVERLOAD_REJECT_ALL_SIGNALLING
)
&&
((
cause
==
RRC_CAUSE_MO_SIGNALLING
)
||
(
cause
==
RRC_CAUSE_MO_DATA
)))
{
continue
;
}
if
((
mme_data_p
->
overload_state
==
S1AP_OVERLOAD_ONLY_EMERGENCY_AND_MT
)
&&
((
cause
==
RRC_CAUSE_MO_SIGNALLING
)
||
(
cause
==
RRC_CAUSE_MO_DATA
)
||
(
cause
==
RRC_CAUSE_HIGH_PRIO_ACCESS
)))
{
continue
;
}
/* At this point, the RRC establishment can be handled by the MME
* even if it is in overload state.
*/
}
else
{
/* The MME is not overloaded, association is simply not ready. */
continue
;
}
}
/* Looking for MME code matching the one provided by NAS */
STAILQ_FOREACH
(
gummei_p
,
&
mme_data_p
->
served_gummei
,
next
)
{
struct
mme_code_s
*
mme_code_p
=
NULL
;
struct
plmn_identity_s
*
served_plmn_p
=
NULL
;
STAILQ_FOREACH
(
served_plmn_p
,
&
gummei_p
->
served_plmns
,
next
)
{
if
((
served_plmn_p
->
mcc
==
instance_p
->
mcc
[
selected_plmn_identity
])
&&
(
served_plmn_p
->
mnc
==
instance_p
->
mnc
[
selected_plmn_identity
]))
{
break
;
}
}
STAILQ_FOREACH
(
mme_code_p
,
&
gummei_p
->
mme_codes
,
next
)
{
if
(
mme_code_p
->
mme_code
==
mme_code
)
{
return
mme_data_p
;
break
;
}
}
/* The MME matches the parameters provided by the NAS layer ->
* the MME is knwown and the association is ready.
* Return the reference to the MME to use it for this UE.
*/
if
(
mme_code_p
&&
served_plmn_p
)
{
return
mme_data_p
;
}
}
}
/* At this point no MME matches the provided GUMMEI. Select the one with the
* highest relative capacity.
* In case the list of known MME is empty, simply return NULL, that way the RRC
* layer should know about it and reject RRC connectivity.
*/
return
mme_highest_capacity_p
;
/* At this point no MME matches the selected PLMN and MME code. In this case,
* return NULL. That way the RRC layer should know about it and reject RRC
* connectivity. */
return
NULL
;
}
struct
s1ap_eNB_mme_data_s
*
...
...
@@ -167,8 +243,6 @@ s1ap_eNB_nnsf_select_mme_by_gummei(s1ap_eNB_instance_t *instance_p,
s1ap_gummei_t
gummei
)
{
struct
s1ap_eNB_mme_data_s
*
mme_data_p
=
NULL
;
struct
s1ap_eNB_mme_data_s
*
mme_highest_capacity_p
=
NULL
;
uint8_t
current_capacity
=
0
;
RB_FOREACH
(
mme_data_p
,
s1ap_mme_map
,
&
instance_p
->
s1ap_mme_head
)
{
struct
served_gummei_s
*
gummei_p
=
NULL
;
...
...
@@ -207,12 +281,6 @@ s1ap_eNB_nnsf_select_mme_by_gummei(s1ap_eNB_instance_t *instance_p,
}
}
if
(
current_capacity
<
mme_data_p
->
relative_mme_capacity
)
{
/* We find a better MME, keep a reference to it */
current_capacity
=
mme_data_p
->
relative_mme_capacity
;
mme_highest_capacity_p
=
mme_data_p
;
}
/* Looking for MME gummei matching the one provided by NAS */
STAILQ_FOREACH
(
gummei_p
,
&
mme_data_p
->
served_gummei
,
next
)
{
struct
served_group_id_s
*
group_id_p
=
NULL
;
...
...
@@ -248,10 +316,8 @@ s1ap_eNB_nnsf_select_mme_by_gummei(s1ap_eNB_instance_t *instance_p,
}
}
/* At this point no MME matches the provided GUMMEI. Select the one with the
* highest relative capacity.
* In case the list of known MME is empty, simply return NULL, that way the RRC
* layer should know about it and reject RRC connectivity.
*/
return
mme_highest_capacity_p
;
/* At this point no MME matches the provided GUMMEI. In this case, return
* NULL. That way the RRC layer should know about it and reject RRC
* connectivity. */
return
NULL
;
}
openair3/S1AP/s1ap_eNB_nnsf.h
View file @
fb12c6eb
...
...
@@ -26,9 +26,15 @@ struct s1ap_eNB_mme_data_s *
s1ap_eNB_nnsf_select_mme
(
s1ap_eNB_instance_t
*
instance_p
,
rrc_establishment_cause_t
cause
);
struct
s1ap_eNB_mme_data_s
*
s1ap_eNB_nnsf_select_mme_by_plmn_id
(
s1ap_eNB_instance_t
*
instance_p
,
rrc_establishment_cause_t
cause
,
int
selected_plmn_identity
);
struct
s1ap_eNB_mme_data_s
*
s1ap_eNB_nnsf_select_mme_by_mme_code
(
s1ap_eNB_instance_t
*
instance_p
,
rrc_establishment_cause_t
cause
,
int
selected_plmn_identity
,
uint8_t
mme_code
);
struct
s1ap_eNB_mme_data_s
*
...
...
openair3/S1AP/s1ap_eNB_ue_context.h
View file @
fb12c6eb
...
...
@@ -67,6 +67,11 @@ typedef struct s1ap_eNB_ue_context_s {
/* Reference to MME data this UE is attached to */
struct
s1ap_eNB_mme_data_s
*
mme_ref
;
/* Signaled by the UE in RRC Connection Setup Complete and used in NAS Uplink
* to route NAS messages correctly. 0-based, not 1-based as in TS 36.331
* 6.2.2 RRC Connection Setup Complete! */
int
selected_plmn_identity
;
/* Reference to eNB data this UE is attached to */
s1ap_eNB_instance_t
*
eNB_instance
;
}
s1ap_eNB_ue_context_t
;
...
...
openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,8 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"95"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
95
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb1.conf
View file @
fb12c6eb
...
...
@@ -13,10 +13,8 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"95"
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
95
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.calisson.conf
View file @
fb12c6eb
...
...
@@ -15,12 +15,9 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"15"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
15
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Channel
parameters
:
//
Default
Paging
DRX
of
the
eNB
as
defined
in
TS
36
.
304
default_paging_drx
=
"PAGING_DRX_256"
;
...
...
targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.memphis.conf
View file @
fb12c6eb
...
...
@@ -15,12 +15,9 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"15"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
15
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Channel
parameters
:
//
Default
Paging
DRX
of
the
eNB
as
defined
in
TS
36
.
304
default_paging_drx
=
"PAGING_DRX_256"
;
...
...
targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.nord.conf
View file @
fb12c6eb
...
...
@@ -14,12 +14,9 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"15"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
tracking_area_code
=
15
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Channel
parameters
:
//
Default
Paging
DRX
of
the
eNB
as
defined
in
TS
36
.
304
default_paging_drx
=
"PAGING_DRX_256"
;
...
...
targets/PROJECTS/E-MBMS/enb.conf
View file @
fb12c6eb
...
...
@@ -11,12 +11,9 @@ eNBs =
eNB_name
=
"eNB_Eurecom_0"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
1
;
mobile_country_code
=
208
;
mobile_network_code
=
10
;
tracking_area_code
=
1
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
10
;
mnc_length
=
2
; } );
//////////
Channel
parameters
:
//
Default
Paging
DRX
of
the
eNB
as
defined
in
TS
36
.
304
default_paging_drx
=
"PAGING_DRX_256"
;
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf
View file @
fb12c6eb
...
...
@@ -13,10 +13,9 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
tracking_area_code
=
1
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf
View file @
fb12c6eb
...
...
@@ -13,10 +13,9 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
tracking_area_code
=
1
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
//////////
Physical
parameters
:
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,9 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
tracking_area_code
=
1
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"93"
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
93
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,9 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
tracking_area_code
=
1
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"92"
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,9 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
tracking_area_code
=
1
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"93"
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
93
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,9 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
tracking_area_code
=
1
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"93"
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
93
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,9 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
tracking_area_code
=
1
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"93"
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
93
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf
View file @
fb12c6eb
...
...
@@ -16,11 +16,9 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
tracking_area_code
=
1
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"93"
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
93
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf
View file @
fb12c6eb
...
...
@@ -13,12 +13,9 @@ eNBs =
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
tracking_area_code
=
1
;
mobile_country_code
=
"208"
;
#mobile_network_code = "93";
mobile_network_code
=
"92"
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
92
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf
View file @
fb12c6eb
...
...
@@ -13,11 +13,9 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
tracking_area_code
=
1
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"93"
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
93
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf
View file @
fb12c6eb
...
...
@@ -16,11 +16,9 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
tracking_area_code
=
1
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"93"
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
93
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf
View file @
fb12c6eb
...
...
@@ -16,11 +16,9 @@ eNBs =
eNB_name
=
"eNB-Eurecom-LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
tracking_area_code
=
1
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"93"
;
plmn_list
= ( {
mcc
=
208
;
mnc
=
93
;
mnc_length
=
2
; } );
tr_s_preference
=
"local_mac"
...
...
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