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
spbro
OpenXG-RAN
Commits
9fa89151
Commit
9fa89151
authored
Jan 04, 2023
by
Sakthivel Velumani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bearer context release decoder and encoder
parent
7011cb51
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
208 additions
and
19 deletions
+208
-19
openair2/COMMON/e1ap_messages_types.h
openair2/COMMON/e1ap_messages_types.h
+9
-2
openair2/E1AP/e1ap.c
openair2/E1AP/e1ap.c
+181
-17
openair2/E1AP/e1ap.h
openair2/E1AP/e1ap.h
+8
-0
openair2/E1AP/e1ap_api.c
openair2/E1AP/e1ap_api.c
+9
-0
openair2/E1AP/e1ap_api.h
openair2/E1AP/e1ap_api.h
+1
-0
No files found.
openair2/COMMON/e1ap_messages_types.h
View file @
9fa89151
...
...
@@ -152,8 +152,8 @@ typedef struct pdu_session_to_setup_s {
}
pdu_session_to_setup_t
;
typedef
struct
e1ap_bearer_setup_req_s
{
uint
64
_t
gNB_cu_cp_ue_id
;
uint
64
_t
gNB_cu_up_ue_id
;
uint
32
_t
gNB_cu_cp_ue_id
;
uint
32
_t
gNB_cu_up_ue_id
;
rnti_t
rnti
;
uint64_t
cipheringAlgorithm
;
uint64_t
integrityProtectionAlgorithm
;
...
...
@@ -170,6 +170,13 @@ typedef struct e1ap_bearer_setup_req_s {
pdu_session_to_setup_t
pduSessionMod
[
E1AP_MAX_NUM_PDU_SESSIONS
];
}
e1ap_bearer_setup_req_t
;
typedef
struct
e1ap_bearer_release_cmd_s
{
uint32_t
gNB_cu_cp_ue_id
;
uint32_t
gNB_cu_up_ue_id
;
long
cause_type
;
long
cause
;
}
e1ap_bearer_release_cmd_t
;
typedef
struct
drb_setup_s
{
int
drbId
;
in_addr_t
tlAddress
;
...
...
openair2/E1AP/e1ap.c
View file @
9fa89151
...
...
@@ -51,7 +51,7 @@ e1ap_message_processing_t e1ap_message_processing[E1AP_NUM_MSG_HANDLERS][3] = {
{
e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST
,
e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE
,
e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE
},
/* bearerContextSetup */
{
e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST
,
0
,
0
},
/* bearerContextModification */
{
0
,
0
,
0
},
/* bearerContextModificationRequired */
{
0
,
0
,
0
},
/* bearerContextRelease */
{
e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND
,
e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE
,
0
},
/* bearerContextRelease */
{
0
,
0
,
0
},
/* bearerContextReleaseRequired */
{
0
,
0
,
0
}
/* bearerContextInactivityNotification */
};
...
...
@@ -1324,14 +1324,85 @@ int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_CONFIRM(instance_t instance,
BEARER CONTEXT RELEASE
*/
int
e1apCUCP_send_BEARER_CONTEXT_RELEASE_COMMAND
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
int
fill_BEARER_CONTEXT_RELEASE_COMMAND
(
instance_t
instance
,
e1ap_bearer_release_cmd_t
*
const
cmd
,
E1AP_E1AP_PDU_t
*
pdu
)
{
e1ap_setup_req_t
*
setup
=
&
getCxtE1
(
CPtype
,
instance
)
->
setupReq
;
if
(
!
setup
)
{
LOG_E
(
E1AP
,
"got send_BEARER_CONTEXT_RELEASE_COMMAND on not established instance (%ld)
\n
"
,
instance
);
return
-
1
;
}
pdu
->
present
=
E1AP_E1AP_PDU_PR_initiatingMessage
;
asn1cCalloc
(
pdu
->
choice
.
initiatingMessage
,
msg
);
msg
->
procedureCode
=
E1AP_ProcedureCode_id_bearerContextRelease
;
msg
->
criticality
=
E1AP_Criticality_reject
;
msg
->
value
.
present
=
E1AP_InitiatingMessage__value_PR_BearerContextReleaseCommand
;
E1AP_BearerContextReleaseCommand_t
*
out
=
&
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
BearerContextReleaseCommand
;
/* mandatory */
/* c1. gNB-CU-CP UE E1AP ID */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextReleaseCommandIEs_t
,
ieC1
);
ieC1
->
id
=
E1AP_ProtocolIE_ID_id_gNB_CU_CP_UE_E1AP_ID
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
value
.
present
=
E1AP_BearerContextReleaseCommandIEs__value_PR_GNB_CU_CP_UE_E1AP_ID
;
ieC1
->
value
.
choice
.
GNB_CU_CP_UE_E1AP_ID
=
cmd
->
gNB_cu_cp_ue_id
;
/* mandatory */
/* c2. gNB-CU-UP UE E1AP ID */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextReleaseCommandIEs_t
,
ieC2
);
ieC2
->
id
=
E1AP_ProtocolIE_ID_id_gNB_CU_UP_UE_E1AP_ID
;
ieC2
->
criticality
=
E1AP_Criticality_reject
;
ieC2
->
value
.
present
=
E1AP_BearerContextReleaseCommandIEs__value_PR_GNB_CU_UP_UE_E1AP_ID
;
ieC2
->
value
.
choice
.
GNB_CU_UP_UE_E1AP_ID
=
cmd
->
gNB_cu_cp_ue_id
;
return
0
;
}
int
e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
int
e1apCUCP_send_BEARER_CONTEXT_RELEASE_COMMAND
(
instance_t
instance
,
e1ap_bearer_release_cmd_t
*
const
cmd
)
{
E1AP_E1AP_PDU_t
pdu
=
{
0
};
fill_BEARER_CONTEXT_RELEASE_COMMAND
(
instance
,
cmd
,
&
pdu
);
return
e1ap_encode_send
(
CPtype
,
instance
,
&
pdu
,
0
,
__func__
);
}
int
fill_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
,
e1ap_bearer_release_cmd_t
*
const
cmd
,
E1AP_E1AP_PDU_t
*
pdu
)
{
e1ap_setup_req_t
*
setup
=
&
getCxtE1
(
CPtype
,
instance
)
->
setupReq
;
if
(
!
setup
)
{
LOG_E
(
E1AP
,
"got send_BEARER_CONTEXT_RELEASE_COMPLETE on not established instance (%ld)
\n
"
,
instance
);
return
-
1
;
}
pdu
->
present
=
E1AP_E1AP_PDU_PR_successfulOutcome
;
asn1cCalloc
(
pdu
->
choice
.
successfulOutcome
,
msg
);
msg
->
procedureCode
=
E1AP_ProcedureCode_id_bearerContextRelease
;
msg
->
criticality
=
E1AP_Criticality_reject
;
msg
->
value
.
present
=
E1AP_SuccessfulOutcome__value_PR_BearerContextReleaseComplete
;
E1AP_BearerContextReleaseComplete_t
*
out
=
&
pdu
->
choice
.
successfulOutcome
->
value
.
choice
.
BearerContextReleaseComplete
;
/* mandatory */
/* c1. gNB-CU-CP UE E1AP ID */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextReleaseCompleteIEs_t
,
ieC1
);
ieC1
->
id
=
E1AP_ProtocolIE_ID_id_gNB_CU_CP_UE_E1AP_ID
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
value
.
present
=
E1AP_BearerContextReleaseCompleteIEs__value_PR_GNB_CU_CP_UE_E1AP_ID
;
ieC1
->
value
.
choice
.
GNB_CU_CP_UE_E1AP_ID
=
cmd
->
gNB_cu_cp_ue_id
;
/* mandatory */
/* c2. gNB-CU-UP UE E1AP ID */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextReleaseCompleteIEs_t
,
ieC2
);
ieC2
->
id
=
E1AP_ProtocolIE_ID_id_gNB_CU_UP_UE_E1AP_ID
;
ieC2
->
criticality
=
E1AP_Criticality_reject
;
ieC2
->
value
.
present
=
E1AP_BearerContextReleaseCompleteIEs__value_PR_GNB_CU_UP_UE_E1AP_ID
;
ieC2
->
value
.
choice
.
GNB_CU_UP_UE_E1AP_ID
=
cmd
->
gNB_cu_cp_ue_id
;
return
0
;
}
int
e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
,
e1ap_bearer_release_cmd_t
*
const
cmd
)
{
E1AP_E1AP_PDU_t
pdu
=
{
0
};
fill_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance
,
cmd
,
&
pdu
);
return
e1ap_encode_send
(
CPtype
,
instance
,
&
pdu
,
0
,
__func__
);
}
int
e1apCUUP_send_BEARER_CONTEXT_RELEASE_REQUEST
(
instance_t
instance
)
{
...
...
@@ -1339,20 +1410,113 @@ int e1apCUUP_send_BEARER_CONTEXT_RELEASE_REQUEST(instance_t instance) {
return
-
1
;
}
void
extract_BEARER_CONTEXT_RELEASE_COMMAND
(
const
E1AP_E1AP_PDU_t
*
pdu
,
e1ap_bearer_release_cmd_t
*
bearerCxt
)
{
const
E1AP_BearerContextReleaseCommand_t
*
in
=
&
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
BearerContextReleaseCommand
;
E1AP_BearerContextReleaseCommandIEs_t
*
ie
;
LOG_I
(
E1AP
,
"Bearer context setup number of IEs %d
\n
"
,
in
->
protocolIEs
.
list
.
count
);
for
(
int
i
=
0
;
i
<
in
->
protocolIEs
.
list
.
count
;
i
++
)
{
ie
=
in
->
protocolIEs
.
list
.
array
[
i
];
switch
(
ie
->
id
)
{
case
E1AP_ProtocolIE_ID_id_gNB_CU_CP_UE_E1AP_ID
:
DevAssert
(
ie
->
criticality
==
E1AP_Criticality_reject
);
DevAssert
(
ie
->
value
.
present
==
E1AP_BearerContextReleaseCommandIEs__value_PR_GNB_CU_CP_UE_E1AP_ID
);
bearerCxt
->
gNB_cu_cp_ue_id
=
ie
->
value
.
choice
.
GNB_CU_CP_UE_E1AP_ID
;
break
;
case
E1AP_ProtocolIE_ID_id_gNB_CU_UP_UE_E1AP_ID
:
DevAssert
(
ie
->
criticality
==
E1AP_Criticality_reject
);
DevAssert
(
ie
->
value
.
present
==
E1AP_BearerContextReleaseCommandIEs__value_PR_GNB_CU_UP_UE_E1AP_ID
);
bearerCxt
->
gNB_cu_up_ue_id
=
ie
->
value
.
choice
.
GNB_CU_UP_UE_E1AP_ID
;
break
;
case
E1AP_ProtocolIE_ID_id_Cause
:
DevAssert
(
ie
->
criticality
==
E1AP_Criticality_ignore
);
DevAssert
(
ie
->
value
.
present
==
E1AP_BearerContextReleaseCommandIEs__value_PR_Cause
);
bearerCxt
->
cause_type
=
ie
->
value
.
choice
.
Cause
.
present
;
if
((
ie
->
value
.
choice
.
Cause
.
present
!=
E1AP_Cause_PR_NOTHING
)
&&
(
ie
->
value
.
choice
.
Cause
.
present
!=
E1AP_Cause_PR_choice_extension
))
bearerCxt
->
cause
=
ie
->
value
.
choice
.
Cause
.
choice
.
radioNetwork
;
default:
LOG_E
(
E1AP
,
"Handle for this IE is not implemented (or) invalid IE detected
\n
"
);
break
;
}
}
}
int
e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND
(
instance_t
instance
,
uint32_t
assoc_id
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
const
E1AP_E1AP_PDU_t
*
pdu
)
{
e1ap_upcp_inst_t
*
e1_inst
=
getCxtE1
(
UPtype
,
instance
);
if
(
!
e1_inst
)
{
LOG_E
(
E1AP
,
"got BEARER_CONTEXT_RELEASE_COMMAND on not established instance (%ld)
\n
"
,
instance
);
return
-
1
;
}
DevAssert
(
pdu
!=
NULL
);
DevAssert
(
pdu
->
present
==
E1AP_E1AP_PDU_PR_initiatingMessage
);
DevAssert
(
pdu
->
choice
.
initiatingMessage
->
procedureCode
==
E1AP_ProcedureCode_id_bearerContextRelease
);
DevAssert
(
pdu
->
choice
.
initiatingMessage
->
criticality
==
E1AP_Criticality_reject
);
DevAssert
(
pdu
->
choice
.
initiatingMessage
->
value
.
present
==
E1AP_InitiatingMessage__value_PR_BearerContextReleaseCommand
);
e1ap_bearer_release_cmd_t
bearerCxt
=
{
0
};
extract_BEARER_CONTEXT_RELEASE_COMMAND
(
pdu
,
&
bearerCxt
);
CUUP_process_bearer_release_command
(
&
bearerCxt
,
instance
);
return
0
;
}
void
extract_BEARER_CONTEXT_RELEASE_COMPLETE
(
const
E1AP_E1AP_PDU_t
*
pdu
,
e1ap_bearer_release_cmd_t
*
bearerCxt
)
{
const
E1AP_BearerContextReleaseComplete_t
*
in
=
&
pdu
->
choice
.
successfulOutcome
->
value
.
choice
.
BearerContextReleaseComplete
;
E1AP_BearerContextReleaseCompleteIEs_t
*
ie
;
LOG_I
(
E1AP
,
"Bearer context setup number of IEs %d
\n
"
,
in
->
protocolIEs
.
list
.
count
);
for
(
int
i
=
0
;
i
<
in
->
protocolIEs
.
list
.
count
;
i
++
)
{
ie
=
in
->
protocolIEs
.
list
.
array
[
i
];
switch
(
ie
->
id
)
{
case
E1AP_ProtocolIE_ID_id_gNB_CU_CP_UE_E1AP_ID
:
DevAssert
(
ie
->
criticality
==
E1AP_Criticality_reject
);
DevAssert
(
ie
->
value
.
present
==
E1AP_BearerContextReleaseCompleteIEs__value_PR_GNB_CU_CP_UE_E1AP_ID
);
bearerCxt
->
gNB_cu_cp_ue_id
=
ie
->
value
.
choice
.
GNB_CU_CP_UE_E1AP_ID
;
break
;
case
E1AP_ProtocolIE_ID_id_gNB_CU_UP_UE_E1AP_ID
:
DevAssert
(
ie
->
criticality
==
E1AP_Criticality_reject
);
DevAssert
(
ie
->
value
.
present
==
E1AP_BearerContextReleaseCompleteIEs__value_PR_GNB_CU_UP_UE_E1AP_ID
);
bearerCxt
->
gNB_cu_up_ue_id
=
ie
->
value
.
choice
.
GNB_CU_UP_UE_E1AP_ID
;
break
;
default:
LOG_E
(
E1AP
,
"Handle for this IE is not implemented (or) invalid IE detected
\n
"
);
break
;
}
}
}
int
e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
,
uint32_t
assoc_id
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
const
E1AP_E1AP_PDU_t
*
pdu
)
{
e1ap_upcp_inst_t
*
e1_inst
=
getCxtE1
(
UPtype
,
instance
);
if
(
!
e1_inst
)
{
LOG_E
(
E1AP
,
"got BEARER_CONTEXT_RELEASE_COMPLETE on not established instance (%ld)
\n
"
,
instance
);
return
-
1
;
}
DevAssert
(
pdu
!=
NULL
);
DevAssert
(
pdu
->
present
==
E1AP_E1AP_PDU_PR_successfulOutcome
);
DevAssert
(
pdu
->
choice
.
successfulOutcome
->
procedureCode
==
E1AP_ProcedureCode_id_bearerContextRelease
);
DevAssert
(
pdu
->
choice
.
successfulOutcome
->
criticality
==
E1AP_Criticality_reject
);
DevAssert
(
pdu
->
choice
.
successfulOutcome
->
value
.
present
==
E1AP_SuccessfulOutcome__value_PR_BearerContextReleaseComplete
);
e1ap_bearer_release_cmd_t
bearerCxt
=
{
0
};
extract_BEARER_CONTEXT_RELEASE_COMPLETE
(
pdu
,
&
bearerCxt
);
//TODO: CUCP_process_bearer_release_complete(&beareCxt, instance);
return
0
;
}
int
e1apCUCP_handle_BEARER_CONTEXT_RELEASE_REQUEST
(
instance_t
instance
,
...
...
openair2/E1AP/e1ap.h
View file @
9fa89151
...
...
@@ -54,6 +54,14 @@ int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST(instance_t instance,
void
e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE
(
instance_t
instance
,
e1ap_bearer_setup_resp_t
*
const
resp
);
int
e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND
(
instance_t
instance
,
const
E1AP_E1AP_PDU_t
*
pdu
);
int
e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
,
const
E1AP_E1AP_PDU_t
*
pdu
);
int
e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
,
e1ap_bearer_release_cmd_t
*
const
cmd
);
void
*
E1AP_CUUP_task
(
void
*
arg
);
void
*
E1AP_CUCP_task
(
void
*
arg
);
openair2/E1AP/e1ap_api.c
View file @
9fa89151
...
...
@@ -199,3 +199,12 @@ void CUUP_process_bearer_context_mod_req(e1ap_bearer_setup_req_t *const req, ins
// TODO: send bearer cxt mod response
}
void
CUUP_process_bearer_release_command
(
e1ap_bearer_release_cmd_t
*
const
cmd
,
instance_t
instance
)
{
instance_t
gtpInst
=
getCxtE1
(
UPtype
,
instance
)
->
gtpInstN3
;
newGtpuDeleteAllTunnels
(
gtpInst
,
cmd
->
gNB_cu_up_ue_id
);
gtpInst
=
getCxtE1
(
UPtype
,
instance
)
->
gtpInstF1U
;
newGtpuDeleteAllTunnels
(
gtpInst
,
cmd
->
gNB_cu_up_ue_id
);
e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance
,
cmd
);
}
openair2/E1AP/e1ap_api.h
View file @
9fa89151
...
...
@@ -31,4 +31,5 @@ void CUUP_process_e1_bearer_context_setup_req(e1ap_bearer_setup_req_t *const req
void
CUUP_process_bearer_context_mod_req
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
);
void
CUUP_process_bearer_release_command
(
e1ap_bearer_release_cmd_t
*
const
cmd
,
instance_t
instance
);
#endif
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