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
fad30fff
Commit
fad30fff
authored
Oct 20, 2020
by
zhanghuiqin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix UECapabilityEnquiry & UECapabilityInformation
parent
49487217
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
88 additions
and
43 deletions
+88
-43
openair2/RRC/NR/MESSAGES/asn1_msg.c
openair2/RRC/NR/MESSAGES/asn1_msg.c
+8
-6
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+20
-10
openair2/RRC/NR_UE/rrc_UE.c
openair2/RRC/NR_UE/rrc_UE.c
+52
-27
openair2/RRC/NR_UE/rrc_defs.h
openair2/RRC/NR_UE/rrc_defs.h
+8
-0
No files found.
openair2/RRC/NR/MESSAGES/asn1_msg.c
View file @
fad30fff
...
...
@@ -865,7 +865,7 @@ uint8_t do_NR_UECapabilityEnquiry_nr( const protocol_ctxt_t *const ctxt_pP,
//------------------------------------------------------------------------------
{
NR_DL_DCCH_Message_t
dl_dcch_msg
;
NR_UE_CapabilityRAT_Request_t
ue_capabilityrat_request
;
NR_UE_CapabilityRAT_Request_t
*
ue_capabilityrat_request
;
asn_enc_rval_t
enc_rval
;
memset
(
&
dl_dcch_msg
,
0
,
sizeof
(
NR_DL_DCCH_Message_t
));
...
...
@@ -875,16 +875,18 @@ uint8_t do_NR_UECapabilityEnquiry_nr( const protocol_ctxt_t *const ctxt_pP,
dl_dcch_msg
.
message
.
choice
.
c1
->
choice
.
ueCapabilityEnquiry
=
CALLOC
(
1
,
sizeof
(
struct
NR_UECapabilityEnquiry
));
dl_dcch_msg
.
message
.
choice
.
c1
->
choice
.
ueCapabilityEnquiry
->
rrc_TransactionIdentifier
=
Transaction_id
;
dl_dcch_msg
.
message
.
choice
.
c1
->
choice
.
ueCapabilityEnquiry
->
criticalExtensions
.
present
=
NR_UECapabilityEnquiry__criticalExtensions_PR_ueCapabilityEnquiry
;
ue_capabilityrat_request
.
rat_Type
=
NR_RAT_Type_nr
;
dl_dcch_msg
.
message
.
choice
.
c1
->
choice
.
ueCapabilityEnquiry
->
criticalExtensions
.
choice
.
ueCapabilityEnquiry
=
CALLOC
(
1
,
sizeof
(
struct
NR_UECapabilityEnquiry_IEs
));
ue_capabilityrat_request
=
CALLOC
(
1
,
sizeof
(
NR_UE_CapabilityRAT_Request_t
));
memset
(
ue_capabilityrat_request
,
0
,
sizeof
(
NR_UE_CapabilityRAT_Request_t
));
ue_capabilityrat_request
->
rat_Type
=
NR_RAT_Type_nr
;
ASN_SEQUENCE_ADD
(
&
dl_dcch_msg
.
message
.
choice
.
c1
->
choice
.
ueCapabilityEnquiry
->
criticalExtensions
.
choice
.
ueCapabilityEnquiry
->
ue_CapabilityRAT_RequestList
.
list
,
&
ue_capabilityrat_request
);
ue_capabilityrat_request
);
if
(
LOG_DEBUGFLAG
(
DEBUG_ASN1
)
)
{
//
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
xer_fprint
(
stdout
,
&
asn_DEF_NR_DL_DCCH_Message
,
(
void
*
)
&
dl_dcch_msg
);
}
//
}
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_DL_DCCH_Message
,
NULL
,
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
fad30fff
...
...
@@ -1101,7 +1101,7 @@ rrc_gNB_decode_dcch(
xer_fprint
(
stdout
,
&
asn_DEF_NR_UL_DCCH_Message
,
(
void
*
)
ul_dcch_msg
);
// }
rrc_gNB_generate_
defaultRRCReconfiguration
(
ctxt_pP
,
ue_context_p
);
rrc_gNB_generate_
UECapabilityEnquiry
(
ctxt_pP
,
ue_context_p
);
break
;
case
NR_UL_DCCH_MessageType__c1_PR_ueCapabilityInformation
:
...
...
@@ -1131,9 +1131,9 @@ rrc_gNB_decode_dcch(
PROTOCOL_NR_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
DCCH
,
sdu_sizeP
);
if
(
LOG_DEBUGFLAG
(
DEBUG_ASN1
)
)
{
//
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
xer_fprint
(
stdout
,
&
asn_DEF_NR_UL_DCCH_Message
,
(
void
*
)
ul_dcch_msg
);
}
//
}
LOG_I
(
NR_RRC
,
"got UE capabilities for UE %x
\n
"
,
ctxt_pP
->
rnti
);
int
eutra_index
=
-
1
;
...
...
@@ -1153,9 +1153,9 @@ rrc_gNB_decode_dcch(
ul_dcch_msg
->
message
.
choice
.
c1
->
choice
.
ueCapabilityInformation
->
criticalExtensions
.
choice
.
ueCapabilityInformation
->
ue_CapabilityRAT_ContainerList
->
list
.
array
[
i
]
->
ue_CapabilityRAT_Container
.
buf
,
ul_dcch_msg
->
message
.
choice
.
c1
->
choice
.
ueCapabilityInformation
->
criticalExtensions
.
choice
.
ueCapabilityInformation
->
ue_CapabilityRAT_ContainerList
->
list
.
array
[
i
]
->
ue_CapabilityRAT_Container
.
size
,
0
,
0
);
if
(
LOG_DEBUGFLAG
(
DEBUG_ASN1
)){
//
if(LOG_DEBUGFLAG(DEBUG_ASN1)){
xer_fprint
(
stdout
,
&
asn_DEF_NR_UE_NR_Capability
,
ue_context_p
->
ue_context
.
UE_Capability_nr
);
}
//
}
if
((
dec_rval
.
code
!=
RC_OK
)
&&
(
dec_rval
.
consumed
==
0
)){
LOG_E
(
NR_RRC
,
PROTOCOL_NR_RRC_CTXT_UE_FMT
" Failed to decode nr UE capabilities (%zu bytes)
\n
"
,
...
...
@@ -1166,6 +1166,11 @@ rrc_gNB_decode_dcch(
ue_context_p
->
ue_context
.
UE_Capability_size
=
ul_dcch_msg
->
message
.
choice
.
c1
->
choice
.
ueCapabilityInformation
->
criticalExtensions
.
choice
.
ueCapabilityInformation
->
ue_CapabilityRAT_ContainerList
->
list
.
array
[
i
]
->
ue_CapabilityRAT_Container
.
size
;
if
(
eutra_index
!=
-
1
){
LOG_E
(
NR_RRC
,
"fatal: more than 1 eutra capability
\n
"
);
exit
(
1
);
}
eutra_index
=
i
;
}
if
(
ul_dcch_msg
->
message
.
choice
.
c1
->
choice
.
ueCapabilityInformation
->
criticalExtensions
.
choice
.
ueCapabilityInformation
->
ue_CapabilityRAT_ContainerList
->
list
.
array
[
i
]
->
rat_Type
==
...
...
@@ -1197,11 +1202,7 @@ rrc_gNB_decode_dcch(
if
(
ul_dcch_msg
->
message
.
choice
.
c1
->
choice
.
ueCapabilityInformation
->
criticalExtensions
.
choice
.
ueCapabilityInformation
->
ue_CapabilityRAT_ContainerList
->
list
.
array
[
i
]
->
rat_Type
==
NR_RAT_Type_eutra
){
if
(
eutra_index
==
-
1
){
LOG_E
(
NR_RRC
,
"fatal: more than 1 eutra capability
\n
"
);
exit
(
1
);
}
eutra_index
=
i
;
//TODO
}
}
...
...
@@ -1477,6 +1478,14 @@ rrc_gNB_generate_UECapabilityEnquiry(
ue_context_pP
->
ue_context
.
rnti
,
rrc_gNB_mui
,
size
);
#ifdef ITTI_SIM
MessageDef
*
message_p
;
message_p
=
itti_alloc_new_message
(
TASK_RRC_GNB_SIM
,
GNB_RRC_DCCH_DATA_IND
);
GNB_RRC_DCCH_DATA_IND
(
message_p
).
rbid
=
DCCH
;
GNB_RRC_DCCH_DATA_IND
(
message_p
).
sdu
=
(
uint8_t
*
)
buffer
;
GNB_RRC_DCCH_DATA_IND
(
message_p
).
size
=
size
;
itti_send_msg_to_task
(
TASK_RRC_UE_SIM
,
ctxt_pP
->
instance
,
message_p
);
#else
rrc_data_req
(
ctxt_pP
,
DCCH
,
...
...
@@ -1485,6 +1494,7 @@ rrc_gNB_generate_UECapabilityEnquiry(
size
,
buffer
,
PDCP_TRANSMISSION_MODE_CONTROL
);
#endif
}
//-----------------------------------------------------------------------------
...
...
openair2/RRC/NR_UE/rrc_UE.c
View file @
fad30fff
...
...
@@ -1668,25 +1668,6 @@ memset((void *)&ul_dcch_msg,0,sizeof(NR_UL_DCCH_Message_t));
GNB_RRC_DCCH_DATA_IND
(
message_p
).
sdu
=
buffer
;
GNB_RRC_DCCH_DATA_IND
(
message_p
).
size
=
(
enc_rval
.
encoded
+
7
)
/
8
;
itti_send_msg_to_task
(
TASK_RRC_GNB_SIM
,
ctxt_pP
->
instance
,
message_p
);
asn_dec_rval_t
dec_rval
;
NR_UL_DCCH_Message_t
*
ul_dcch_msg
=
NULL
;
dec_rval
=
uper_decode
(
NULL
,
&
asn_DEF_NR_UL_DCCH_Message
,
(
void
**
)
&
ul_dcch_msg
,
buffer
,
(
enc_rval
.
encoded
+
7
)
/
8
,
0
,
0
);
if
((
dec_rval
.
code
!=
RC_OK
)
&&
(
dec_rval
.
consumed
==
0
))
{
LOG_E
(
NR_RRC
,
" Failed to decode UL-DCCH (%zu bytes)
\n
"
,
dec_rval
.
consumed
);
return
-
1
;
}
else
{
LOG_I
(
NR_RRC
,
"decode securityModeComplete success
\n
"
);
}
#else
rrc_data_req
(
ctxt_pP
,
...
...
@@ -2268,16 +2249,16 @@ nr_rrc_ue_decode_dcch(
itti_send_msg_to_task
(
TASK_NAS_UE
,
ctxt_pP
->
instance
,
msg_p
);
break
;
case
NR_DL_DCCH_MessageType__c1_PR_rrcReestablishment
:
case
NR_DL_DCCH_MessageType__c1_PR_dlInformationTransfer
:
case
NR_DL_DCCH_MessageType__c1_PR_ueCapabilityEnquiry
:
LOG_I
(
RRC
,
"[UE %d] Received Capability Enquiry (gNB %d)
\n
"
,
ctxt_pP
->
module_id
,
gNB_indexP
);
nr_rrc_ue_process_ueCapabilityEnquiry
(
ctxt_pP
,
&
dl_dcch_msg
->
message
.
choice
.
c1
->
choice
.
ueCapabilityEnquiry
,
dl_dcch_msg
->
message
.
choice
.
c1
->
choice
.
ueCapabilityEnquiry
,
gNB_indexP
);
break
;
case
NR_DL_DCCH_MessageType__c1_PR_rrcReestablishment
:
case
NR_DL_DCCH_MessageType__c1_PR_dlInformationTransfer
:
case
NR_DL_DCCH_MessageType__c1_PR_mobilityFromNRCommand
:
case
NR_DL_DCCH_MessageType__c1_PR_dlDedicatedMessageSegment_r16
:
case
NR_DL_DCCH_MessageType__c1_PR_ueInformationRequest_r16
:
...
...
@@ -2435,7 +2416,36 @@ nr_rrc_ue_process_ueCapabilityEnquiry(
ul_dcch_msg
.
message
.
choice
.
c1
->
present
=
NR_UL_DCCH_MessageType__c1_PR_ueCapabilityInformation
;
ul_dcch_msg
.
message
.
choice
.
c1
->
choice
.
ueCapabilityInformation
=
CALLOC
(
1
,
sizeof
(
struct
NR_UECapabilityInformation
));
ul_dcch_msg
.
message
.
choice
.
c1
->
choice
.
ueCapabilityInformation
->
rrc_TransactionIdentifier
=
UECapabilityEnquiry
->
rrc_TransactionIdentifier
;
ue_CapabilityRAT_Container
.
rat_Type
=
NR_RAT_Type_eutra
;
ue_CapabilityRAT_Container
.
rat_Type
=
NR_RAT_Type_nr
;
NR_UE_NR_Capability_t
*
UE_Capability_nr
;
UE_Capability_nr
=
CALLOC
(
1
,
sizeof
(
NR_UE_NR_Capability_t
));
NR_BandNR_t
*
nr_bandnr
;
nr_bandnr
=
CALLOC
(
1
,
sizeof
(
NR_BandNR_t
));
nr_bandnr
->
bandNR
=
1
;
ASN_SEQUENCE_ADD
(
&
UE_Capability_nr
->
rf_Parameters
.
supportedBandListNR
.
list
,
nr_bandnr
);
OAI_NR_UECapability_t
*
UECap
;
UECap
=
CALLOC
(
1
,
sizeof
(
OAI_NR_UECapability_t
));
UECap
->
UE_NR_Capability
=
UE_Capability_nr
;
//if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
xer_fprint
(
stdout
,
&
asn_DEF_NR_UE_NR_Capability
,(
void
*
)
UE_Capability_nr
);
//}
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_UE_NR_Capability
,
NULL
,
(
void
*
)
UE_Capability_nr
,
&
UECap
->
sdu
[
0
],
MAX_UE_NR_CAPABILITY_SIZE
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %lu)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
UECap
->
sdu_size
=
(
enc_rval
.
encoded
+
7
)
/
8
;
LOG_I
(
PHY
,
"[RRC]UE NR Capability encoded, %d bytes (%zd bits)
\n
"
,
UECap
->
sdu_size
,
enc_rval
.
encoded
+
7
);
NR_UE_rrc_inst
[
ctxt_pP
->
module_id
].
UECap
=
UECap
;
NR_UE_rrc_inst
[
ctxt_pP
->
module_id
].
UECapability
=
UECap
->
sdu
;
NR_UE_rrc_inst
[
ctxt_pP
->
module_id
].
UECapability_size
=
UECap
->
sdu_size
;
OCTET_STRING_fromBuf
(
&
ue_CapabilityRAT_Container
.
ue_CapabilityRAT_Container
,
(
const
char
*
)
NR_UE_rrc_inst
[
ctxt_pP
->
module_id
].
UECapability
,
NR_UE_rrc_inst
[
ctxt_pP
->
module_id
].
UECapability_size
);
...
...
@@ -2447,11 +2457,12 @@ nr_rrc_ue_process_ueCapabilityEnquiry(
ul_dcch_msg
.
message
.
choice
.
c1
->
choice
.
ueCapabilityInformation
->
criticalExtensions
.
present
=
NR_UECapabilityInformation__criticalExtensions_PR_ueCapabilityInformation
;
ul_dcch_msg
.
message
.
choice
.
c1
->
choice
.
ueCapabilityInformation
->
criticalExtensions
.
choice
.
ueCapabilityInformation
=
CALLOC
(
1
,
sizeof
(
struct
NR_UECapabilityInformation_IEs
));
ul_dcch_msg
.
message
.
choice
.
c1
->
choice
.
ueCapabilityInformation
->
criticalExtensions
.
choice
.
ueCapabilityInformation
->
ue_CapabilityRAT_ContainerList
=
CALLOC
(
1
,
sizeof
(
struct
NR_UE_CapabilityRAT_ContainerList
));
ul_dcch_msg
.
message
.
choice
.
c1
->
choice
.
ueCapabilityInformation
->
criticalExtensions
.
choice
.
ueCapabilityInformation
->
ue_CapabilityRAT_ContainerList
->
list
.
count
=
0
;
for
(
i
=
0
;
i
<
UECapabilityEnquiry
->
criticalExtensions
.
choice
.
ueCapabilityEnquiry
->
ue_CapabilityRAT_RequestList
.
list
.
count
;
i
++
)
{
if
(
UECapabilityEnquiry
->
criticalExtensions
.
choice
.
ueCapabilityEnquiry
->
ue_CapabilityRAT_RequestList
.
list
.
array
[
i
]
==
NR_RAT_Type_
eutra
)
{
if
(
UECapabilityEnquiry
->
criticalExtensions
.
choice
.
ueCapabilityEnquiry
->
ue_CapabilityRAT_RequestList
.
list
.
array
[
i
]
->
rat_Type
==
NR_RAT_Type_
nr
)
{
ASN_SEQUENCE_ADD
(
&
ul_dcch_msg
.
message
.
choice
.
c1
->
choice
.
ueCapabilityInformation
->
criticalExtensions
.
choice
.
ueCapabilityInformation
->
ue_CapabilityRAT_ContainerList
->
list
,
&
ue_CapabilityRAT_Container
);
...
...
@@ -2459,11 +2470,24 @@ nr_rrc_ue_process_ueCapabilityEnquiry(
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %jd)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
if
(
LOG_DEBUGFLAG
(
DEBUG_ASN1
)
)
{
//
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
xer_fprint
(
stdout
,
&
asn_DEF_NR_UL_DCCH_Message
,
(
void
*
)
&
ul_dcch_msg
);
}
//
}
LOG_I
(
RRC
,
"UECapabilityInformation Encoded %zd bits (%zd bytes)
\n
"
,
enc_rval
.
encoded
,(
enc_rval
.
encoded
+
7
)
/
8
);
#ifdef ITTI_SIM
MessageDef
*
message_p
;
uint8_t
*
message_buffer
;
message_buffer
=
itti_malloc
(
TASK_RRC_UE_SIM
,
TASK_RRC_GNB_SIM
,
(
enc_rval
.
encoded
+
7
)
/
8
);
memcpy
(
message_buffer
,
buffer
,
(
enc_rval
.
encoded
+
7
)
/
8
);
message_p
=
itti_alloc_new_message
(
TASK_RRC_UE_SIM
,
UE_RRC_DCCH_DATA_IND
);
GNB_RRC_DCCH_DATA_IND
(
message_p
).
rbid
=
DCCH
;
GNB_RRC_DCCH_DATA_IND
(
message_p
).
sdu
=
message_buffer
;
GNB_RRC_DCCH_DATA_IND
(
message_p
).
size
=
(
enc_rval
.
encoded
+
7
)
/
8
;
itti_send_msg_to_task
(
TASK_RRC_GNB_SIM
,
ctxt_pP
->
instance
,
message_p
);
#else
rrc_data_req_ue
(
ctxt_pP
,
DCCH
,
...
...
@@ -2472,6 +2496,7 @@ nr_rrc_ue_process_ueCapabilityEnquiry(
(
enc_rval
.
encoded
+
7
)
/
8
,
buffer
,
PDCP_TRANSMISSION_MODE_CONTROL
);
#endif
}
}
}
openair2/RRC/NR_UE/rrc_defs.h
View file @
fad30fff
...
...
@@ -70,6 +70,13 @@ typedef enum {
nr_RadioBearerConfigX_r15
=
1
}
nsa_message_t
;
#define MAX_UE_NR_CAPABILITY_SIZE 255
typedef
struct
OAI_NR_UECapability_s
{
uint8_t
sdu
[
MAX_UE_NR_CAPABILITY_SIZE
];
uint8_t
sdu_size
;
NR_UE_NR_Capability_t
*
UE_NR_Capability
;
}
OAI_NR_UECapability_t
;
typedef
struct
NR_UE_RRC_INST_s
{
NR_MeasConfig_t
*
meas_config
;
...
...
@@ -92,6 +99,7 @@ typedef struct NR_UE_RRC_INST_s {
NR_SRB_INFO_TABLE_ENTRY
Srb2
[
NB_CNX_UE
];
uint8_t
MBMS_flag
;
OAI_NR_UECapability_t
*
UECap
;
uint8_t
*
UECapability
;
uint8_t
UECapability_size
;
...
...
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