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
wangjie
OpenXG-RAN
Commits
3c6d0aed
Commit
3c6d0aed
authored
Jun 23, 2018
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Read PLMN list configuration into RRC/S1AP
parent
72ef8be8
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
127 additions
and
28 deletions
+127
-28
openair2/ENB_APP/enb_config.c
openair2/ENB_APP/enb_config.c
+73
-21
openair2/ENB_APP/enb_paramdef.h
openair2/ENB_APP/enb_paramdef.h
+54
-7
No files found.
openair2/ENB_APP/enb_config.c
View file @
3c6d0aed
...
...
@@ -624,7 +624,14 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
for
(
k
=
0
;
k
<
num_enbs
;
k
++
)
{
if
(
strcmp
(
ENBSParams
[
ENB_ACTIVE_ENBS_IDX
].
strlistptr
[
k
],
*
(
ENBParamList
.
paramarray
[
i
][
ENB_ENB_NAME_IDX
].
strptr
)
)
==
0
)
{
char
enbpath
[
MAX_OPTNAME_SIZE
+
8
];
sprintf
(
enbpath
,
"%s.[%i]"
,
ENB_CONFIG_STRING_ENB_LIST
,
k
);
paramdef_t
PLMNParams
[]
=
PLMNPARAMS_DESC
;
paramlist_def_t
PLMNParamList
=
{
ENB_CONFIG_STRING_PLMN_LIST
,
NULL
,
0
};
/* map parameter checking array instances to parameter definition array instances */
checkedparam_t
config_check_PLMNParams
[]
=
PLMNPARAMS_CHECK
;
for
(
int
I
=
0
;
I
<
sizeof
(
PLMNParams
)
/
sizeof
(
paramdef_t
);
++
I
)
PLMNParams
[
I
].
chkPptr
=
&
(
config_check_PLMNParams
[
I
]);
RRC_CONFIGURATION_REQ
(
msg_p
).
cell_identity
=
enb_id
;
...
...
@@ -641,18 +648,36 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
enb_properties_loc.properties[enb_properties_loc_index]->eNB_name = strdup(enb_name);
*/
RRC_CONFIGURATION_REQ
(
msg_p
).
tac
=
(
uint16_t
)
atoi
(
*
(
ENBParamList
.
paramarray
[
i
][
ENB_TRACKING_AREA_CODE_IDX
].
strptr
)
);
RRC_CONFIGURATION_REQ
(
msg_p
).
mcc
=
(
uint16_t
)
atoi
(
*
(
ENBParamList
.
paramarray
[
i
][
ENB_MOBILE_COUNTRY_CODE_IDX
].
strptr
)
);
RRC_CONFIGURATION_REQ
(
msg_p
).
mnc
=
(
uint16_t
)
atoi
(
*
(
ENBParamList
.
paramarray
[
i
][
ENB_MOBILE_NETWORK_CODE_IDX
].
strptr
)
);
RRC_CONFIGURATION_REQ
(
msg_p
).
mnc_digit_length
=
strlen
(
*
(
ENBParamList
.
paramarray
[
i
][
ENB_MOBILE_NETWORK_CODE_IDX
].
strptr
));
AssertFatal
((
RRC_CONFIGURATION_REQ
(
msg_p
).
mnc_digit_length
==
2
)
||
(
RRC_CONFIGURATION_REQ
(
msg_p
).
mnc_digit_length
==
3
),
"BAD MNC DIGIT LENGTH %d"
,
RRC_CONFIGURATION_REQ
(
msg_p
).
mnc_digit_length
);
RRC_CONFIGURATION_REQ
(
msg_p
).
tac
=
*
ENBParamList
.
paramarray
[
i
][
ENB_TRACKING_AREA_CODE_IDX
].
uptr
;
AssertFatal
(
!
ENBParamList
.
paramarray
[
i
][
ENB_MOBILE_COUNTRY_CODE_IDX_OLD
].
strptr
&&
!
ENBParamList
.
paramarray
[
i
][
ENB_MOBILE_NETWORK_CODE_IDX_OLD
].
strptr
,
"It seems that you use an old configuration file. Please change the existing
\n
"
" tracking_area_code =
\"
1
\"
;
\n
"
" mobile_country_code =
\"
208
\"
;
\n
"
" mobile_network_code =
\"
93
\"
;
\n
"
"to
\n
"
" tracking_area_code = 1; // no string!!
\n
"
" plmn_list = ( { mcc = 208; mnc = 93; mnc_length = 2; } )
\n
"
);
config_getlist
(
&
PLMNParamList
,
PLMNParams
,
sizeof
(
PLMNParams
)
/
sizeof
(
paramdef_t
),
enbpath
);
if
(
PLMNParamList
.
numelt
<
1
||
PLMNParamList
.
numelt
>
6
)
AssertFatal
(
0
,
"The number of PLMN IDs must be in [1,6], but is %d
\n
"
,
PLMNParamList
.
numelt
);
RRC_CONFIGURATION_REQ
(
msg_p
).
num_plmn
=
PLMNParamList
.
numelt
;
for
(
int
l
=
0
;
l
<
PLMNParamList
.
numelt
;
++
l
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
mcc
[
l
]
=
*
PLMNParamList
.
paramarray
[
l
][
ENB_MOBILE_COUNTRY_CODE_IDX
].
uptr
;
RRC_CONFIGURATION_REQ
(
msg_p
).
mnc
[
l
]
=
*
PLMNParamList
.
paramarray
[
l
][
ENB_MOBILE_NETWORK_CODE_IDX
].
uptr
;
RRC_CONFIGURATION_REQ
(
msg_p
).
mnc_digit_length
[
l
]
=
*
PLMNParamList
.
paramarray
[
l
][
ENB_MNC_DIGIT_LENGTH
].
u8ptr
;
AssertFatal
(
RRC_CONFIGURATION_REQ
(
msg_p
).
mnc_digit_length
[
l
]
==
3
||
RRC_CONFIGURATION_REQ
(
msg_p
).
mnc
[
l
]
<
100
,
"MNC %d cannot be encoded in two digits as requested (change mnc_digit_length to 3)
\n
"
,
RRC_CONFIGURATION_REQ
(
msg_p
).
mnc
[
l
]);
}
// Parse optional physical parameters
sprintf
(
enbpath
,
"%s.[%i]"
,
ENB_CONFIG_STRING_ENB_LIST
,
k
),
config_getlist
(
&
CCsParamList
,
NULL
,
0
,
enbpath
);
LOG_I
(
RRC
,
"num component carriers %d
\n
"
,
CCsParamList
.
numelt
);
...
...
@@ -2246,12 +2271,21 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
// search if in active list
for
(
j
=
0
;
j
<
ENBSParams
[
ENB_ACTIVE_ENBS_IDX
].
numelt
;
j
++
)
{
if
(
strcmp
(
ENBSParams
[
ENB_ACTIVE_ENBS_IDX
].
strlistptr
[
j
],
*
(
ENBParamList
.
paramarray
[
k
][
ENB_ENB_NAME_IDX
].
strptr
))
==
0
)
{
paramdef_t
PLMNParams
[]
=
PLMNPARAMS_DESC
;
paramlist_def_t
PLMNParamList
=
{
ENB_CONFIG_STRING_PLMN_LIST
,
NULL
,
0
};
/* map parameter checking array instances to parameter definition array instances */
checkedparam_t
config_check_PLMNParams
[]
=
PLMNPARAMS_CHECK
;
for
(
int
I
=
0
;
I
<
sizeof
(
PLMNParams
)
/
sizeof
(
paramdef_t
);
++
I
)
PLMNParams
[
I
].
chkPptr
=
&
(
config_check_PLMNParams
[
I
]);
paramdef_t
S1Params
[]
=
S1PARAMS_DESC
;
paramlist_def_t
S1ParamList
=
{
ENB_CONFIG_STRING_MME_IP_ADDRESS
,
NULL
,
0
};
paramdef_t
SCTPParams
[]
=
SCTPPARAMS_DESC
;
paramdef_t
NETParams
[]
=
NETPARAMS_DESC
;
char
aprefix
[
MAX_OPTNAME_SIZE
*
2
+
8
];
sprintf
(
aprefix
,
"%s.[%i]"
,
ENB_CONFIG_STRING_ENB_LIST
,
k
);
S1AP_REGISTER_ENB_REQ
(
msg_p
).
eNB_id
=
enb_id
;
...
...
@@ -2266,17 +2300,35 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
}
S1AP_REGISTER_ENB_REQ
(
msg_p
).
eNB_name
=
strdup
(
*
(
ENBParamList
.
paramarray
[
k
][
ENB_ENB_NAME_IDX
].
strptr
));
S1AP_REGISTER_ENB_REQ
(
msg_p
).
tac
=
(
uint16_t
)
atoi
(
*
(
ENBParamList
.
paramarray
[
k
][
ENB_TRACKING_AREA_CODE_IDX
].
strptr
));
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mcc
=
(
uint16_t
)
atoi
(
*
(
ENBParamList
.
paramarray
[
k
][
ENB_MOBILE_COUNTRY_CODE_IDX
].
strptr
));
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mnc
=
(
uint16_t
)
atoi
(
*
(
ENBParamList
.
paramarray
[
k
][
ENB_MOBILE_NETWORK_CODE_IDX
].
strptr
));
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mnc_digit_length
=
strlen
(
*
(
ENBParamList
.
paramarray
[
k
][
ENB_MOBILE_NETWORK_CODE_IDX
].
strptr
));
S1AP_REGISTER_ENB_REQ
(
msg_p
).
default_drx
=
0
;
AssertFatal
((
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mnc_digit_length
==
2
)
||
(
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mnc_digit_length
==
3
),
"BAD MNC DIGIT LENGTH %d"
,
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mnc_digit_length
);
S1AP_REGISTER_ENB_REQ
(
msg_p
).
tac
=
*
ENBParamList
.
paramarray
[
k
][
ENB_TRACKING_AREA_CODE_IDX
].
uptr
;
AssertFatal
(
!
ENBParamList
.
paramarray
[
k
][
ENB_MOBILE_COUNTRY_CODE_IDX_OLD
].
strptr
&&
!
ENBParamList
.
paramarray
[
k
][
ENB_MOBILE_NETWORK_CODE_IDX_OLD
].
strptr
,
"It seems that you use an old configuration file. Please change the existing
\n
"
" tracking_area_code =
\"
1
\"
;
\n
"
" mobile_country_code =
\"
208
\"
;
\n
"
" mobile_network_code =
\"
93
\"
;
\n
"
"to
\n
"
" tracking_area_code = 1; // no string!!
\n
"
" plmn_list = ( { mcc = 208; mnc = 93; mnc_length = 2; } )
\n
"
);
config_getlist
(
&
PLMNParamList
,
PLMNParams
,
sizeof
(
PLMNParams
)
/
sizeof
(
paramdef_t
),
aprefix
);
if
(
PLMNParamList
.
numelt
<
1
||
PLMNParamList
.
numelt
>
6
)
AssertFatal
(
0
,
"The number of PLMN IDs must be in [1,6], but is %d
\n
"
,
PLMNParamList
.
numelt
);
S1AP_REGISTER_ENB_REQ
(
msg_p
).
num_plmn
=
PLMNParamList
.
numelt
;
for
(
int
l
=
0
;
l
<
PLMNParamList
.
numelt
;
++
l
)
{
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mcc
[
l
]
=
*
PLMNParamList
.
paramarray
[
l
][
ENB_MOBILE_COUNTRY_CODE_IDX
].
uptr
;
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mnc
[
l
]
=
*
PLMNParamList
.
paramarray
[
l
][
ENB_MOBILE_NETWORK_CODE_IDX
].
uptr
;
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mnc_digit_length
[
l
]
=
*
PLMNParamList
.
paramarray
[
l
][
ENB_MNC_DIGIT_LENGTH
].
u8ptr
;
AssertFatal
(
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mnc_digit_length
[
l
]
==
3
||
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mnc
[
l
]
<
100
,
"MNC %d cannot be encoded in two digits as requested (change mnc_digit_length to 3)
\n
"
,
S1AP_REGISTER_ENB_REQ
(
msg_p
).
mnc
[
l
]);
}
S1AP_REGISTER_ENB_REQ
(
msg_p
).
default_drx
=
0
;
sprintf
(
aprefix
,
"%s.[%i]"
,
ENB_CONFIG_STRING_ENB_LIST
,
k
);
config_getlist
(
&
S1ParamList
,
S1Params
,
sizeof
(
S1Params
)
/
sizeof
(
paramdef_t
),
aprefix
);
S1AP_REGISTER_ENB_REQ
(
msg_p
).
nb_mme
=
0
;
...
...
openair2/ENB_APP/enb_paramdef.h
View file @
3c6d0aed
...
...
@@ -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 */
...
...
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