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
Michael Black
OpenXG-RAN
Commits
c7483721
Commit
c7483721
authored
Jan 14, 2016
by
gauthier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
to be tested
parent
d0f0e5e7
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
86 additions
and
71 deletions
+86
-71
openair2/COMMON/platform_types.h
openair2/COMMON/platform_types.h
+6
-0
openair2/RRC/LITE/defs.h
openair2/RRC/LITE/defs.h
+3
-3
openair2/RRC/LITE/rrc_eNB.c
openair2/RRC/LITE/rrc_eNB.c
+71
-62
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
...NERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
+6
-6
No files found.
openair2/COMMON/platform_types.h
View file @
c7483721
...
...
@@ -163,7 +163,13 @@ typedef uint32_t mbms_session_id_t;
typedef
uint16_t
mbms_service_id_t
;
typedef
uint16_t
rnti_t
;
typedef
uint8_t
rrc_enb_index_t
;
typedef
uint8_t
mme_code_t
;
typedef
uint32_t
m_tmsi_t
;
//Random UE identity length = 40 bits
#if ! defined(NOT_A_RANDOM_UE_IDENTITY)
#define NOT_A_RANDOM_UE_IDENTITY (uint64_t)0xFFFFFFFF
#endif
#if ! defined(NOT_A_RNTI)
#define NOT_A_RNTI (rnti_t)0
#endif
...
...
openair2/RRC/LITE/defs.h
View file @
c7483721
...
...
@@ -212,9 +212,9 @@ typedef struct UE_RRC_INFO_s {
}
__attribute__
((
__packed__
))
UE_RRC_INFO
;
typedef
struct
UE_S_TMSI_s
{
uint8
_t
presence
;
uint8_t
mme_code
;
uint32_t
m_tmsi
;
boolean
_t
presence
;
mme_code_t
mme_code
;
m_tmsi_t
m_tmsi
;
}
__attribute__
((
__packed__
))
UE_S_TMSI
;
#if defined(ENABLE_ITTI)
...
...
openair2/RRC/LITE/rrc_eNB.c
View file @
c7483721
...
...
@@ -540,8 +540,8 @@ rrc_eNB_get_next_transaction_identifier(
//-----------------------------------------------------------------------------
// return
1 if there is already an UE with ue_identityP, 0
otherwise
static
int
// return
the ue context if there is already an UE with ue_identityP, NULL
otherwise
static
struct
rrc_eNB_ue_context_s
*
rrc_eNB_ue_context_random_exist
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
const
uint64_t
ue_identityP
...
...
@@ -551,9 +551,28 @@ rrc_eNB_ue_context_random_exist(
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
NULL
;
RB_FOREACH
(
ue_context_p
,
rrc_ue_tree_s
,
&
(
eNB_rrc_inst
[
ctxt_pP
->
module_id
].
rrc_ue_head
))
{
if
(
ue_context_p
->
ue_context
.
random_ue_identity
==
ue_identityP
)
return
1
;
return
ue_context_p
;
}
return
0
;
return
NULL
;
}
//-----------------------------------------------------------------------------
// return the ue context if there is already an UE with the same S-TMSI(MMEC+M-TMSI), NULL otherwise
static
struct
rrc_eNB_ue_context_s
*
rrc_eNB_ue_context_stmsi_exist
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
const
mme_code_t
mme_codeP
,
const
m_tmsi_t
m_tmsiP
)
//-----------------------------------------------------------------------------
{
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
NULL
;
RB_FOREACH
(
ue_context_p
,
rrc_ue_tree_s
,
&
(
eNB_rrc_inst
[
ctxt_pP
->
module_id
].
rrc_ue_head
))
{
if
(
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
presence
==
TRUE
)
if
(
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
m_tmsi
==
m_tmsiP
)
if
(
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
mme_code
==
mme_codeP
)
return
ue_context_p
;
}
return
NULL
;
}
//-----------------------------------------------------------------------------
...
...
@@ -3670,30 +3689,60 @@ rrc_eNB_decode_ccch(
}
else
{
rrcConnectionRequest
=
&
ul_ccch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionRequest
.
criticalExtensions
.
choice
.
rrcConnectionRequest_r8
;
{
if
(
rrcConnectionRequest
->
ue_Identity
.
present
!=
InitialUE_Identity_PR_randomValue
)
{
if
(
InitialUE_Identity_PR_randomValue
==
rrcConnectionRequest
->
ue_Identity
.
present
)
{
AssertFatal
(
rrcConnectionRequest
->
ue_Identity
.
choice
.
randomValue
.
size
==
5
,
"wrong InitialUE-Identity randomValue size, expected 5, provided %d"
,
rrcConnectionRequest
->
ue_Identity
.
choice
.
randomValue
.
size
);
memcpy
(((
uint8_t
*
)
&
random_value
)
+
3
,
rrcConnectionRequest
->
ue_Identity
.
choice
.
randomValue
.
buf
,
rrcConnectionRequest
->
ue_Identity
.
choice
.
randomValue
.
size
);
/* if there is already a registered UE (with another RNTI) with this random_value,
* the current one must be removed from MAC/PHY (zombie UE)
*/
if
((
ue_context_p
=
rrc_eNB_ue_context_random_exist
(
ctxt_pP
,
random_value
)))
{
AssertFatal
(
0
==
1
,
"TODO: remove UE from MAC/PHY (how?)"
);
ue_context_p
=
NULL
;
}
else
{
ue_context_p
=
rrc_eNB_get_next_free_ue_context
(
ctxt_pP
,
random_value
);
}
}
else
if
(
InitialUE_Identity_PR_s_TMSI
==
rrcConnectionRequest
->
ue_Identity
.
present
)
{
/* Save s-TMSI */
S_TMSI_t
s_TMSI
=
rrcConnectionRequest
->
ue_Identity
.
choice
.
s_TMSI
;
mme_code_t
mme_code
=
BIT_STRING_to_uint8
(
&
s_TMSI
.
mmec
);
m_tmsi_t
m_tmsi
=
BIT_STRING_to_uint32
(
&
s_TMSI
.
m_TMSI
);
random_value
=
(((
uint64_t
)
mme_code
)
<<
32
)
|
m_tmsi
;
if
((
ue_context_p
=
rrc_eNB_ue_context_stmsi_exist
(
ctxt_pP
,
mme_code
,
m_tmsi
)))
{
AssertFatal
(
0
==
1
,
"TODO: remove UE from MAC/PHY (how?)"
);
ue_context_p
=
NULL
;
}
else
{
ue_context_p
=
rrc_eNB_get_next_free_ue_context
(
ctxt_pP
,
NOT_A_RANDOM_UE_IDENTITY
);
}
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
presence
=
TRUE
;
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
mme_code
=
mme_code
;
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
m_tmsi
=
m_tmsi
;
MSC_LOG_RX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Srb_info
->
Rx_buffer
.
Payload
,
dec_rval
.
consumed
,
MSC_AS_TIME_FMT
" RRCConnectionRequest UE %x size %u (s-TMSI mmec %u m_TMSI %u random UE id (0x%"
PRIx64
")"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
dec_rval
.
consumed
,
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
mme_code
,
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
m_tmsi
,
ue_context_p
->
ue_context
.
random_ue_identity
);
}
else
{
LOG_E
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RRCConnectionRequest with
S-TMSI not supported yet
, let's reject the UE
\n
"
,
PROTOCOL_RRC_CTXT_UE_FMT
" RRCConnectionRequest with
out random UE identity or S-TMSI not supported
, let's reject the UE
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
));
rrc_eNB_generate_RRCConnectionReject
(
ctxt_pP
,
rrc_eNB_get_ue_context
(
&
eNB_rrc_inst
[
ctxt_pP
->
module_id
],
ctxt_pP
->
rnti
),
CC_id
);
break
;
}
AssertFatal
(
rrcConnectionRequest
->
ue_Identity
.
choice
.
randomValue
.
size
==
5
,
"wrong InitialUE-Identity randomValue size, expected 5, provided %d"
,
rrcConnectionRequest
->
ue_Identity
.
choice
.
randomValue
.
size
);
memcpy
(((
uint8_t
*
)
&
random_value
)
+
3
,
rrcConnectionRequest
->
ue_Identity
.
choice
.
randomValue
.
buf
,
rrcConnectionRequest
->
ue_Identity
.
choice
.
randomValue
.
size
);
/* if there is already a registered UE (with another RNTI) with this random_value,
* the current one must be removed from MAC/PHY (zombie UE)
*/
if
(
rrc_eNB_ue_context_random_exist
(
ctxt_pP
,
random_value
))
{
AssertFatal
(
0
==
1
,
"TODO: remove UE fro MAC/PHY (how?)"
);
ue_context_p
=
NULL
;
}
else
{
ue_context_p
=
rrc_eNB_get_next_free_ue_context
(
ctxt_pP
,
random_value
);
}
}
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" UE context: %X
\n
"
,
...
...
@@ -3704,47 +3753,7 @@ rrc_eNB_decode_ccch(
#if defined(ENABLE_ITTI)
/* Check s-TMSI presence in message */
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
presence
=
(
rrcConnectionRequest
->
ue_Identity
.
present
==
InitialUE_Identity_PR_s_TMSI
);
if
(
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
presence
)
{
/* Save s-TMSI */
S_TMSI_t
s_TMSI
=
rrcConnectionRequest
->
ue_Identity
.
choice
.
s_TMSI
;
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
mme_code
=
BIT_STRING_to_uint8
(
&
s_TMSI
.
mmec
);
ue_context_p
->
ue_context
.
Initialue_identity_s_TMSI
.
m_tmsi
=
BIT_STRING_to_uint32
(
&
s_TMSI
.
m_TMSI
);
MSC_LOG_RX_DISCARDED_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Srb_info
->
Rx_buffer
.
Payload
,
dec_rval
.
consumed
,
MSC_AS_TIME_FMT
" RRCConnectionRequest UE %x size %u (s-TMSI mmec %u m_TMSI %u random UE id (0x%"
PRIx64
")"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
dec_rval
.
consumed
,
s_TMSI
.
mmec
,
s_TMSI
.
m_TMSI
,
ue_context_p
->
ue_context
.
random_ue_identity
);
}
else
{
MSC_LOG_RX_DISCARDED_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
Srb_info
->
Rx_buffer
.
Payload
,
dec_rval
.
consumed
,
MSC_AS_TIME_FMT
" RRCConnectionRequest UE %x size %u random UE id (0x%"
PRIx64
")"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
rnti
,
dec_rval
.
consumed
,
ue_context_p
->
ue_context
.
random_ue_identity
);
}
ue_context_p
->
ue_context
.
establishment_cause
=
rrcConnectionRequest
->
establishmentCause
;
ue_context_p
->
ue_context
.
establishment_cause
=
rrcConnectionRequest
->
establishmentCause
;
LOG_I
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" Accept new connection from UE random UE identity (0x%"
PRIx64
") MME code %u TMSI %u cause %u
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
ue_context_p
->
ue_context
.
random_ue_identity
,
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf
View file @
c7483721
...
...
@@ -16,7 +16,7 @@ eNBs =
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"9
2
"
;
mobile_network_code
=
"9
5
"
;
//////////
Physical
parameters
:
...
...
@@ -130,18 +130,18 @@ eNBs =
};
//////////
MME
parameters
:
mme_ip_address
= ( {
ipv4
=
"192.168.12.
26
"
;
mme_ip_address
= ( {
ipv4
=
"192.168.12.
17
"
;
ipv6
=
"192:168:30::17"
;
active
=
"yes"
;
preference
=
"ipv4"
;});
NETWORK_INTERFACES
:
{
ENB_INTERFACE_NAME_FOR_S1_MME
=
"eth
1
"
;
ENB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.12.
82
/24"
;
ENB_INTERFACE_NAME_FOR_S1_MME
=
"eth
0
"
;
ENB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.12.
213
/24"
;
ENB_INTERFACE_NAME_FOR_S1U
=
"eth
1
"
;
ENB_IPV4_ADDRESS_FOR_S1U
=
"192.168.12.
82
/24"
;
ENB_INTERFACE_NAME_FOR_S1U
=
"eth
0
"
;
ENB_IPV4_ADDRESS_FOR_S1U
=
"192.168.12.
213
/24"
;
ENB_PORT_FOR_S1U
=
2152
;
# Spec 2152
};
...
...
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