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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-RAN
Commits
6106207b
Commit
6106207b
authored
2 years ago
by
Sakthivel Velumani
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixing build issues
parent
67235fac
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
622 additions
and
370 deletions
+622
-370
CMakeLists.txt
CMakeLists.txt
+2
-0
common/utils/ocp_itti/intertask_interface.h
common/utils/ocp_itti/intertask_interface.h
+1
-0
openair2/COMMON/e1ap_messages_def.h
openair2/COMMON/e1ap_messages_def.h
+4
-4
openair2/COMMON/e1ap_messages_types.h
openair2/COMMON/e1ap_messages_types.h
+211
-0
openair2/COMMON/messages_def.h
openair2/COMMON/messages_def.h
+1
-1
openair2/E1AP/CMakeLists.txt
openair2/E1AP/CMakeLists.txt
+1
-1
openair2/E1AP/e1ap.c
openair2/E1AP/e1ap.c
+210
-197
openair2/E1AP/e1ap.h
openair2/E1AP/e1ap.h
+53
-1
openair2/E1AP/e1ap_common.c
openair2/E1AP/e1ap_common.c
+116
-16
openair2/E1AP/e1ap_common.h
openair2/E1AP/e1ap_common.h
+9
-141
openair2/GNB_APP/gnb_app.c
openair2/GNB_APP/gnb_app.c
+1
-0
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+7
-7
openair2/GNB_APP/gnb_config.h
openair2/GNB_APP/gnb_config.h
+3
-0
openair2/GNB_APP/gnb_paramdef.h
openair2/GNB_APP/gnb_paramdef.h
+2
-2
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+1
-0
No files found.
CMakeLists.txt
View file @
6106207b
...
...
@@ -1325,6 +1325,8 @@ add_library(NFAPI_COMMON_LIB ${NFAPI_COMMON_SRC})
include_directories
(
${
NFAPI_DIR
}
/common/public_inc
)
include_directories
(
${
CMAKE_CURRENT_BINARY_DIR
}
/openair2/E1AP/MESSAGES/
)
set
(
NFAPI_SRC
${
NFAPI_DIR
}
/nfapi/src/nfapi.c
${
NFAPI_DIR
}
/nfapi/src/nfapi_p4.c
...
...
This diff is collapsed.
Click to expand it.
common/utils/ocp_itti/intertask_interface.h
View file @
6106207b
...
...
@@ -79,6 +79,7 @@ typedef struct IttiMsgText_s {
#include <openair2/COMMON/as_message.h>
#include <openair2/RRC/LTE/rrc_types.h>
#include <openair2/COMMON/rrc_messages_types.h>
#include <openair2/COMMON/e1ap_messages_types.h>
#include <openair3/NAS/COMMON/UTIL/OctetString.h>
#include <openair3/NAS/COMMON/IES/AccessPointName.h>
...
...
This diff is collapsed.
Click to expand it.
openair2/COMMON/e1ap_messages_def.h
View file @
6106207b
...
...
@@ -19,13 +19,13 @@
* contact@openairinterface.org
*/
#ifndef E1AP_MESSAGES_DEF_H_
#define E1AP_MESSAGES_DEF_H_
/* gNB_CUUP application layer -> E1AP messages */
MESSAGE_DEF
(
E1AP_SETUP_REQ
,
MESSAGE_PRIORITY_MED
,
e1ap_setup_req_t
,
e1ap_setup_req
)
/* E1AP -> eNB_DU or eNB_CU_RRC -> E1AP application layer messages */
MESSAGE_DEF
(
E1AP_SETUP_RESP
,
MESSAGE_PRIORITY_MED
,
e1ap_setup_resp_t
,
e1ap_setup_resp
)
#endif
/* E1AP_MESSAGES_DEF_H_ */
MESSAGE_DEF
(
E1AP_BEARER_CONTEXT_SETUP_REQ
,
MESSAGE_PRIORITY_MED
,
e1ap_bearer_setup_req_t
,
e1ap_bearer_setup_req
)
MESSAGE_DEF
(
E1AP_BEARER_CONTEXT_SETUP_RESP
,
MESSAGE_PRIORITY_MED
,
e1ap_bearer_setup_resp_t
,
e1ap_bearer_setup_resp
)
This diff is collapsed.
Click to expand it.
openair2/COMMON/e1ap_messages_types.h
0 → 100644
View file @
6106207b
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Author and copyright: Laurent Thomas, open-cells.com
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef E1AP_MESSAGES_TYPES_H
#define E1AP_MESSAGES_TYPES_H
#include "E1AP_E1AP-PDU.h"
#include "E1AP_TransactionID.h"
#include "E1AP_PriorityLevel.h"
#define E1AP_MAX_NUM_TRANSAC_IDS 4
#define E1AP_MAX_NUM_PLMNS 4
#define E1AP_MAX_NUM_CELL_GROUPS 4
#define E1AP_MAX_NUM_QOS_FLOWS 4
#define E1AP_MAX_NUM_NGRAN_DRB 4
#define E1AP_MAX_NUM_PDU_SESSIONS 4
#define E1AP_MAX_NUM_DRBS 4
#define E1AP_MAX_NUM_DRBS 4
#define E1AP_MAX_NUM_UP_PARAM 4
#define E1AP_SETUP_REQ(mSGpTR) (mSGpTR)->ittiMsg.e1ap_setup_req
#define E1AP_SETUP_RESP(mSGpTR) (mSGpTR)->ittiMsg.e1ap_setup_resp
#define E1AP_BEARER_CONTEXT_SETUP_REQ(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_setup_req
#define E1AP_BEARER_CONTEXT_SETUP_RESP(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_setup_resp
#define E1AP_PORT_NUMBER 25
#define E1AP_SCTP_PPID 63
typedef
f1ap_net_ip_address_t
e1ap_net_ip_address_t
;
typedef
int
(
*
e1ap_message_processing_t
)(
instance_t
instance
,
E1AP_E1AP_PDU_t
*
message_p
);
typedef
struct
PLMN_ID_s
{
int
mcc
;
int
mnc
;
int
mnc_digit_length
;
}
PLMN_ID_t
;
typedef
struct
e1ap_setup_req_s
{
uint64_t
gNB_cu_up_id
;
char
*
gNB_cu_up_name
;
int
assoc_id
;
uint64_t
transac_id
;
int
supported_plmns
;
PLMN_ID_t
plmns
[
E1AP_MAX_NUM_PLMNS
];
uint16_t
sctp_in_streams
;
uint16_t
sctp_out_streams
;
uint16_t
default_sctp_stream_id
;
e1ap_net_ip_address_t
CUUP_e1_ip_address
;
e1ap_net_ip_address_t
CUCP_e1_ip_address
;
long
cn_support
;
int
port_cuup
;
int
port_cucp
;
}
e1ap_setup_req_t
;
typedef
struct
e1ap_setup_resp_s
{
long
transac_id
;
}
e1ap_setup_resp_t
;
typedef
struct
cell_group_s
{
long
id
;
}
cell_group_t
;
typedef
struct
drb_to_setup_s
{
long
drbId
;
long
pDCP_SN_Size_UL
;
long
pDCP_SN_Size_DL
;
long
rLC_Mode
;
long
qci
;
long
qosPriorityLevel
;
long
pre_emptionCapability
;
long
pre_emptionVulnerability
;
in_addr_t
tlAddress
;
long
teId
;
int
numCellGroups
;
cell_group_t
cellGroupList
[
E1AP_MAX_NUM_CELL_GROUPS
];
}
drb_to_setup_t
;
typedef
struct
qos_flow_to_setup_s
{
long
id
;
long
fiveQI
;
long
qoSPriorityLevel
;
long
packetDelayBudget
;
long
packetError_scalar
;
long
packetError_exponent
;
long
priorityLevel
;
long
pre_emptionCapability
;
long
pre_emptionVulnerability
;
}
qos_flow_to_setup_t
;
typedef
struct
DRB_nGRAN_to_setup_s
{
long
id
;
long
defaultDRB
;
long
sDAP_Header_UL
;
long
sDAP_Header_DL
;
int
numCellGroups
;
cell_group_t
cellGroupList
[
E1AP_MAX_NUM_CELL_GROUPS
];
int
numQosFlow2Setup
;
qos_flow_to_setup_t
qosFlows
[
E1AP_MAX_NUM_QOS_FLOWS
];
}
DRB_nGRAN_to_setup_t
;
typedef
struct
pdu_session_to_setup_s
{
long
sessionId
;
long
sessionType
;
int32_t
sst
;
long
integrityProtectionIndication
;
long
confidentialityProtectionIndication
;
in_addr_t
tlAddress
;
int32_t
teId
;
long
numDRB2Setup
;
DRB_nGRAN_to_setup_t
DRBnGRanList
[
E1AP_MAX_NUM_NGRAN_DRB
];
}
pdu_session_to_setup_t
;
typedef
struct
e1ap_bearer_setup_req_s
{
uint64_t
gNB_cu_cp_ue_id
;
uint64_t
cipheringAlgorithm
;
char
encryptionKey
[
128
];
long
bitRate
;
PLMN_ID_t
servingPLMNid
;
long
activityNotificationLevel
;
int
numDRBs
;
drb_to_setup_t
DRBList
[
E1AP_MAX_NUM_DRBS
];
int
numPDUSessions
;
pdu_session_to_setup_t
pduSession
[
E1AP_MAX_NUM_PDU_SESSIONS
];
}
e1ap_bearer_setup_req_t
;
typedef
struct
up_params_s
{
in_addr_t
tlAddress
;
long
teId
;
}
up_params_t
;
typedef
struct
drb_setup_s
{
int
drbId
;
in_addr_t
tlAddress
;
int
teId
;
int
numUpParam
;
up_params_t
UpParamList
[
E1AP_MAX_NUM_UP_PARAM
];
}
drb_setup_t
;
typedef
struct
qos_flow_setup_s
{
long
id
;
}
qos_flow_setup_t
;
typedef
struct
DRB_nGRAN_setup_s
{
long
id
;
int
numUpParam
;
up_params_t
UpParamList
[
E1AP_MAX_NUM_UP_PARAM
];
int
numQosFlowSetup
;
qos_flow_setup_t
qosFlows
[
E1AP_MAX_NUM_QOS_FLOWS
];
}
DRB_nGRAN_setup_t
;
typedef
struct
DRB_nGRAN_failed_s
{
long
id
;
long
cause_type
;
long
cause
;
}
DRB_nGRAN_failed_t
;
typedef
struct
pdu_session_setup_s
{
long
id
;
in_addr_t
tlAddress
;
long
teId
;
int
numDRBSetup
;
DRB_nGRAN_setup_t
DRBnGRanList
[
E1AP_MAX_NUM_NGRAN_DRB
];
int
numDRBFailed
;
DRB_nGRAN_failed_t
DRBnGRanFailedList
[
E1AP_MAX_NUM_NGRAN_DRB
];
}
pdu_session_setup_t
;
typedef
struct
e1ap_bearer_setup_resp_s
{
uint64_t
gNB_cu_cp_ue_id
;
uint64_t
gNB_cu_up_ue_id
;
int
numDRBs
;
drb_setup_t
DRBList
[
E1AP_MAX_NUM_DRBS
];
int
numPDUSessions
;
pdu_session_setup_t
pduSession
[
E1AP_MAX_NUM_PDU_SESSIONS
];
}
e1ap_bearer_setup_resp_t
;
typedef
struct
e1ap_upcp_inst_s
{
uint32_t
assoc_id
;
e1ap_setup_req_t
setupReq
;
e1ap_bearer_setup_req_t
bearerSetupReq
;
e1ap_bearer_setup_resp_t
bearerSetupResp
;
}
e1ap_upcp_inst_t
;
typedef
enum
{
CPtype
=
0
,
UPtype
}
E1_t
;
#endif
/* E1AP_MESSAGES_TYPES_H */
This diff is collapsed.
Click to expand it.
openair2/COMMON/messages_def.h
View file @
6106207b
...
...
@@ -42,4 +42,4 @@
#include "udp_messages_def.h"
#include "gtpv1_u_messages_def.h"
#include "flexran_messages_def.h"
#include "e1ap_message
_types
.h"
#include "e1ap_message
s_def
.h"
This diff is collapsed.
Click to expand it.
openair2/E1AP/CMakeLists.txt
View file @
6106207b
add_subdirectory
(
MESSAGES
)
add_library
(
E1AP e1ap.c
)
add_library
(
E1AP e1ap.c
e1ap_common.c
)
target_link_libraries
(
E1AP
PUBLIC ASN1_E1AP_LIB
PRIVATE UTIL
)
...
...
This diff is collapsed.
Click to expand it.
openair2/E1AP/e1ap.c
View file @
6106207b
...
...
@@ -22,34 +22,39 @@
*/
#include "e1ap.h"
#define NUM_E1AP_MSG_HANDLERS 14
e1ap_message_processing_t
e1ap_message_processing
[
NUM_E1AP_MSG_HANDLERS
][
3
]
=
{
{
0
,
0
,
0
}
/* Reset */
{
0
,
0
,
0
}
/* ErrorIndication */
{
0
,
0
,
0
}
/* privateMessage */
{
e1apCUCP_handle_SETUP_REQUEST
,
e1apCUUP_handle_SETUP_RESPONSE
,
e1apCUUP_handle_SETUP_FAILURE
}
/* gNBCUUPE1Setup */
{
0
,
0
,
0
}
/* gNBCUCPE1Setup */
{
0
,
0
,
0
}
/* gNBCUUPConfigurationUpdate */
{
0
,
0
,
0
}
/* gNBCUCPConfigurationUpdate */
{
0
,
0
,
0
}
/* E1Release */
{
e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST
,
e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE
,
e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE
}
/* bearerContextSetup */
{
0
,
0
,
0
}
/* bearerContextModification */
{
0
,
0
,
0
}
/* bearerContextModificationRequired */
{
0
,
0
,
0
}
/* bearerContextRelease */
{
0
,
0
,
0
}
/* bearerContextReleaseRequired */
#include "e1ap_common.h"
#define E1AP_NUM_MSG_HANDLERS 14
e1ap_message_processing_t
e1ap_message_processing
[
E1AP_NUM_MSG_HANDLERS
][
3
]
=
{
{
0
,
0
,
0
},
/* Reset */
{
0
,
0
,
0
},
/* ErrorIndication */
{
0
,
0
,
0
},
/* privateMessage */
{
e1apCUCP_handle_SETUP_REQUEST
,
e1apCUUP_handle_SETUP_RESPONSE
,
e1apCUUP_handle_SETUP_FAILURE
},
/* gNBCUUPE1Setup */
{
0
,
0
,
0
},
/* gNBCUCPE1Setup */
{
0
,
0
,
0
},
/* gNBCUUPConfigurationUpdate */
{
0
,
0
,
0
},
/* gNBCUCPConfigurationUpdate */
{
0
,
0
,
0
},
/* E1Release */
{
e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST
,
e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE
,
e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE
},
/* bearerContextSetup */
{
0
,
0
,
0
},
/* bearerContextModification */
{
0
,
0
,
0
},
/* bearerContextModificationRequired */
{
0
,
0
,
0
},
/* bearerContextRelease */
{
0
,
0
,
0
},
/* bearerContextReleaseRequired */
{
0
,
0
,
0
}
/* bearerContextInactivityNotification */
};
int
asn1_encoder_xer_print
=
1
;
int
e1ap_assoc_id
(
bool
isCu
,
instance_t
instance
)
{
return
0
;
const
char
*
e1ap_direction2String
(
int
e1ap_dir
)
{
static
const
char
*
e1ap_direction_String
[]
=
{
""
,
/* Nothing */
"Initiating message"
,
/* initiating message */
"Successfull outcome"
,
/* successfull outcome */
"UnSuccessfull outcome"
,
/* successfull outcome */
};
return
(
e1ap_direction_String
[
e1ap_dir
]);
}
int
e1ap_handle_message
(
instance_t
instance
,
uint32_t
assoc_id
,
int32_t
stream
,
int
e1ap_handle_message
(
instance_t
instance
,
uint32_t
assoc_id
,
const
uint8_t
*
const
data
,
const
uint32_t
data_length
)
{
E1AP_E1AP_PDU_t
pdu
=
{
0
};
int
ret
;
...
...
@@ -61,7 +66,7 @@ int e1ap_handle_message(instance_t instance, uint32_t assoc_id, int32_t stream,
}
/* Checking procedure Code and direction of message */
if
((
pdu
.
choice
.
initiatingMessage
->
procedureCode
>=
NUM_MSG_HANDLERS
)
if
((
pdu
.
choice
.
initiatingMessage
->
procedureCode
>=
E1AP_
NUM_MSG_HANDLERS
)
||
(
pdu
.
present
>
E1AP_E1AP_PDU_PR_unsuccessfulOutcome
)
||
(
pdu
.
present
<=
E1AP_E1AP_PDU_PR_NOTHING
))
{
LOG_E
(
E1AP
,
"[SCTP %d] Either procedureCode %ld or direction %d exceed expected
\n
"
,
...
...
@@ -70,17 +75,17 @@ int e1ap_handle_message(instance_t instance, uint32_t assoc_id, int32_t stream,
return
-
1
;
}
if
(
e1ap_message
s
_processing
[
pdu
.
choice
.
initiatingMessage
->
procedureCode
][
pdu
.
present
-
1
]
==
NULL
)
{
if
(
e1ap_message_processing
[
pdu
.
choice
.
initiatingMessage
->
procedureCode
][
pdu
.
present
-
1
]
==
NULL
)
{
// No handler present. This can mean not implemented or no procedure for eNB (wrong direction).
LOG_E
(
E1AP
,
"[SCTP %d] No handler for procedureCode %ld in %s
\n
"
,
assoc_id
,
pdu
.
choice
.
initiatingMessage
->
procedureCode
,
f
1ap_direction2String
(
pdu
.
present
-
1
));
e
1ap_direction2String
(
pdu
.
present
-
1
));
ret
=-
1
;
}
else
{
/* Calling the right handler */
LOG_I
(
E1AP
,
"Calling handler with instance %ld
\n
"
,
instance
);
ret
=
(
*
e1ap_message
s
_processing
[
pdu
.
choice
.
initiatingMessage
->
procedureCode
][
pdu
.
present
-
1
])
(
instance
,
assoc_id
,
stream
,
&
pdu
);
ret
=
(
*
e1ap_message_processing
[
pdu
.
choice
.
initiatingMessage
->
procedureCode
][
pdu
.
present
-
1
])
(
instance
,
&
pdu
);
}
ASN_STRUCT_FREE_CONTENTS_ONLY
(
asn_DEF_E1AP_E1AP_PDU
,
&
pdu
);
...
...
@@ -90,49 +95,12 @@ int e1ap_handle_message(instance_t instance, uint32_t assoc_id, int32_t stream,
void
cuup_task_handle_sctp_data_ind
(
instance_t
instance
,
sctp_data_ind_t
*
sctp_data_ind
)
{
int
result
;
DevAssert
(
sctp_data_ind
!=
NULL
);
e1ap_handle_message
(
instance
,
sctp_data_ind
->
assoc_id
,
sctp_data_ind
->
stream
,
e1ap_handle_message
(
instance
,
sctp_data_ind
->
assoc_id
,
sctp_data_ind
->
buffer
,
sctp_data_ind
->
buffer_length
);
result
=
itti_free
(
TASK_UNKNOWN
,
sctp_data_ind
->
buffer
);
AssertFatal
(
result
==
EXIT_SUCCESS
,
"Failed to free memory (%d)!
\n
"
,
result
);
}
int
e1ap_encode_send
(
bool
isCu
,
instance_t
instance
,
E1AP_E1AP_PDU_t
*
pdu
,
uint16_t
stream
,
const
char
*
func
)
{
DevAssert
(
pdu
!=
NULL
);
if
(
asn1_encoder_xer_print
)
{
LOG_E
(
E1AP
,
"----------------- ASN1 ENCODER PRINT START -----------------
\n
"
);
xer_fprint
(
stdout
,
&
asn_DEF_E1AP_E1AP_PDU
,
pdu
);
LOG_E
(
E1AP
,
"----------------- ASN1 ENCODER PRINT END-----------------
\n
"
);
}
char
errbuf
[
2048
];
/* Buffer for error message */
size_t
errlen
=
sizeof
(
errbuf
);
/* Size of the buffer */
int
ret
=
asn_check_constraints
(
&
asn_DEF_E1AP_E1AP_PDU
,
pdu
,
errbuf
,
&
errlen
);
if
(
ret
)
{
LOG_E
(
E1AP
,
"%s: Constraint validation failed: %s
\n
"
,
func
,
errbuf
);
}
void
*
buffer
=
NULL
;
ssize_t
encoded
=
aper_encode_to_new_buffer
(
&
asn_DEF_E1AP_E1AP_PDU
,
0
,
pdu
,
buffer
);
if
(
encoded
<
0
)
{
LOG_E
(
E1AP
,
"%s: Failed to encode E1AP message
\n
"
,
func
);
return
-
1
;
}
else
{
MessageDef
*
message
=
itti_alloc_new_message
(
isCu
?
TASK_CUCP_E1
:
TASK_CUUP_E1
,
0
,
SCTP_DATA_REQ
);
sctp_data_req_t
*
s
=
&
message
->
ittiMsg
.
sctp_data_req
;
s
->
assoc_id
=
e1ap_assoc_id
(
isCu
,
instance
);
s
->
buffer
=
buffer
;
s
->
buffer_length
=
encoded
;
s
->
stream
=
stream
;
LOG_I
(
E1AP
,
"%s: Sending ITTI message to SCTP Task
\n
"
,
func
);
itti_send_msg_to_task
(
TASK_SCTP
,
instance
,
message
);
}
return
encoded
;
}
void
e1ap_itti_send_sctp_close_association
(
bool
isCu
,
instance_t
instance
)
{
MessageDef
*
message
=
itti_alloc_new_message
(
TASK_S1AP
,
0
,
SCTP_CLOSE_ASSOCIATION
);
sctp_close_association_t
*
sctp_close_association
=
&
message
->
ittiMsg
.
sctp_close_association
;
...
...
@@ -148,6 +116,7 @@ int e1ap_send_RESET(bool isCu, instance_t instance, E1AP_Reset_t *Reset) {
int
e1ap_send_RESET_ACKNOWLEDGE
(
instance_t
instance
,
E1AP_Reset_t
*
Reset
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1ap_handle_RESET
(
instance_t
instance
,
...
...
@@ -155,6 +124,7 @@ int e1ap_handle_RESET(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1ap_handle_RESET_ACKNOWLEDGE
(
instance_t
instance
,
...
...
@@ -162,6 +132,7 @@ int e1ap_handle_RESET_ACKNOWLEDGE(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
/*
...
...
@@ -172,10 +143,12 @@ int e1ap_handle_ERROR_INDICATION(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1ap_send_ERROR_INDICATION
(
instance_t
instance
,
E1AP_ErrorIndication_t
*
ErrorIndication
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
...
...
@@ -185,14 +158,14 @@ int e1ap_send_ERROR_INDICATION(instance_t instance, E1AP_ErrorIndication_t *Erro
int
e1apCUUP_send_SETUP_REQUEST
(
instance_t
instance
)
{
E1AP_E1AP_PDU_t
pdu
=
{
0
};
e1ap_setup_req_t
*
setup
=
&
getCxt
(
UPtype
,
instance
)
->
setupReq
;
e1ap_setup_req_t
*
setup
=
&
getCxt
E1
(
UPtype
,
instance
)
->
setupReq
;
/* Create */
/* 0. pdu Type */
pdu
.
present
=
E1AP_E1AP_PDU_PR_initiatingMessage
;
asn1cCalloc
(
pdu
.
choice
.
initiatingMessage
,
initMsg
);
initMsg
->
procedureCode
=
E1AP_ProcedureCode_id_gNB_CU_UP_E1Setup
;
initMsg
->
criticality
=
E1AP_Criticality_reject
;
initMsg
->
present
=
E1AP_InitiatingMessage__value_PR_GNB_CU_UP_E1SetupRequest
;
initMsg
->
value
.
present
=
E1AP_InitiatingMessage__value_PR_GNB_CU_UP_E1SetupRequest
;
E1AP_GNB_CU_UP_E1SetupRequest_t
*
e1SetupUP
=
&
initMsg
->
value
.
choice
.
GNB_CU_UP_E1SetupRequest
;
/* mandatory */
/* c1. Transaction ID (integer value) */
...
...
@@ -212,27 +185,28 @@ int e1apCUUP_send_SETUP_REQUEST(instance_t instance) {
/* mandatory */
/* c4. CN Support */
asn1cSequenceAdd
(
e1SetupUP
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ieC4
);
ie
c
4
->
id
=
E1AP_ProtocolIE_ID_id_CNSupport
;
ie
C
4
->
id
=
E1AP_ProtocolIE_ID_id_CNSupport
;
ieC4
->
criticality
=
E1AP_Criticality_reject
;
ie
c
4
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupRequestIEs__value_PR_CNSupport
;
ie
c
4
->
value
.
choice
.
CNSupport
=
setup
->
cn_support
;
ie
C
4
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupRequestIEs__value_PR_CNSupport
;
ie
C
4
->
value
.
choice
.
CNSupport
=
setup
->
cn_support
;
/* mandatory */
/* c5. Supported PLMNs */
asn1cSequenceAdd
(
e1SetupUP
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ieC5
);
ie
c
5
->
id
=
E1AP_ProtocolIE_ID_id_SupportedPLMNs
;
ie
c
5
->
criticality
=
E1AP_Criticality_reject
;
ie
c
5
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupRequestIEs__value_PR_SupportedPLMNs_List
;
ie
C
5
->
id
=
E1AP_ProtocolIE_ID_id_SupportedPLMNs
;
ie
C
5
->
criticality
=
E1AP_Criticality_reject
;
ie
C
5
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupRequestIEs__value_PR_SupportedPLMNs_List
;
int
numSupportedPLMNs
=
setup
->
supported_plmns
;
for
(
int
i
=
0
;
i
<
numSupportedPLMNs
;
i
++
)
{
asn1cSequenceAdd
(
ie
c
5
->
value
.
choice
.
SupportedPLMNs_List
.
list
,
E1AP_SupportedPLMNs_Item_t
,
supportedPLMN
);
asn1cSequenceAdd
(
ie
C
5
->
value
.
choice
.
SupportedPLMNs_List
.
list
,
E1AP_SupportedPLMNs_Item_t
,
supportedPLMN
);
/* 5.1 PLMN Identity */
MCC_MNC_TO_PLMNID
(
setup
->
plmns
[
i
].
mcc
,
setup
->
plmns
[
i
].
mnc
,
setup
->
plmns
[
i
].
mnc_digit_length
);
MCC_MNC_TO_PLMNID
(
setup
->
plmns
[
i
].
mcc
,
setup
->
plmns
[
i
].
mnc
,
setup
->
plmns
[
i
].
mnc_digit_length
,
&
supportedPLMN
->
pLMN_Identity
);
}
e1ap_encode_send
(
0
,
instance
,
pdu
,
0
,
__func__
);
e1ap_encode_send
(
0
,
instance
,
&
pdu
,
0
,
__func__
);
return
0
;
}
int
e1apCUCP_send_SETUP_RESPONSE
(
instance_t
instance
,
...
...
@@ -248,16 +222,18 @@ int e1apCUCP_send_SETUP_RESPONSE(instance_t instance,
E1AP_GNB_CU_UP_E1SetupResponse_t
*
out
=
&
pdu
.
choice
.
successfulOutcome
->
value
.
choice
.
GNB_CU_UP_E1SetupResponse
;
/* mandatory */
/* c1. Transaction ID (integer value) */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_E1SetupResponseIEs
,
ieC1
);
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_E1SetupResponseIEs
_t
,
ieC1
);
ieC1
->
id
=
E1AP_ProtocolIE_ID_id_TransactionID
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupResponseIEs__value_PR_TransactionID
;
ieC1
->
value
.
choice
.
TransactionID
=
e1ap_setup_resp
->
transac_id
;
e1ap_encode_send
(
0
,
instance
,
pdu
,
0
,
__func__
);
e1ap_encode_send
(
0
,
instance
,
&
pdu
,
0
,
__func__
);
return
0
;
}
int
e1apCUCP_send_SETUP_FAILURE
(
e1ap_setup_resp_t
*
e1ap_setup_resp
)
{
int
e1apCUCP_send_SETUP_FAILURE
(
instance_t
instance
,
e1ap_setup_resp_t
*
e1ap_setup_resp
)
{
E1AP_E1AP_PDU_t
pdu
=
{
0
};
/* Create */
/* 0. pdu Type */
...
...
@@ -266,56 +242,56 @@ int e1apCUCP_send_SETUP_FAILURE(e1ap_setup_resp_t *e1ap_setup_resp) {
initMsg
->
procedureCode
=
E1AP_ProcedureCode_id_gNB_CU_UP_E1Setup
;
initMsg
->
criticality
=
E1AP_Criticality_reject
;
initMsg
->
value
.
present
=
E1AP_UnsuccessfulOutcome__value_PR_GNB_CU_UP_E1SetupFailure
;
E1AP_GNB_CU_UP_E1SetupFailure_t
*
out
=
&
pdu
.
choice
.
successfulOutcome
->
value
.
choice
.
GNB_CU_UP_E1SetupFailure
;
E1AP_GNB_CU_UP_E1SetupFailure_t
*
out
=
&
pdu
.
choice
.
un
successfulOutcome
->
value
.
choice
.
GNB_CU_UP_E1SetupFailure
;
/* mandatory */
/* c1. Transaction ID (integer value) */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_E1SetupFailureIEs
,
ieC1
);
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_E1SetupFailureIEs
_t
,
ieC1
);
ieC1
->
id
=
E1AP_ProtocolIE_ID_id_TransactionID
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupResponseIEs__value_PR_TransactionID
;
ieC1
->
value
.
choice
.
TransactionID
=
e1ap_setup_resp
->
transac_id
;
/* mandatory */
/* c2. cause (integer value) */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_E1SetupFailureIEs
,
ieC2
);
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_E1SetupFailureIEs
_t
,
ieC2
);
ieC2
->
id
=
E1AP_ProtocolIE_ID_id_Cause
;
ieC2
->
criticality
=
E1AP_Criticality_ignore
;
ieC2
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupFailureIEs__value_PR_Cause
;
ieC2
->
value
.
choice
.
Cause
.
present
=
E1AP_Cause_PR_radioNetwork
;
//choose this accordingly
ieC2
->
value
.
choice
.
Cause
.
choice
.
ra
t
ioNetwork
=
E1AP_CauseRadioNetwork_unspecified
;
ieC2
->
value
.
choice
.
Cause
.
choice
.
ra
d
ioNetwork
=
E1AP_CauseRadioNetwork_unspecified
;
e1ap_encode_send
(
0
,
instance
,
pdu
,
0
,
__func__
);
e1ap_encode_send
(
0
,
instance
,
&
pdu
,
0
,
__func__
);
return
0
;
}
int
e1apCUCP_handle_SETUP_REQUEST
(
instance_t
instance
,
uint32_t
assoc_id
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
*
ie
;
DevAssert
(
pdu
!=
NULL
);
E1AP_GNB_CU_UP_E1SetupRequest_t
*
in
=
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
GNB_CU_UP_E1SetupRequest
;
E1AP_GNB_CU_UP_E1SetupRequest_t
*
in
=
&
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
GNB_CU_UP_E1SetupRequest
;
e1ap_setup_req_t
*
req
=
&
getCxt
(
CPtype
,
instance
)
->
setupReq
;
e1ap_setup_req_t
*
req
=
&
getCxt
E1
(
CPtype
,
instance
)
->
setupReq
;
/* assoc_id */
req
->
assoc_id
=
assoc_id
;
/* req->assoc_id = assoc_id; */
/* transac_id */
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ie
,
in
,
E1AP_ProtocolIE_ID_id_TransactionID
,
true
);
asn_INTEGER2ulong
(
&
ie
->
value
.
choice
.
TransactionID
,
&
req
->
transac_id
)
;
LOG_D
(
E1AP
,
"gNB CU UP E1 setup request transaction ID: %d
\n
"
,
req
->
transac_id
);
req
->
transac_id
=
ie
->
value
.
choice
.
TransactionID
;
LOG_D
(
E1AP
,
"gNB CU UP E1 setup request transaction ID: %
l
d
\n
"
,
req
->
transac_id
);
/* gNB CU UP ID */
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ie
,
in
,
E1AP_ProtocolIE_ID_id_gNB_CU_UP_ID
,
true
);
asn_INTEGER2ulong
(
&
ie
->
value
.
choice
.
GNB_CU_UP_ID
,
&
req
->
gNB_cu_up_id
);
LOG_D
(
E1AP
,
"gNB CU UP ID: %d
\n
"
,
req
->
gNB_cu_up_id
);
LOG_D
(
E1AP
,
"gNB CU UP ID: %
l
d
\n
"
,
req
->
gNB_cu_up_id
);
/* CN Support */
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ie
,
in
,
E1AP_ProtocolIE_ID_id_CNSupport
,
true
);
asn_INTEGER2ulong
(
&
ie
->
value
.
choice
.
GNB_CU_UP_ID
,
&
req
->
cn_support
)
;
LOG_D
(
E1AP
,
"E1ap CN support: %d
\n
"
,
req
->
cn_support
);
req
->
cn_support
=
ie
->
value
.
choice
.
CNSupport
;
LOG_D
(
E1AP
,
"E1ap CN support: %
l
d
\n
"
,
req
->
cn_support
);
/* Supported PLMNs */
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ie
,
in
,
...
...
@@ -327,16 +303,16 @@ int e1apCUCP_handle_SETUP_REQUEST(instance_t instance,
E1AP_SupportedPLMNs_Item_t
*
supported_plmn_item
=
(
E1AP_SupportedPLMNs_Item_t
*
)(
ie
->
value
.
choice
.
SupportedPLMNs_List
.
list
.
array
[
i
]);
/* PLMN Identity */
PLMN
_TO_MCC_MNC
(
&
supported_plmn_item
.
pLMN_Identity
,
PLMN
ID_TO_MCC_MNC
(
&
supported_plmn_item
->
pLMN_Identity
,
req
->
plmns
[
i
].
mcc
,
req
->
plmns
[
i
].
mnc
,
req
->
plmns
[
i
].
mnc_digit_length
);
OCTET_STRING_TO_INT16
(
supported_plmn_item
.
pLMN_Identity
,
req
->
plmns
[
i
].
id
);
LOG_D
(
E1AP
,
"MCC: %d
\n
MNC: %d
\n
"
,
req
->
plmns
[
i
].
mcc
,
req
->
plmns
[
i
].
mnc
);
}
/* Create ITTI message and send to queue */
return
0
;
}
int
e1apCUUP_handle_SETUP_RESPONSE
(
instance_t
instance
,
...
...
@@ -351,25 +327,26 @@ int e1apCUUP_handle_SETUP_RESPONSE(instance_t instance,
AssertFatal
(
pdu
->
choice
.
successfulOutcome
->
value
.
present
==
E1AP_SuccessfulOutcome__value_PR_GNB_CU_UP_E1SetupResponse
,
"pdu->choice.successfulOutcome->value.present != E1AP_SuccessfulOutcome__value_PR_GNB_CU_UP_E1SetupResponse
\n
"
);
E1AP_GNB_CU_UP_E1SetupResponse_t
*
in
=
&
pdu
.
choice
.
successfulOutcome
->
value
.
choice
.
GNB_CU_UP_E1SetupResponse
;
E1AP_GNB_CU_UP_E1SetupResponseIEs
*
ie
;
E1AP_GNB_CU_UP_E1SetupResponse_t
*
in
=
&
pdu
->
choice
.
successfulOutcome
->
value
.
choice
.
GNB_CU_UP_E1SetupResponse
;
E1AP_GNB_CU_UP_E1SetupResponseIEs
_t
*
ie
;
/* transac_id */
int
transaction_id
;
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupResponseIEs
,
ie
,
in
,
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupResponseIEs
_t
,
ie
,
in
,
E1AP_ProtocolIE_ID_id_TransactionID
,
true
);
asn_INTEGER2ulong
(
&
ie
->
value
.
choice
.
TransactionID
,
&
transaction_id
)
;
transaction_id
=
ie
->
value
.
choice
.
TransactionID
;
LOG_D
(
E1AP
,
"gNB CU UP E1 setup response transaction ID: %d
\n
"
,
transaction_id
);
/* do the required processing */
return
0
;
}
int
e1apCUUP_handle_SETUP_FAILURE
(
instance_t
instance
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_GNB_CU_UP_E1SetupFailureIEs_t
*
ie
;
DevAssert
(
pdu
!=
NULL
);
E1AP_GNB_CU_UP_E1SetupFailure_t
*
in
=
pdu
->
choice
.
unsuccessfulOutcome
->
value
.
choice
.
GNB_CU_UP_E1SetupFailure
;
E1AP_GNB_CU_UP_E1SetupFailure_t
*
in
=
&
pdu
->
choice
.
unsuccessfulOutcome
->
value
.
choice
.
GNB_CU_UP_E1SetupFailure
;
/* Transaction ID */
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupFailureIEs_t
,
ie
,
in
,
E1AP_ProtocolIE_ID_id_TransactionID
,
true
);
...
...
@@ -393,25 +370,25 @@ int e1apCUUP_send_CONFIGURATION_UPDATE(instance_t instance) {
msg
->
procedureCode
=
E1AP_ProcedureCode_id_gNB_CU_UP_ConfigurationUpdate
;
msg
->
criticality
=
E1AP_Criticality_reject
;
msg
->
value
.
present
=
E1AP_InitiatingMessage__value_PR_GNB_CU_UP_ConfigurationUpdate
;
E1AP_GNB_CU_UP_ConfigurationUpdate_t
*
out
=
&
pdu
.
choice
.
successfulOutcom
e
->
value
.
choice
.
GNB_CU_UP_ConfigurationUpdate
;
E1AP_GNB_CU_UP_ConfigurationUpdate_t
*
out
=
&
pdu
.
choice
.
initiatingMessag
e
->
value
.
choice
.
GNB_CU_UP_ConfigurationUpdate
;
/* mandatory */
/* c1. Transaction ID (integer value) */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_ConfigurationUpdateIEs_t
,
ieC1
);
ieC1
->
id
=
E1AP_ProtocolIE_ID_id_TransactionID
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
value
.
present
=
E1AP_GNB_CU_UP_ConfigurationUpdateIEs__value_PR_TransactionID
;
ieC1
->
value
.
choice
.
TransactionID
=
//get this from stored transaction IDs in CU
ieC1
->
value
.
choice
.
TransactionID
=
0
;
//get this from stored transaction IDs in CU
/* mandatory */
/* c2. Supported PLMNs */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_ConfigurationUpdateIEs_t
,
ieC2
);
ie
c
2
->
id
=
E1AP_ProtocolIE_ID_id_SupportedPLMNs
;
ie
c
2
->
criticality
=
E1AP_Criticality_reject
;
ie
c
2
->
value
.
present
=
E1AP_GNB_CU_UP_ConfigurationUpdateIEs__value_PR_SupportedPLMNs_List
;
ie
C
2
->
id
=
E1AP_ProtocolIE_ID_id_SupportedPLMNs
;
ie
C
2
->
criticality
=
E1AP_Criticality_reject
;
ie
C
2
->
value
.
present
=
E1AP_GNB_CU_UP_ConfigurationUpdateIEs__value_PR_SupportedPLMNs_List
;
int
numSupportedPLMNs
=
1
;
for
(
int
i
=
0
;
i
<
numSupportedPLMNs
;
i
++
)
{
asn1cSequenceAdd
(
ie
c
2
->
value
.
choice
.
SupportedPLMNs_List
.
list
,
E1AP_SupportedPLMNs_Item_t
,
supportedPLMN
);
asn1cSequenceAdd
(
ie
C
2
->
value
.
choice
.
SupportedPLMNs_List
.
list
,
E1AP_SupportedPLMNs_Item_t
,
supportedPLMN
);
/* 5.1 PLMN Identity */
OCTET_STRING_fromBuf
(
&
supportedPLMN
->
pLMN_Identity
,
"OAI"
,
strlen
(
"OAI"
));
}
...
...
@@ -419,39 +396,43 @@ int e1apCUUP_send_CONFIGURATION_UPDATE(instance_t instance) {
/* mandatory */
/* c3. TNLA to remove list */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_ConfigurationUpdateIEs_t
,
ieC3
);
ie
c
3
->
id
=
E1AP_ProtocolIE_ID_id_GNB_CU_UP_TNLA_To_Remove_List
;
ie
c
3
->
criticality
=
E1AP_Criticality_reject
;
ie
c
3
->
value
.
present
=
E1AP_GNB_CU_UP_ConfigurationUpdateIEs__value_PR_GNB_CU_UP_TNLA_To_Remove_List
;
ie
C
3
->
id
=
E1AP_ProtocolIE_ID_id_GNB_CU_UP_TNLA_To_Remove_List
;
ie
C
3
->
criticality
=
E1AP_Criticality_reject
;
ie
C
3
->
value
.
present
=
E1AP_GNB_CU_UP_ConfigurationUpdateIEs__value_PR_GNB_CU_UP_TNLA_To_Remove_List
;
int
numTNLAtoRemoveList
=
1
;
for
(
int
i
=
0
;
i
<
numTNLAtoRemoveList
;
i
++
)
{
asn1cSequenceAdd
(
ie
c
2
->
value
.
choice
.
GNB_CU_UP_TNLA_To_Remove_List
.
list
,
E1AP_GNB_CU_UP_TNLA_To_Remove_Item_t
,
TNLAtoRemove
);
asn1cSequenceAdd
(
ie
C
2
->
value
.
choice
.
GNB_CU_UP_TNLA_To_Remove_List
.
list
,
E1AP_GNB_CU_UP_TNLA_To_Remove_Item_t
,
TNLAtoRemove
);
TNLAtoRemove
->
tNLAssociationTransportLayerAddress
.
present
=
E1AP_CP_TNL_Information_PR_endpoint_IP_Address
;
T
NLAtoRemove
->
tNLAssociationTransportLayerAddress
.
choice
.
endpoint_IP_Address
=
// TODO: include the ip
T
RANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING
(
1234
,
&
TNLAtoRemove
->
tNLAssociationTransportLayerAddress
.
choice
.
endpoint_IP_Address
);
// TODO: correct me
}
e1ap_encode_send
(
0
,
instance
,
pdu
,
0
,
__func__
);
e1ap_encode_send
(
0
,
instance
,
&
pdu
,
0
,
__func__
);
return
0
;
}
int
e1apCUCP_send_gNB_DU_CONFIGURATION_FAILURE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUCP_send_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUCP_handle_CONFIGURATION_UPDATE
(
instance_t
instance
,
uint32_t
assoc_id
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
/*
E1AP_GNB_CU_UP_E1SetupRequestIEs_t *ie;
DevAssert(pdu != NULL);
E1AP_GNB_CU_UP_E1SetupRequest_t
*
in
=
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
GNB_CU_UP_E1SetupRequest
;
E1AP_GNB_CU_UP_E1SetupRequest_t *in = &pdu->choice.initiatingMessage->value.choice.GNB_CU_UP_E1SetupRequest;
*/
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUUP_handle_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE
(
instance_t
instance
,
...
...
@@ -459,6 +440,7 @@ int e1apCUUP_handle_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUUP_handle_gNB_DU_CONFIGURATION_FAILURE
(
instance_t
instance
,
...
...
@@ -466,6 +448,7 @@ int e1apCUUP_handle_gNB_DU_CONFIGURATION_FAILURE(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
/*
...
...
@@ -474,10 +457,12 @@ int e1apCUUP_handle_gNB_DU_CONFIGURATION_FAILURE(instance_t instance,
int
e1ap_send_RELEASE_REQUEST
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1ap_send_RELEASE_ACKNOWLEDGE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1ap_handle_RELEASE_REQUEST
(
instance_t
instance
,
...
...
@@ -485,6 +470,7 @@ int e1ap_handle_RELEASE_REQUEST(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1ap_handle_RELEASE_ACKNOWLEDGE
(
instance_t
instance
,
...
...
@@ -492,6 +478,7 @@ int e1ap_handle_RELEASE_ACKNOWLEDGE(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
/*
...
...
@@ -499,7 +486,7 @@ int e1ap_handle_RELEASE_ACKNOWLEDGE(instance_t instance,
*/
int
e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST
(
instance_t
instance
,
e1ap_bearer_setup_
t
bearerCxt
)
{
e1ap_bearer_setup_
req_t
*
bearerCxt
)
{
E1AP_E1AP_PDU_t
pdu
=
{
0
};
/* Create */
/* 0. pdu Type */
...
...
@@ -537,8 +524,7 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
ieC4
->
id
=
E1AP_ProtocolIE_ID_id_Serving_PLMN
;
ieC4
->
criticality
=
E1AP_Criticality_ignore
;
ieC4
->
value
.
present
=
E1AP_BearerContextSetupRequestIEs__value_PR_PLMN_Identity
;
uint64_t
servingPLMNId
=
getServingPlmn
();
// TODO: define this
OCTET_STRING_fromBuf
(
&
ieC4
->
value
.
choice
.
PLMN_Identity
,
servingPLMNId
);
MCC_MNC_TO_PLMNID
(
bearerCxt
->
servingPLMNid
.
mcc
,
bearerCxt
->
servingPLMNid
.
mnc
,
bearerCxt
->
servingPLMNid
.
mnc_digit_length
,
&
ieC4
->
value
.
choice
.
PLMN_Identity
);
/* mandatory */
/* Activity Notification Level */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextSetupRequestIEs_t
,
ieC5
);
...
...
@@ -552,25 +538,25 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
ieC6
->
id
=
E1AP_ProtocolIE_ID_id_System_BearerContextSetupRequest
;
ieC6
->
criticality
=
E1AP_Criticality_reject
;
if
(
0
)
{
// EUTRAN
ieC6
->
System_BearerContextSetupRequest
.
present
=
E1AP_System_BearerContextSetupRequest_PR_e_UTRAN_BearerContextSetupRequest
;
ieC6
->
value
.
choice
.
System_BearerContextSetupRequest
.
present
=
E1AP_System_BearerContextSetupRequest_PR_e_UTRAN_BearerContextSetupRequest
;
E1AP_EUTRAN_BearerContextSetupRequest_t
*
msgEUTRAN
=
calloc
(
1
,
sizeof
(
E1AP_EUTRAN_BearerContextSetupRequest_t
));
ieC6
->
System_BearerContextSetupRequest
.
choice
.
e_UTRAN_BearerContextSetupRequest
=
(
E1AP_ProtocolIE_Container
*
)
msgEUTRAN
;
msgEUTRAN
.
id
=
E1AP_ProtocolIE_ID_id_DRB_To_Setup_List_EUTRAN
;
ieC6
->
value
.
choice
.
System_BearerContextSetupRequest
.
choice
.
e_UTRAN_BearerContextSetupRequest
=
(
struct
E1AP_ProtocolIE_Container
*
)
msgEUTRAN
;
msgEUTRAN
->
id
=
E1AP_ProtocolIE_ID_id_DRB_To_Setup_List_EUTRAN
;
msgEUTRAN
->
value
.
present
=
E1AP_EUTRAN_BearerContextSetupRequest__value_PR_DRB_To_Setup_List_EUTRAN
;
E1AP_DRB_To_Setup_List_EUTRAN_t
*
drb2Setup
=
&
msgEUTRAN
->
value
.
choice
.
DRB_To_Setup_List_EUTRAN
;
for
(
drb_to_setup_t
*
i
=
bearerCxt
->
DRBList
;
i
<
bearerCxt
->
DRBList
+
bearerCxt
->
numDRBs
;
i
++
)
{
asn1cSequenceAdd
(
drb2Setup
->
list
,
E1AP_DRB_To_Setup_Item_EUTRAN
,
ieC6_1
);
asn1cSequenceAdd
(
drb2Setup
->
list
,
E1AP_DRB_To_Setup_Item_EUTRAN
_t
,
ieC6_1
);
ieC6_1
->
dRB_ID
=
i
->
drbId
;
ieC6_1
->
pD
PC
_Configuration
.
pDCP_SN_Size_UL
=
i
->
pDCP_SN_Size_UL
;
ieC6_1
->
pD
PC
_Configuration
.
pDCP_SN_Size_DL
=
i
->
pDCP_SN_Size_DL
;
ieC6_1
->
pD
PC
_Configuration
.
rLC_Mode
=
i
->
rLC_Mode
;
ieC6_1
->
pD
CP
_Configuration
.
pDCP_SN_Size_UL
=
i
->
pDCP_SN_Size_UL
;
ieC6_1
->
pD
CP
_Configuration
.
pDCP_SN_Size_DL
=
i
->
pDCP_SN_Size_DL
;
ieC6_1
->
pD
CP
_Configuration
.
rLC_Mode
=
i
->
rLC_Mode
;
ieC6_1
->
eUTRAN_QoS
.
qCI
=
i
->
qci
;
ieC6_1
->
eUTRAN_QoS
.
eUTRANallocationAndRetentionPriority
.
priorityLevel
=
i
->
qosPriorityLevel
;
ieC6_1
->
eUTRAN_QoS
.
eUTRANallocationAndRetentionPriority
.
pre_emptionCapability
=
i
->
pre
E
mptionCapability
;
ieC6_1
->
eUTRAN_QoS
.
eUTRANallocationAndRetentionPriority
.
pre_emptionVulnerability
=
i
->
pre
E
mptionVulnerability
;
ieC6_1
->
eUTRAN_QoS
.
eUTRANallocationAndRetentionPriority
.
pre_emptionCapability
=
i
->
pre
_e
mptionCapability
;
ieC6_1
->
eUTRAN_QoS
.
eUTRANallocationAndRetentionPriority
.
pre_emptionVulnerability
=
i
->
pre
_e
mptionVulnerability
;
ieC6_1
->
s1_UL_UP_TNL_Information
.
present
=
E1AP_UP_TNL_Information_PR_gTPTunnel
;
asn1cCalloc
(
ieC6_1
->
s1_UL_UP_TNL_Information
.
choice
.
gTPTunnel
,
gTPTunnel
);
...
...
@@ -578,22 +564,22 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
INT32_TO_OCTET_STRING
(
i
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
for
(
cell_group_t
*
j
=
i
->
cellGroupList
;
j
<
i
->
cellGroupList
+
i
->
numCellGroups
;
j
++
)
{
asn1cSequenceAdd
(
ieC6_1
->
cell_Group_Information
.
list
,
E1AP_Cell_Group_Information_Item
,
ieC6_1_1
);
asn1cSequenceAdd
(
ieC6_1
->
cell_Group_Information
.
list
,
E1AP_Cell_Group_Information_Item
_t
,
ieC6_1_1
);
ieC6_1_1
->
cell_Group_ID
=
j
->
id
;
}
}
}
else
{
/* mandatory */
/* */
ieC6
->
System_BearerContextSetupRequest
.
present
=
E1AP_System_BearerContextSetupRequest_PR_nG_RAN_BearerContextSetupRequest
;
ieC6
->
value
.
choice
.
System_BearerContextSetupRequest
.
present
=
E1AP_System_BearerContextSetupRequest_PR_nG_RAN_BearerContextSetupRequest
;
E1AP_NG_RAN_BearerContextSetupRequest_t
*
msgNGRAN
=
calloc
(
1
,
sizeof
(
E1AP_NG_RAN_BearerContextSetupRequest_t
));
ieC6
->
System_BearerContextSetupRequest
.
choice
.
nG_RAN_BearerContextSetupRequest
=
(
E1AP_ProtocolIE_Container
*
)
msgNGRAN
;
ieC6
->
value
.
choice
.
System_BearerContextSetupRequest
.
choice
.
nG_RAN_BearerContextSetupRequest
=
(
struct
E1AP_ProtocolIE_Container
*
)
msgNGRAN
;
msgNGRAN
->
id
=
E1AP_ProtocolIE_ID_id_PDU_Session_Resource_To_Setup_List
;
msgNGRAN
->
value
.
present
=
E1AP_NG_RAN_BearerContextSetupRequest__value_PR_PDU_Session_Resource_To_Setup_List
;
E1AP_PDU_Session_Resource_To_Setup_List_t
*
pdu2Setup
=
&
msgNGRAN
->
value
.
choice
.
PDU_Session_Resource_To_Setup_List
;
for
(
pdu_session_to_setup_t
*
i
=
bearerCxt
->
pduSession
;
i
<
bearerCxt
->
pduSession
+
bearerCxt
->
numPDUSessions
;
i
++
)
{
asn1cSequenceAdd
(
pdu2Setup
->
list
,
E1AP_PDU_Session_Resource_To_Setup_Item
,
ieC6_1
);
asn1cSequenceAdd
(
pdu2Setup
->
list
,
E1AP_PDU_Session_Resource_To_Setup_Item
_t
,
ieC6_1
);
ieC6_1
->
pDU_Session_ID
=
i
->
sessionId
;
ieC6_1
->
pDU_Session_Type
=
i
->
sessionType
;
...
...
@@ -609,20 +595,20 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
INT32_TO_OCTET_STRING
(
i
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
for
(
DRB_nGRAN_to_setup_t
*
j
=
i
->
DRBnGRanList
;
j
<
i
->
DRBnGRanList
+
i
->
numDRB2Setup
;
j
++
)
{
asn1cSequenceAdd
(
ieC6_1
->
dRB_To_Setup_List_NG_RAN
.
list
,
E1AP_DRB_To_Setup_Item_NG_RAN
,
ieC6_1_1
);
asn1cSequenceAdd
(
ieC6_1
->
dRB_To_Setup_List_NG_RAN
.
list
,
E1AP_DRB_To_Setup_Item_NG_RAN
_t
,
ieC6_1_1
);
ieC6_1_1
->
dRB_ID
=
j
->
id
;
ieC6_1_1
->
sDAP_Configuration
.
defaultDRB
=
j
->
defaultDRB
;
ieC6_1_1
->
sDAP_Configuration
.
sDAP_Header_UL
=
j
->
sDAP_Header_UL
;
ieC6_1_1
->
sDAP_Configuration
.
sDAP_Header_DL
=
j
->
sDAP_Header_DL
;
for
(
cell_group_t
*
k
=
j
->
cellGroupList
;
k
<
j
->
cellGroupList
+
numCellGroups
;
k
++
)
{
asn1cSequenceAdd
(
ieC6_1_1
->
cell_Group_Information
.
list
,
E1AP_Cell_Group_Information_Item
,
ieC6_1_1_1
);
for
(
cell_group_t
*
k
=
j
->
cellGroupList
;
k
<
j
->
cellGroupList
+
j
->
numCellGroups
;
k
++
)
{
asn1cSequenceAdd
(
ieC6_1_1
->
cell_Group_Information
.
list
,
E1AP_Cell_Group_Information_Item
_t
,
ieC6_1_1_1
);
ieC6_1_1_1
->
cell_Group_ID
=
k
->
id
;
}
for
(
qos_flow_to_setup_t
*
k
=
j
->
qosFlows
;
k
<
j
->
qosFlows
+
j
->
numQosFlow2Setup
;
k
++
)
{
asn1cSequenceAdd
(
ieC6_1_1
->
qos_flow_Information_To_Be_Setup
,
E1AP_QoS_Flow_QoS_Parameter_Item
,
ieC6_1_1_1
);
asn1cSequenceAdd
(
ieC6_1_1
->
qos_flow_Information_To_Be_Setup
,
E1AP_QoS_Flow_QoS_Parameter_Item
_t
,
ieC6_1_1_1
);
ieC6_1_1_1
->
qoS_Flow_Identifier
=
k
->
id
;
if
(
0
)
{
// non Dynamic 5QI
...
...
@@ -646,7 +632,8 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
}
}
e1ap_encode_send
(
0
,
instance
,
pdu
,
0
,
__func__
);
e1ap_encode_send
(
0
,
instance
,
&
pdu
,
0
,
__func__
);
return
0
;
}
int
e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE
(
instance_t
instance
,
...
...
@@ -655,49 +642,49 @@ int e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(instance_t instance,
/* Create */
/* 0. pdu Type */
pdu
.
present
=
E1AP_E1AP_PDU_PR_successfulOutcome
;
asn1cCalloc
(
pdu
.
choice
.
initiatingMessag
e
,
msg
);
asn1cCalloc
(
pdu
.
choice
.
successfulOutcom
e
,
msg
);
msg
->
procedureCode
=
E1AP_ProcedureCode_id_bearerContextSetup
;
msg
->
criticality
=
E1AP_Criticality_reject
;
msg
->
value
.
present
=
E1AP_SuccessfulOutcome__value_PR_BearerContextSetupResponse
;
E1AP_BearerContextSetupRe
quest_t
*
out
=
&
pdu
.
choice
.
initiatingMessag
e
->
value
.
choice
.
BearerContextSetupResponse
;
E1AP_BearerContextSetupRe
sponse_t
*
out
=
&
pdu
.
choice
.
successfulOutcom
e
->
value
.
choice
.
BearerContextSetupResponse
;
/* mandatory */
/* c1. gNB-CU-CP UE E1AP ID */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextSetupResponseIEs
,
ieC1
);
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextSetupResponseIEs
_t
,
ieC1
);
ieC1
->
id
=
E1AP_ProtocolIE_ID_id_gNB_CU_CP_UE_E1AP_ID
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
value
.
present
=
E1AP_BearerContextSetupResponseIEs__value_PR_GNB_CU_CP_UE_E1AP_ID
;
ieC1
->
value
.
choice
.
GNB_CU_CP_UE_E1AP_ID
=
resp
->
gNB_cu_cp_ue_id
;
/* mandatory */
/* c2. gNB-CU-UP UE E1AP ID */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextSetupResponseIEs
,
ieC2
);
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextSetupResponseIEs
_t
,
ieC2
);
ieC2
->
id
=
E1AP_ProtocolIE_ID_id_gNB_CU_UP_UE_E1AP_ID
;
ieC2
->
criticality
=
E1AP_Criticality_reject
;
ieC2
->
value
.
present
=
E1AP_BearerContextSetupResponseIEs__value_PR_GNB_CU_UP_UE_E1AP_ID
;
ieC1
->
value
.
choice
.
GNB_CU_CP_UE_E1AP_ID
=
resp
->
gNB_cu_up_ue_id
;
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextSetupResponseIEs
,
ieC3
);
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextSetupResponseIEs
_t
,
ieC3
);
ieC3
->
id
=
E1AP_ProtocolIE_ID_id_System_BearerContextSetupRequest
;
ieC3
->
criticality
=
E1AP_Criticality_reject
;
if
(
0
)
{
// EUTRAN
ieC3
->
System_BearerContextSetupResponse
.
present
=
E1AP_System_BearerContextSetupResponse_PR_e_UTRAN_BearerContextSetupResponse
;
ieC3
->
value
.
choice
.
System_BearerContextSetupResponse
.
present
=
E1AP_System_BearerContextSetupResponse_PR_e_UTRAN_BearerContextSetupResponse
;
E1AP_EUTRAN_BearerContextSetupResponse_t
*
msgEUTRAN
=
calloc
(
1
,
sizeof
(
E1AP_EUTRAN_BearerContextSetupResponse_t
));
ieC3
->
System_BearerContextSetupResponse
.
choice
.
e_UTRAN_BearerContextSetupResponse
=
(
E1AP_ProtocolIE_Container
*
)
msgEUTRAN
;
msgEUTRAN
.
id
=
E1AP_ProtocolIE_ID_id_DRB_Setup_List_EUTRAN
;
msgEUTRAN
.
criticality
=
E1AP_Criticality_reject
;
ieC3
->
value
.
choice
.
System_BearerContextSetupResponse
.
choice
.
e_UTRAN_BearerContextSetupResponse
=
(
struct
E1AP_ProtocolIE_Container
*
)
msgEUTRAN
;
msgEUTRAN
->
id
=
E1AP_ProtocolIE_ID_id_DRB_Setup_List_EUTRAN
;
msgEUTRAN
->
criticality
=
E1AP_Criticality_reject
;
msgEUTRAN
->
value
.
present
=
E1AP_EUTRAN_BearerContextSetupResponse__value_PR_DRB_Setup_List_EUTRAN
;
E1AP_DRB_Setup_List_EUTRAN_t
*
drbSetup
=
&
msgEUTRAN
->
value
.
choice
.
DRB_Setup_List_EUTRAN
;
for
(
drb_setup_t
*
i
=
resp
->
DRBList
;
i
<
resp
->
DRBList
+
resp
->
numDRBs
;
i
++
)
{
asn1cSequenceAdd
(
drbSetup
->
list
,
E1AP_DRB_Setup_Item_EUTRAN
,
ieC3_1
);
asn1cSequenceAdd
(
drbSetup
->
list
,
E1AP_DRB_Setup_Item_EUTRAN
_t
,
ieC3_1
);
ieC3_1
->
dRB_ID
=
i
->
drbId
;
ieC3_1
->
s1_DL_UP_TNL_Information
.
present
=
E1AP_UP_TNL_Information_PR_gTPTunnel
;
asn1cCalloc
(
ieC3_1
->
s1_
U
L_UP_TNL_Information
.
choice
.
gTPTunnel
,
gTPTunnel
);
asn1cCalloc
(
ieC3_1
->
s1_
D
L_UP_TNL_Information
.
choice
.
gTPTunnel
,
gTPTunnel
);
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING
(
i
->
tlAddress
,
&
gTPTunnel
->
transportLayerAddress
);
INT32_TO_OCTET_STRING
(
i
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
for
(
up_params_t
*
j
=
i
->
UpParamList
;
j
<
i
->
UpParamList
+
i
->
numUpParam
;
j
++
)
{
asn1cSequenceAdd
(
ieC3_1
->
uL_UP_Transport_Parameters
.
list
,
E1AP_UP_Parameters_Item
,
ieC3_1_1
);
asn1cSequenceAdd
(
ieC3_1
->
uL_UP_Transport_Parameters
.
list
,
E1AP_UP_Parameters_Item
_t
,
ieC3_1_1
);
ieC3_1_1
->
uP_TNL_Information
.
present
=
E1AP_UP_TNL_Information_PR_gTPTunnel
;
asn1cCalloc
(
ieC3_1_1
->
uP_TNL_Information
.
choice
.
gTPTunnel
,
gTPTunnel
);
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING
(
j
->
tlAddress
,
&
gTPTunnel
->
transportLayerAddress
);
...
...
@@ -705,16 +692,16 @@ int e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(instance_t instance,
}
}
}
else
{
ieC3
->
System_BearerContextSetupResponse
.
present
=
E1AP_System_BearerContextSetupResponse_PR_nG_RAN_BearerContextSetupResponse
;
E1AP_NG_RAN_BearerContextSetupResponse_t
*
msg
EUT
RAN
=
calloc
(
1
,
sizeof
(
E1AP_NG_RAN_BearerContextSetupResponse_t
));
ieC3
->
System_BearerContextSetupResponse
.
choice
.
nG_RAN_BearerContextSetupResponse
=
(
E1AP_ProtocolIE_Container
*
)
msgNGRAN
;
msgNGRAN
.
id
=
E1AP_ProtocolIE_ID_id_DRB_Setup_List_EUTRAN
;
msgNGRAN
.
criticality
=
E1AP_Criticality_reject
;
ieC3
->
value
.
choice
.
System_BearerContextSetupResponse
.
present
=
E1AP_System_BearerContextSetupResponse_PR_nG_RAN_BearerContextSetupResponse
;
E1AP_NG_RAN_BearerContextSetupResponse_t
*
msg
NG
RAN
=
calloc
(
1
,
sizeof
(
E1AP_NG_RAN_BearerContextSetupResponse_t
));
ieC3
->
value
.
choice
.
System_BearerContextSetupResponse
.
choice
.
nG_RAN_BearerContextSetupResponse
=
(
struct
E1AP_ProtocolIE_Container
*
)
msgNGRAN
;
msgNGRAN
->
id
=
E1AP_ProtocolIE_ID_id_DRB_Setup_List_EUTRAN
;
msgNGRAN
->
criticality
=
E1AP_Criticality_reject
;
msgNGRAN
->
value
.
present
=
E1AP_NG_RAN_BearerContextSetupResponse__value_PR_PDU_Session_Resource_Setup_List
;
E1AP_PDU_Session_Resource_Setup_List_t
*
pduSetup
=
&
msgNGRAN
->
value
.
choice
.
PDU_Session_Resource_Setup_List
;
for
(
pdu_session_setup_t
*
i
=
resp
->
pduSession
;
i
<
resp
->
pduSession
+
resp
->
numPDUSessions
;
i
++
)
{
asn1cSequenceAdd
(
pduSetup
->
list
,
E1AP_PDU_Session_Resource_Setup_Item
,
ieC3_1
);
asn1cSequenceAdd
(
pduSetup
->
list
,
E1AP_PDU_Session_Resource_Setup_Item
_t
,
ieC3_1
);
ieC3_1
->
pDU_Session_ID
=
i
->
id
;
ieC3_1
->
nG_DL_UP_TNL_Information
.
present
=
E1AP_UP_TNL_Information_PR_gTPTunnel
;
...
...
@@ -723,26 +710,26 @@ int e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(instance_t instance,
INT32_TO_OCTET_STRING
(
i
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
for
(
DRB_nGRAN_setup_t
*
j
=
i
->
DRBnGRanList
;
j
<
i
->
DRBnGRanList
+
i
->
numDRBSetup
;
j
++
)
{
asn1cSequenceAdd
(
ieC3_1
->
dRB_Setup_List_NG_RAN
.
list
,
E1AP_DRB_Setup_Item_NG_RAN
,
ieC3_1_1
);
asn1cSequenceAdd
(
ieC3_1
->
dRB_Setup_List_NG_RAN
.
list
,
E1AP_DRB_Setup_Item_NG_RAN
_t
,
ieC3_1_1
);
ieC3_1_1
->
dRB_ID
=
j
->
id
;
for
(
up_params_t
*
k
=
j
->
UpParamList
;
k
<
j
->
UpParamList
+
j
->
numUpParam
;
k
++
)
{
asn1cSequenceAdd
(
ieC3_1_1
->
uL_UP_Transport_Parameters
.
list
,
E1AP_UP_Parameters_Item
,
ieC3_1_1_1
);
ieC3_1_1
->
uP_TNL_Information
.
present
=
E1AP_UP_TNL_Information_PR_gTPTunnel
;
asn1cCalloc
(
ieC3_1_1
->
uP_TNL_Information
.
choice
.
gTPTunnel
,
gTPTunnel
);
asn1cSequenceAdd
(
ieC3_1_1
->
uL_UP_Transport_Parameters
.
list
,
E1AP_UP_Parameters_Item
_t
,
ieC3_1_1_1
);
ieC3_1_1
_1
->
uP_TNL_Information
.
present
=
E1AP_UP_TNL_Information_PR_gTPTunnel
;
asn1cCalloc
(
ieC3_1_1
_1
->
uP_TNL_Information
.
choice
.
gTPTunnel
,
gTPTunnel
);
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING
(
k
->
tlAddress
,
&
gTPTunnel
->
transportLayerAddress
);
INT32_TO_OCTET_STRING
(
k
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
}
for
(
qos_flow_setup_t
*
k
=
j
->
qosFlows
;
k
<
j
->
qosFlows
+
j
->
numQosFlowSetup
;
k
++
)
{
asn1cSequenceAdd
(
ieC3_1_1
->
qos_flow_Information_To_Be_Setup
,
E1AP_QoS_Flow_QoS_Parameter_Item
,
ieC3_1_1_1
);
asn1cSequenceAdd
(
ieC3_1_1
->
flow_Setup_List
.
list
,
E1AP_QoS_Flow_Item_t
,
ieC3_1_1_1
);
ieC3_1_1_1
->
qoS_Flow_Identifier
=
k
->
id
;
}
}
E1AP_DRB_Failed_List_NG_RAN
*
failedDRBList
=
calloc
(
1
,
sizeof
(
E1AP_DRB_Failed_List_NG_RAN
));
ieC3_1
->
dRB_Failed_List_NG_RAN
=
calloc
(
1
,
sizeof
(
E1AP_DRB_Failed_List_NG_RAN_t
));
for
(
DRB_nGRAN_failed_t
*
j
=
i
->
DRBnGRanFailedList
;
j
<
i
->
DRBnGRanFailedList
+
i
->
numDRBFailed
;
j
++
)
{
asn1cSequenceAdd
(
ieC3_1
->
dRB_Failed_List_NG_RAN
->
list
,
E1AP_DRB_Failed_Item_NG_RAN
,
ieC3_1_1
);
asn1cSequenceAdd
(
ieC3_1
->
dRB_Failed_List_NG_RAN
->
list
,
E1AP_DRB_Failed_Item_NG_RAN
_t
,
ieC3_1_1
);
ieC3_1_1
->
dRB_ID
=
j
->
id
;
ieC3_1_1
->
cause
.
present
=
j
->
cause_type
;
...
...
@@ -770,11 +757,13 @@ int e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(instance_t instance,
}
}
}
e1ap_encode_send
(
0
,
instance
,
pdu
,
0
,
__func__
);
e1ap_encode_send
(
0
,
instance
,
&
pdu
,
0
,
__func__
);
return
0
;
}
int
e1apCUUP_send_BEARER_CONTEXT_SETUP_FAILURE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST
(
instance_t
instance
,
...
...
@@ -789,17 +778,17 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
AssertFatal
(
pdu
->
choice
.
initiatingMessage
->
value
.
present
==
E1AP_InitiatingMessage__value_PR_BearerContextSetupRequest
,
"initiatingMessage->value.present != E1AP_InitiatingMessage__value_PR_BearerContextSetupRequest
\n
"
);
E1AP_BearerContextSetupRequest_t
*
in
=
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
BearerContextSetupRequest
;
E1AP_
GNB_CU_CP_E1
SetupRequestIEs_t
*
ie
;
E1AP_BearerContextSetupRequest_t
*
in
=
&
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
BearerContextSetupRequest
;
E1AP_
BearerContext
SetupRequestIEs_t
*
ie
;
e1ap_bearer_setup_req_t
bearerCxt
=
&
getCxt
(
CPtype
,
instance
)
->
bearerSetupReq
;
e1ap_bearer_setup_req_t
*
bearerCxt
=
&
getCxtE1
(
CPtype
,
instance
)
->
bearerSetupReq
;
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_CUUP_E1
,
0
,
E1AP_BEARER_CONTEXT_SETUP_REQ
);
LOG_I
(
E1AP
,
"Bearer context setup number of IEs %d
\n
"
,
in
.
protocolIEs
.
list
.
count
);
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
];
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
:
...
...
@@ -807,7 +796,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
"ie->criticality != E1AP_Criticality_reject
\n
"
);
AssertFatal
(
ie
->
value
.
present
==
E1AP_BearerContextSetupRequestIEs__value_PR_GNB_CU_CP_UE_E1AP_ID
,
"ie->value.present != E1AP_BearerContextSetupRequestIEs__value_PR_GNB_CU_CP_UE_E1AP_ID
\n
"
);
bearerCxt
.
gNB_cu_cp_ue_id
=
ie
->
value
.
choice
.
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_SecurityInformation
:
...
...
@@ -816,7 +805,9 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
AssertFatal
(
ie
->
value
.
present
==
E1AP_BearerContextSetupRequestIEs__value_PR_SecurityInformation
,
"ie->value.present != E1AP_BearerContextSetupRequestIEs__value_PR_SecurityInformation
\n
"
);
bearerCxt
->
cipheringAlgorithm
=
ie
->
value
.
choice
.
SecurityInformation
.
securityAlgorithm
.
cipheringAlgorithm
;
OCTET_STRING_TO_INT32
(
&
ie
->
value
.
choice
.
SecurityInformation
.
uPSecuritykey
.
encryptionKey
,
bearerCxt
->
encryptionKey
);
memcpy
(
bearerCxt
->
encryptionKey
,
ie
->
value
.
choice
.
SecurityInformation
.
uPSecuritykey
.
encryptionKey
.
buf
,
ie
->
value
.
choice
.
SecurityInformation
.
uPSecuritykey
.
encryptionKey
.
size
);
break
;
case
E1AP_ProtocolIE_ID_id_UEDLAggregateMaximumBitRate
:
...
...
@@ -824,7 +815,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
"ie->criticality != E1AP_Criticality_reject
\n
"
);
AssertFatal
(
ie
->
value
.
present
==
E1AP_BearerContextSetupRequestIEs__value_PR_BitRate
,
"ie->value.present != E1AP_BearerContextSetupRequestIEs__value_PR_BitRate
\n
"
);
asn_INTEGER2long
(
&
ie
->
value
.
choice
.
BitRate
,
bearerCxt
->
bitRate
);
asn_INTEGER2long
(
&
ie
->
value
.
choice
.
BitRate
,
&
bearerCxt
->
bitRate
);
break
;
case
E1AP_ProtocolIE_ID_id_Serving_PLMN
:
...
...
@@ -851,42 +842,41 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
}
}
init_send_msg_to_task
(
TASK_RRC_GNB
,
instance
,
msg
);
itti_send_msg_to_task
(
TASK_RRC_GNB
,
instance
,
msg
);
return
0
;
}
int
e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE
(
instance_t
instance
,
uint32_t
assoc_id
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
pdu
->
present
==
E1AP_E1AP_PDU_PR_successfulOutcome
,
"pdu->present != E1AP_E1AP_PDU_PR_successfulOutcome
\n
"
);
AssertFatal
(
pdu
->
choice
.
initiatingMessag
e
->
procedureCode
==
E1AP_ProcedureCode_id_bearerContextSetup
,
AssertFatal
(
pdu
->
choice
.
successfulOutcom
e
->
procedureCode
==
E1AP_ProcedureCode_id_bearerContextSetup
,
"procedureCode != E1AP_ProcedureCode_id_bearerContextSetup
\n
"
);
AssertFatal
(
pdu
->
choice
.
initiatingMessag
e
->
criticality
==
E1AP_Criticality_reject
,
AssertFatal
(
pdu
->
choice
.
successfulOutcom
e
->
criticality
==
E1AP_Criticality_reject
,
"criticality != E1AP_Criticality_reject
\n
"
);
AssertFatal
(
pdu
->
choice
.
initiatingMessag
e
->
value
.
present
==
E1AP_SuccessfulOutcome__value_PR_BearerContextSetupResponse
,
AssertFatal
(
pdu
->
choice
.
successfulOutcom
e
->
value
.
present
==
E1AP_SuccessfulOutcome__value_PR_BearerContextSetupResponse
,
"initiatingMessage->value.present != E1AP_InitiatingMessage__value_PR_BearerContextSetupRequest
\n
"
);
E1AP_BearerContextSetupResponse_t
*
in
=
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
BearerContextSetupRequest
;
E1AP_
GNB_CU_CP_E1SetupRequest
IEs_t
*
ie
;
E1AP_BearerContextSetupResponse_t
*
in
=
&
pdu
->
choice
.
successfulOutcome
->
value
.
choice
.
BearerContextSetupResponse
;
E1AP_
BearerContextSetupResponse
IEs_t
*
ie
;
e1ap_bearer_setup_re
q_t
bearerCxt
=
&
getCxt
(
CPtype
,
instance
)
->
bearerSetupResp
;
e1ap_bearer_setup_re
sp_t
*
bearerCxt
=
&
getCxtE1
(
CPtype
,
instance
)
->
bearerSetupResp
;
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_CUCP_E1
,
0
,
E1AP_BEARER_CONTEXT_SETUP_RESP
);
LOG_I
(
E1AP
,
"Bearer context setup response number of IEs %d
\n
"
,
in
.
protocolIEs
.
list
.
count
);
LOG_I
(
E1AP
,
"Bearer context setup response 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
];
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_UP_UE_E1AP_ID
:
AssertFatal
(
ie
->
criticality
==
E1AP_Criticality_reject
,
"ie->criticality != E1AP_Criticality_reject
\n
"
);
AssertFatal
(
ie
->
value
.
present
==
E1AP_BearerContextSetupRe
quest
IEs__value_PR_GNB_CU_UP_UE_E1AP_ID
,
AssertFatal
(
ie
->
value
.
present
==
E1AP_BearerContextSetupRe
sponse
IEs__value_PR_GNB_CU_UP_UE_E1AP_ID
,
"ie->value.present != E1AP_BearerContextSetupRequestIEs__value_PR_GNB_CU_UP_UE_E1AP_ID
\n
"
);
bearerCxt
.
gNB_cu_up_ue_id
=
ie
->
value
.
choice
.
GNB_CU_UP_UE_E1AP_ID
;
bearerCxt
->
gNB_cu_up_ue_id
=
ie
->
value
.
choice
.
GNB_CU_UP_UE_E1AP_ID
;
break
;
// TODO: remaining IE handlers
...
...
@@ -897,15 +887,15 @@ int e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE(instance_t instance,
}
}
i
nit
_send_msg_to_task
(
TASK_RRC_GNB
,
instance
,
msg
);
i
tti
_send_msg_to_task
(
TASK_RRC_GNB
,
instance
,
msg
);
return
0
;
}
int
e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE
(
instance_t
instance
,
uint32_t
assoc_id
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
/*
...
...
@@ -914,14 +904,17 @@ int e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE(instance_t instance,
int
e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_REQUEST
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_RESPONSE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_FAILURE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST
(
instance_t
instance
,
...
...
@@ -929,6 +922,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_RESPONSE
(
instance_t
instance
,
...
...
@@ -936,6 +930,7 @@ int e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_RESPONSE(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_FAILURE
(
instance_t
instance
,
...
...
@@ -943,14 +938,17 @@ int e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_FAILURE(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_REQUIRED
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_CONFIRM
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_REQUIRED
(
instance_t
instance
,
...
...
@@ -958,6 +956,7 @@ int e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_REQUIRED(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_CONFIRM
(
instance_t
instance
,
...
...
@@ -965,6 +964,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_CONFIRM(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
/*
BEARER CONTEXT RELEASE
...
...
@@ -972,14 +972,17 @@ int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_CONFIRM(instance_t instance,
int
e1apCUCP_send_BEARER_CONTEXT_RELEASE_COMMAND
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUUP_send_BEARER_CONTEXT_RELEASE_REQUEST
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND
(
instance_t
instance
,
...
...
@@ -987,6 +990,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
,
...
...
@@ -994,6 +998,7 @@ int e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUCP_handle_BEARER_CONTEXT_RELEASE_REQUEST
(
instance_t
instance
,
...
...
@@ -1001,6 +1006,7 @@ int e1apCUCP_handle_BEARER_CONTEXT_RELEASE_REQUEST(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
/*
...
...
@@ -1009,6 +1015,7 @@ BEARER CONTEXT INACTIVITY NOTIFICATION
int
e1apCUUP_send_BEARER_CONTEXT_INACTIVITY_NOTIFICATION
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUCP_handle_BEARER_CONTEXT_INACTIVITY_NOTIFICATION
(
instance_t
instance
,
...
...
@@ -1016,6 +1023,7 @@ int e1apCUCP_handle_BEARER_CONTEXT_INACTIVITY_NOTIFICATION(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
/*
DL DATA
...
...
@@ -1023,10 +1031,12 @@ int e1apCUCP_handle_BEARER_CONTEXT_INACTIVITY_NOTIFICATION(instance_t instance,
int
e1apCUUP_send_DL_DATA_NOTIFICATION
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUUP_send_DATA_USAGE_REPORT
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUCP_handle_DL_DATA_NOTIFICATION
(
instance_t
instance
,
...
...
@@ -1034,6 +1044,7 @@ int e1apCUCP_handle_DL_DATA_NOTIFICATION(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
int
e1apCUCP_handle_send_DATA_USAGE_REPORT
(
instance_t
instance
,
...
...
@@ -1041,6 +1052,7 @@ int e1apCUCP_handle_send_DATA_USAGE_REPORT(instance_t instance,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
void
cuup_task_send_sctp_association_req
(
instance_t
instance
,
e1ap_setup_req_t
*
e1ap_setup_req
)
{
...
...
@@ -1065,7 +1077,7 @@ void cuup_task_send_sctp_association_req(instance_t instance, e1ap_setup_req_t *
itti_send_msg_to_task
(
TASK_SCTP
,
instance
,
message_p
);
}
void
cuup_task_handle_sctp_association_resp
(
instance_t
instance
,
sctp_new_association_resp_t
sctp_new_association_resp
)
{
void
cuup_task_handle_sctp_association_resp
(
instance_t
instance
,
sctp_new_association_resp_t
*
sctp_new_association_resp
)
{
DevAssert
(
sctp_new_association_resp
!=
NULL
);
if
(
sctp_new_association_resp
->
sctp_state
!=
SCTP_STATE_ESTABLISHED
)
{
...
...
@@ -1076,7 +1088,7 @@ void cuup_task_handle_sctp_association_resp(instance_t instance, sctp_new_associ
return
;
}
e1ap_setup_req_t
*
e1ap_cuup_setup_req
=
&
getCxt
(
UPtype
,
instance
)
->
setupReq
;
e1ap_setup_req_t
*
e1ap_cuup_setup_req
=
&
getCxt
E1
(
UPtype
,
instance
)
->
setupReq
;
e1ap_cuup_setup_req
->
assoc_id
=
sctp_new_association_resp
->
assoc_id
;
e1ap_cuup_setup_req
->
sctp_in_streams
=
sctp_new_association_resp
->
in_streams
;
e1ap_cuup_setup_req
->
sctp_out_streams
=
sctp_new_association_resp
->
out_streams
;
...
...
@@ -1107,7 +1119,7 @@ void cucp_task_send_sctp_init_req(instance_t instance, char *my_addr) {
void
*
E1AP_CUCP_task
(
void
*
arg
)
{
LOG_I
(
E1AP
,
"Starting E1AP at CU CP
\n
"
);
MessageDef
*
msg
=
NULL
;
int
result
;
e1ap_common_init
()
;
while
(
1
)
{
itti_receive_msg
(
TASK_CUCP_E1
,
&
msg
);
...
...
@@ -1120,7 +1132,7 @@ void *E1AP_CUCP_task(void *arg) {
char
*
ipaddr
;
if
(
req
->
CUCP_e1_ip_address
.
ipv4
==
0
)
{
LOG_E
(
E1AP
,
"No IPv4 address configured
\n
"
);
return
-
1
;
return
NULL
;
}
else
ipaddr
=
req
->
CUCP_e1_ip_address
.
ipv4_address
;
...
...
@@ -1136,6 +1148,7 @@ void *E1AP_CUCP_task(void *arg) {
void
*
E1AP_CUUP_task
(
void
*
arg
)
{
LOG_I
(
E1AP
,
"Starting E1AP at CU UP
\n
"
);
e1ap_common_init
();
// SCTP
while
(
1
)
{
...
...
@@ -1147,19 +1160,19 @@ void *E1AP_CUUP_task(void *arg) {
case
E1AP_SETUP_REQ
:
LOG_I
(
E1AP
,
"CUUP Task Received E1AP_SETUP_REQ
\n
"
);
e1ap_setup_req_t
*
msgSetup
=
&
E1AP_SETUP_REQ
(
msg
);
createE1inst
(
UPtype
,
i
nstance
,
msgSetup
);
createE1inst
(
UPtype
,
myI
nstance
,
msgSetup
);
cuup_task_send_sctp_association_req
(
i
nstance
,
msgSetup
);
cuup_task_send_sctp_association_req
(
myI
nstance
,
msgSetup
);
break
;
case
SCTP_NEW_ASSOCIATION_RESP
:
LOG_I
(
E1AP
,
"CUUP Task Received SCTP_NEW_ASSOCIATION_RESP
\n
"
);
cuup_task_handle_sctp_association_resp
(
i
nstance
,
&
msg
->
ittiMsg
.
sctp_new_association_resp
);
cuup_task_handle_sctp_association_resp
(
myI
nstance
,
&
msg
->
ittiMsg
.
sctp_new_association_resp
);
break
;
case
SCTP_DATA_IND
:
LOG_I
(
E1AP
,
"CUUP Task Received SCTP_DATA_IND
\n
"
);
cuup_task_handle_sctp_data_ind
(
i
nstance
,
&
msg
->
ittiMsg
.
sctp_data_ind
);
cuup_task_handle_sctp_data_ind
(
myI
nstance
,
&
msg
->
ittiMsg
.
sctp_data_ind
);
break
;
default:
...
...
This diff is collapsed.
Click to expand it.
openair2/E1AP/e1ap.h
View file @
6106207b
...
...
@@ -27,9 +27,61 @@
#include <common/utils/LOG/log.h>
#include "openairinterface5g_limits.h"
#include <openair2/RRC/NR/MESSAGES/asn1_msg.h>
#include "e1ap_common.h"
#include "openair2/COMMON/e1ap_messages_types.h"
#include "openair3/UTILS/conversions.h"
#include "openair2/F1AP/f1ap_common.h"
#include <E1AP_Cause.h>
#include <E1AP_InitiatingMessage.h>
#include <E1AP_E1AP-PDU.h>
#include <E1AP_ProtocolIE-Field.h>
#include <E1AP_SupportedPLMNs-Item.h>
#include <E1AP_SuccessfulOutcome.h>
#include <E1AP_ProtocolIE-Field.h>
#include <E1AP_UnsuccessfulOutcome.h>
#include <E1AP_GNB-CU-UP-E1SetupFailure.h>
#include <E1AP_GNB-CU-UP-ConfigurationUpdate.h>
#include <E1AP_GNB-CU-UP-TNLA-To-Remove-Item.h>
#include <E1AP_CP-TNL-Information.h>
#include <E1AP_UP-Parameters-Item.h>
#include <E1AP_UP-TNL-Information.h>
#include <E1AP_PDU-Session-Resource-Setup-Item.h>
#include <E1AP_DRB-Setup-Item-EUTRAN.h>
#include <E1AP_DRB-Setup-Item-NG-RAN.h>
#include <E1AP_QoS-Flow-QoS-Parameter-Item.h>
#include <E1AP_QoS-Flow-Item.h>
#include <E1AP_DRB-Failed-List-NG-RAN.h>
#include <E1AP_DRB-Failed-Item-NG-RAN.h>
#include <E1AP_BearerContextSetupResponse.h>
#include <E1AP_BearerContextSetupRequest.h>
#include <E1AP_DRB-To-Setup-Item-EUTRAN.h>
#include <E1AP_DRB-To-Setup-Item-NG-RAN.h>
#include <E1AP_Cell-Group-Information-Item.h>
#include <E1AP_PDU-Session-Resource-To-Setup-Item.h>
#include <E1AP_GTPTunnel.h>
#include <E1AP_Non-Dynamic5QIDescriptor.h>
#include <E1AP_Dynamic5QIDescriptor.h>
#endif
int
e1apCUCP_handle_SETUP_REQUEST
(
instance_t
instance
,
E1AP_E1AP_PDU_t
*
pdu
);
int
e1apCUUP_handle_SETUP_RESPONSE
(
instance_t
instance
,
E1AP_E1AP_PDU_t
*
pdu
);
int
e1apCUUP_handle_SETUP_FAILURE
(
instance_t
instance
,
E1AP_E1AP_PDU_t
*
pdu
);
int
e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST
(
instance_t
instance
,
E1AP_E1AP_PDU_t
*
pdu
);
int
e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE
(
instance_t
instance
,
E1AP_E1AP_PDU_t
*
pdu
);
int
e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE
(
instance_t
instance
,
E1AP_E1AP_PDU_t
*
pdu
);
void
*
E1AP_CUUP_task
(
void
*
arg
);
void
*
E1AP_CUCP_task
(
void
*
arg
);
This diff is collapsed.
Click to expand it.
openair2/E1AP/e1ap_common.c
View file @
6106207b
...
...
@@ -23,34 +23,42 @@
#include <time.h>
#include <stdlib.h>
#include "e1ap.h"
#include "e1ap_common.h"
static
e1ap_upcp_inst_t
*
e1_cp_inst
[
NUMBER_OF_gNB_MAX
]
=
{
0
};
static
e1ap_upcp_inst_t
*
e1_up_inst
[
NUMBER_OF_gNB_MAX
]
=
{
0
};
static
e1ap_upcp_inst_t
*
e1
ap
_cp_inst
[
NUMBER_OF_gNB_MAX
]
=
{
0
};
static
e1ap_upcp_inst_t
*
e1
ap
_up_inst
[
NUMBER_OF_gNB_MAX
]
=
{
0
};
e1ap_upcp_inst_t
*
getCxt
(
E1_t
type
,
instance_t
instance
)
{
AssertFatal
(
instance
<
sizeofArray
(
e1_cp_inst
),
"instance exceeds limit
\n
"
);
return
type
?
e1_up_inst
[
instance
]
:
e1_cp_inst
[
instance
];
e1ap_upcp_inst_t
*
getCxtE1
(
E1_t
type
,
instance_t
instance
)
{
AssertFatal
(
instance
<
sizeofArray
(
e1ap_cp_inst
),
"instance exceeds limit
\n
"
);
return
type
?
e1ap_up_inst
[
instance
]
:
e1ap_cp_inst
[
instance
];
}
int
e1ap_assoc_id
(
bool
isCu
,
instance_t
instance
)
{
return
0
;
}
void
createE1inst
(
E1_t
type
,
instance_t
instance
,
e1ap_setup_req_t
*
req
)
{
if
(
type
==
CPtype
)
{
AssertFatal
(
e1
_cp_inst
[
instance
]
==
NULL
,
"Double call to E1 CP instance %d
\n
"
,
instance
);
e1
_cp_inst
[
instance
]
=
(
e1_upcp_inst_t
*
)
calloc
(
1
,
sizeof
(
e1
_upcp_inst_t
));
AssertFatal
(
e1
ap_cp_inst
[
instance
]
==
NULL
,
"Double call to E1 CP instance %d
\n
"
,
(
int
)
instance
);
e1
ap_cp_inst
[
instance
]
=
(
e1ap_upcp_inst_t
*
)
calloc
(
1
,
sizeof
(
e1ap
_upcp_inst_t
));
}
else
{
AssertFatal
(
e1
_up_inst
[
instance
]
==
NULL
,
"Double call to E1 UP instance %d
\n
"
,
instance
);
e1
_up_inst
[
instance
]
=
(
e1_upcp_inst_t
*
)
calloc
(
1
,
sizeof
(
e1
_upcp_inst_t
));
memcpy
(
&
e1_up_inst
[
instance
]
->
setupReq
,
req
,
sizeof
(
e1ap_setup_req_t
));
AssertFatal
(
e1
ap_up_inst
[
instance
]
==
NULL
,
"Double call to E1 UP instance %d
\n
"
,
(
int
)
instance
);
e1
ap_up_inst
[
instance
]
=
(
e1ap_upcp_inst_t
*
)
calloc
(
1
,
sizeof
(
e1ap
_upcp_inst_t
));
memcpy
(
&
e1
ap
_up_inst
[
instance
]
->
setupReq
,
req
,
sizeof
(
e1ap_setup_req_t
));
}
}
E1AP_TransactionID_t
transacID
[
MAX_NUM_TRANSAC_IDS
]
=
{
0
};
srand
(
time
(
NULL
));
E1AP_TransactionID_t
transacID
[
E1AP_MAX_NUM_TRANSAC_IDS
]
=
{
0
};
void
e1ap_common_init
()
{
srand
(
time
(
NULL
));
}
bool
check_transac_id
(
E1AP_TransactionID_t
id
,
int
*
freeIdx
)
{
bool
isFreeIdxSet
=
false
;
for
(
int
i
=
0
;
i
<
MAX_NUM_TRANSAC_IDS
;
i
++
)
{
for
(
int
i
=
0
;
i
<
E1AP_
MAX_NUM_TRANSAC_IDS
;
i
++
)
{
if
(
id
==
transacID
[
i
])
return
false
;
else
if
(
!
isFreeIdxSet
&&
(
transacID
[
i
]
==
0
))
{
...
...
@@ -69,14 +77,68 @@ E1AP_TransactionID_t E1AP_get_next_transaction_identifier() {
while
(
!
isTransacIdValid
)
{
genTransacId
=
rand
();
isTransacIdValid
=
check_transac_
I
d
(
genTransacId
,
&
freeIdx
);
isTransacIdValid
=
check_transac_
i
d
(
genTransacId
,
&
freeIdx
);
}
AssertFatal
(
freeIdx
<
MAX_NUM_TRANSAC_IDS
,
"Free Index exceeds array length
\n
"
);
AssertFatal
(
freeIdx
<
E1AP_
MAX_NUM_TRANSAC_IDS
,
"Free Index exceeds array length
\n
"
);
transacID
[
freeIdx
]
=
genTransacId
;
return
genTransacId
;
}
int
e1ap_decode_initiating_message
(
E1AP_E1AP_PDU_t
*
pdu
)
{
DevAssert
(
pdu
!=
NULL
);
switch
(
pdu
->
choice
.
initiatingMessage
->
procedureCode
)
{
case
E1AP_ProcedureCode_id_gNB_CU_UP_E1Setup
:
break
;
case
E1AP_ProcedureCode_id_gNB_CU_UP_ConfigurationUpdate
:
break
;
case
E1AP_ProcedureCode_id_bearerContextSetup
:
break
;
default:
LOG_E
(
E1AP
,
"Unsupported procedure code (%d) for initiating message
\n
"
,
(
int
)
pdu
->
choice
.
initiatingMessage
->
procedureCode
);
return
-
1
;
}
return
0
;
}
int
e1ap_decode_successful_outcome
(
E1AP_E1AP_PDU_t
*
pdu
)
{
DevAssert
(
pdu
!=
NULL
);
switch
(
pdu
->
choice
.
successfulOutcome
->
procedureCode
)
{
case
E1AP_ProcedureCode_id_gNB_CU_UP_E1Setup
:
break
;
case
E1AP_ProcedureCode_id_bearerContextSetup
:
break
;
default:
LOG_E
(
E1AP
,
"Unsupported procedure code (%d) for successful message
\n
"
,
(
int
)
pdu
->
choice
.
successfulOutcome
->
procedureCode
);
return
-
1
;
}
return
0
;
}
int
e1ap_decode_unsuccessful_outcome
(
E1AP_E1AP_PDU_t
*
pdu
)
{
DevAssert
(
pdu
!=
NULL
);
switch
(
pdu
->
choice
.
unsuccessfulOutcome
->
procedureCode
)
{
case
E1AP_ProcedureCode_id_gNB_CU_UP_E1Setup
:
break
;
default:
LOG_E
(
E1AP
,
"Unsupported procedure code (%d) for unsuccessful message
\n
"
,
(
int
)
pdu
->
choice
.
unsuccessfulOutcome
->
procedureCode
);
return
-
1
;
}
return
0
;
}
int
asn1_xer_print_e1ap
=
1
;
int
e1ap_decode_pdu
(
E1AP_E1AP_PDU_t
*
pdu
,
const
uint8_t
*
const
buffer
,
uint32_t
length
)
{
asn_dec_rval_t
dec_ret
;
DevAssert
(
buffer
!=
NULL
);
...
...
@@ -88,7 +150,7 @@ int e1ap_decode_pdu(E1AP_E1AP_PDU_t *pdu, const uint8_t *const buffer, uint32_t
0
,
0
);
if
(
asn1_
decoder_xer_print
)
{
if
(
asn1_
xer_print_e1ap
)
{
LOG_E
(
F1AP
,
"----------------- ASN1 DECODER PRINT START-----------------
\n
"
);
xer_fprint
(
stdout
,
&
asn_DEF_E1AP_E1AP_PDU
,
pdu
);
LOG_E
(
F1AP
,
"----------------- ASN1 DECODER PRINT END -----------------
\n
"
);
...
...
@@ -116,3 +178,41 @@ int e1ap_decode_pdu(E1AP_E1AP_PDU_t *pdu, const uint8_t *const buffer, uint32_t
return
-
1
;
}
int
e1ap_encode_send
(
bool
isCu
,
instance_t
instance
,
E1AP_E1AP_PDU_t
*
pdu
,
uint16_t
stream
,
const
char
*
func
)
{
DevAssert
(
pdu
!=
NULL
);
if
(
asn1_xer_print_e1ap
)
{
LOG_E
(
E1AP
,
"----------------- ASN1 ENCODER PRINT START -----------------
\n
"
);
xer_fprint
(
stdout
,
&
asn_DEF_E1AP_E1AP_PDU
,
pdu
);
LOG_E
(
E1AP
,
"----------------- ASN1 ENCODER PRINT END-----------------
\n
"
);
}
char
errbuf
[
2048
];
/* Buffer for error message */
size_t
errlen
=
sizeof
(
errbuf
);
/* Size of the buffer */
int
ret
=
asn_check_constraints
(
&
asn_DEF_E1AP_E1AP_PDU
,
pdu
,
errbuf
,
&
errlen
);
if
(
ret
)
{
LOG_E
(
E1AP
,
"%s: Constraint validation failed: %s
\n
"
,
func
,
errbuf
);
}
void
*
buffer
=
NULL
;
ssize_t
encoded
=
aper_encode_to_new_buffer
(
&
asn_DEF_E1AP_E1AP_PDU
,
0
,
pdu
,
buffer
);
if
(
encoded
<
0
)
{
LOG_E
(
E1AP
,
"%s: Failed to encode E1AP message
\n
"
,
func
);
return
-
1
;
}
else
{
MessageDef
*
message
=
itti_alloc_new_message
(
isCu
?
TASK_CUCP_E1
:
TASK_CUUP_E1
,
0
,
SCTP_DATA_REQ
);
sctp_data_req_t
*
s
=
&
message
->
ittiMsg
.
sctp_data_req
;
s
->
assoc_id
=
e1ap_assoc_id
(
isCu
,
instance
);
s
->
buffer
=
buffer
;
s
->
buffer_length
=
encoded
;
s
->
stream
=
stream
;
LOG_I
(
E1AP
,
"%s: Sending ITTI message to SCTP Task
\n
"
,
func
);
itti_send_msg_to_task
(
TASK_SCTP
,
instance
,
message
);
}
return
encoded
;
}
This diff is collapsed.
Click to expand it.
openair2/E1AP/e1ap_common.h
View file @
6106207b
...
...
@@ -24,153 +24,21 @@
#ifndef E1AP_COMMON_H_
#define E1AP_COMMON_H_
#include "E1AP_E1AP-PDU.h"
#include "E1AP_TransactionID.h"
#include "E1AP_PriorityLevel.h"
#include "openair2/COMMON/e1ap_messages_types.h"
#define MAX_NUM_TRANSAC_IDS 8
int
e1ap_decode_pdu
(
E1AP_E1AP_PDU_t
*
pdu
,
const
uint8_t
*
const
buffer
,
uint32_t
length
);
#define E1AP_SETUP_REQ(mSGpTR) (mSGpTR)->ittiMsg.e1ap_setup_req
#define E1AP_SETUP_RESP(mSGpTR) (mSGpTR)->ittiMsg.e1ap_setup_resp
e1ap_upcp_inst_t
*
getCxtE1
(
E1_t
type
,
instance_t
instance
);
#define E1AP_PORT_NUMBER 25
#define E1AP_SCTP_PPID 63
E1AP_TransactionID_t
E1AP_get_next_transaction_identifier
();
typedef
f1ap_net_ip_address_t
e1ap_net_ip_address_t
;
void
createE1inst
(
E1_t
type
,
instance_t
instance
,
e1ap_setup_req_t
*
req
)
;
typedef
int
(
*
e1ap_message_processing_t
)(
instance_t
instance
;
uint32_t
assoc_id
;
uint32_t
stream
;
E1AP_E1AP_PDU_t
*
message_p
;
}
;
bool
check_transac_id
(
E1AP_TransactionID_t
id
,
int
*
freeIdx
);
typedef
struct
cell_group_s
{
long
id
;
}
cell_group_t
;
int
e1ap_assoc_id
(
bool
isCu
,
instance_t
instance
);
typedef
struct
drb_to_setup_s
{
long
drbId
;
long
pDCP_SN_Size_UL
;
long
pDCP_SN_Size_DL
;
long
rLC_Mode
;
long
qci
;
E1AP_PriorityLevel_t
qosPriorityLevel
;
E1AP_Pre_emptionCapability_t
pre_emptionCapability
;
E1AP_Pre_emptionVulnerability_t
pre_emptionVulnerability
;
in_addr_t
tlAddress
;
long
teId
;
int
numCellGroups
;
cell_group_t
cellGroupList
[
MAX_NUM_CELL_GROUPS
];
}
drb_to_setup_t
;
typedef
struct
qos_flow_to_setup_s
{
long
id
;
long
fiveQI
;
long
qoSPriorityLevel
;
long
packetDelayBudget
;
long
packetError_scalar
;
long
packetError_exponent
;
E1AP_PriorityLevel_t
priorityLevel
;
E1AP_Pre_emptionCapability_t
pre_emptionCapability
;
E1AP_Pre_emptionVulnerability_t
pre_emptionVulnerability
;
}
qos_flow_to_setup_t
;
typedef
struct
DRB_nGRAN_to_setup_s
{
long
id
;
E1AP_DefaultDRB_t
defaultDRB
;
E1AP_SDAP_Header_UL_t
sDAP_Header_UL
;
E1AP_SDAP_Header_DL_t
sDAP_Header_DL
;
int
numCellGroups
;
cell_group_t
cellGroupList
[
MAX_NUM_CELL_GROUPS
];
int
numQosFlowSetup
;
qos_flow_to_setup_t
qosFlows
[
MAX_NUM_QOS_FLOWS
];
}
DRB_nGRAN_to_setup_t
;
typedef
struct
pdu_session_to_setup_s
{
long
sessionId
;
E1AP_PDU_Session_Type_t
sessionType
;
int32_t
sst
;
E1AP_IntegrityProtectionIndication_t
integrityProtectionIndication
;
E1AP_ConfidentialityProtectionIndication_t
confidentialityProtectionIndication
;
in_addr_t
tlAddress
;
long
teId
;
long
numDRB2Setup
;
DRB_nGRAN_to_setup_t
DRBnGRanList
[
MAX_NUM_NGRAN_DRB
];
}
pdu_session_to_setup_t
;
typedef
struct
e1ap_bearer_setup_req_s
{
uint64_t
gNB_cu_cp_ue_id
;
uint64_t
cipheringAlgorithm
;
char
encryptionKey
[
128
];
uint64_t
bitRate
;
E1AP_ActivityNotificationLevel_t
activityNotificationLevel
;
int
numDRBs
;
drb_to_setup_t
DRBList
[
MAX_NUM_DRBS
];
int
numPDUSessions
;
pdu_session_to_setup_t
pduSession
[
MAX_NUM_PDU_SESSIONS
];
}
e1ap_bearer_setup_req_t
;
typedef
struct
up_params_s
{
in_addr_t
tlAddress
;
long
teId
;
}
up_params_t
;
typedef
struct
drb_setup_s
{
int
drbId
;
in_addr_t
tlAddress
;
ling
teId
;
int
numUpParam
;
up_params_t
UpParamList
[
MAX_NUM_UP_PARAM
];
}
drb_setup_t
;
typedef
struct
qos_flow_setup_s
{
long
id
;
}
qos_flow_setup_t
;
typedef
struct
DRB_nGRAN_setup_s
{
long
id
;
int
numUpParam
;
up_params_t
UpParamList
[
MAX_NUM_UP_PARAM
];
int
numQosFlowSetup
;
qos_flow_setup_t
qosFlows
[
MAX_NUM_QOS_FLOWS
];
}
DRB_nGRAN_setup_t
;
typedef
struct
DRB_nGRAN_failed_s
{
long
id
;
long
cause_type
;
long
cause
;
}
DRB_nGRAN_failed_t
;
typedef
struct
pdu_session_setup_s
{
long
id
;
in_addr_t
tlAddress
;
long
teId
;
int
numDRBSetup
;
DRB_nGRAN_setup_t
DRBnGRanList
[
MAX_NUM_NGRAN_DRB
];
int
numDRBFailed
;
DRB_nGRAN_failed_t
DRBnGRanFailedList
[
MAX_NUM_NGRAN_DRB
];
}
pdu_session_setup_t
;
typedef
struct
e1ap_bearer_setup_resp_s
{
uint64_t
gNB_cu_cp_ue_id
;
uint64_t
gNB_cu_up_ue_id
;
int
numDRBs
;
drb_setup_t
DRBList
[
MAX_NUM_DRBS
];
int
numPDUSessions
;
}
e1ap_bearer_setup_resp_t
;
typedef
struct
e1ap_upcp_inst_s
{
uint32_t
assoc_id
;
e1ap_setup_req_t
setupReq
;
e1ap_bearer_setup_req_t
bearerSetupReq
;
e1ap_bearer_setup_resp_t
bearerSetupResp
;
}
e1ap_upcp_inst_t
;
typedef
enum
{
CPtype
=
0
,
UPtype
}
E1_t
;
int
e1ap_encode_send
(
bool
isCu
,
instance_t
instance
,
E1AP_E1AP_PDU_t
*
pdu
,
uint16_t
stream
,
const
char
*
func
);
void
e1ap_common_init
();
#endif
/* E1AP_COMMON_H_ */
This diff is collapsed.
Click to expand it.
openair2/GNB_APP/gnb_app.c
View file @
6106207b
...
...
@@ -52,6 +52,7 @@
#include "nfapi/oai_integration/vendor_ext.h"
#include <openair2/LAYER2/nr_pdcp/nr_pdcp.h>
#include "openair2/LAYER2/PDCP_v10.1.0/pdcp.h"
#include "openair2/E1AP/e1ap.h"
extern
unsigned
char
NB_gNB_INST
;
extern
RAN_CONTEXT_t
RC
;
...
...
This diff is collapsed.
Click to expand it.
openair2/GNB_APP/gnb_config.c
View file @
6106207b
...
...
@@ -1845,7 +1845,7 @@ int RCconfig_NR_CU_E1(MessageDef *msg_p, uint32_t i) {
"gNB id %u is not defined in configuration file
\n
"
,
i
);
config_getlist
(
&
GNBE1ParamList
,
GNBE1Params
,
sizeof
(
GNBE1Params
)
/
sizeof
(
paramdef_t
),
NULL
);
e1ap_setup_req_t
*
e1Setup
=
&
E1AP_SETUP_REQ
(
msg_p
);
e1
s
etup
->
gNB_cu_up_id
=
*
(
GNBParamList
.
paramarray
[
0
][
GNB_GNB_ID_IDX
].
uptr
);
e1
S
etup
->
gNB_cu_up_id
=
*
(
GNBParamList
.
paramarray
[
0
][
GNB_GNB_ID_IDX
].
uptr
);
paramdef_t
PLMNParams
[]
=
GNBPLMNPARAMS_DESC
;
paramlist_def_t
PLMNParamList
=
{
GNB_CONFIG_STRING_PLMN_LIST
,
NULL
,
0
};
...
...
@@ -1855,7 +1855,7 @@ int RCconfig_NR_CU_E1(MessageDef *msg_p, uint32_t i) {
for
(
int
I
=
0
;
I
<
sizeof
(
PLMNParams
)
/
sizeof
(
paramdef_t
);
++
I
)
PLMNParams
[
I
].
chkPptr
=
&
(
config_check_PLMNParams
[
I
]);
config_getlist
(
&
PLMNParamList
,
PLMNParams
,
sizeof
(
PLMNParams
)
/
sizeof
(
paramdef_t
),
aprefix
);
config_getlist
(
&
PLMNParamList
,
PLMNParams
,
sizeof
(
PLMNParams
)
/
sizeof
(
paramdef_t
),
NULL
);
int
numPLMNs
=
PLMNParamList
.
numelt
;
e1Setup
->
supported_plmns
=
numPLMNs
;
...
...
@@ -1865,12 +1865,12 @@ int RCconfig_NR_CU_E1(MessageDef *msg_p, uint32_t i) {
e1Setup
->
plmns
[
I
].
mnc
=
*
PLMNParamList
.
paramarray
[
I
][
GNB_MNC_DIGIT_LENGTH
].
u8ptr
;
}
strcpy
(
e1Setup
->
CUCP_e1_ip_address
.
ipv4_address
,
GNBE1PARAMList
.
paramarray
[
0
][
GNB_CONFIG_E1_IPV4_ADDRESS_CUCP
].
strptr
);
e1Setup
->
port_cucp
=
*
GNBE1P
ARAM
List
.
paramarray
[
0
][
GNB_CONFIG_E1_PORT_CUCP
].
uptr
;
strcpy
(
e1Setup
->
CUUP_e1_ip_address
.
ipv4_address
,
GNBE1PARAMList
.
paramarray
[
0
][
GNB_CONFIG_E1_IPV4_ADDRESS_CUUP
].
strptr
);
e1Setup
->
port_cuup
=
*
GNBE1P
ARAM
List
.
paramarray
[
0
][
GNB_CONFIG_E1_PORT_CUUP
].
uptr
;
strcpy
(
e1Setup
->
CUCP_e1_ip_address
.
ipv4_address
,
*
(
GNBE1ParamList
.
paramarray
[
0
][
GNB_CONFIG_E1_IPV4_ADDRESS_CUCP
].
strptr
)
);
e1Setup
->
port_cucp
=
*
GNBE1P
aram
List
.
paramarray
[
0
][
GNB_CONFIG_E1_PORT_CUCP
].
uptr
;
strcpy
(
e1Setup
->
CUUP_e1_ip_address
.
ipv4_address
,
*
(
GNBE1ParamList
.
paramarray
[
0
][
GNB_CONFIG_E1_IPV4_ADDRESS_CUUP
].
strptr
)
);
e1Setup
->
port_cuup
=
*
GNBE1P
aram
List
.
paramarray
[
0
][
GNB_CONFIG_E1_PORT_CUUP
].
uptr
;
e1Setup
->
cn_support
=
*
GNBE1P
ARAMList
.
P
aramarray
[
0
][
GNB_CONFIG_E1_CN_SUPPORT
].
uptr
;
e1Setup
->
cn_support
=
*
GNBE1P
aramList
.
p
aramarray
[
0
][
GNB_CONFIG_E1_CN_SUPPORT
].
uptr
;
}
return
0
;
...
...
This diff is collapsed.
Click to expand it.
openair2/GNB_APP/gnb_config.h
View file @
6106207b
...
...
@@ -41,6 +41,7 @@
#include "s1ap_messages_types.h"
#include "ngap_messages_types.h"
#include "f1ap_messages_types.h"
#include "e1ap_messages_types.h"
#include "rrc_messages_types.h"
#include "intertask_interface.h"
...
...
@@ -107,6 +108,8 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i);
int
gNB_app_handle_f1ap_setup_resp
(
f1ap_setup_resp_t
*
resp
);
int
gNB_app_handle_f1ap_gnb_cu_configuration_update
(
f1ap_gnb_cu_configuration_update_t
*
gnb_cu_cfg_update
);
void
nr_read_config_and_init
(
void
);
void
set_node_type
(
void
);
int
RCconfig_NR_CU_E1
(
MessageDef
*
msg_p
,
uint32_t
i
);
#endif
/* GNB_CONFIG_H_ */
/** @} */
This diff is collapsed.
Click to expand it.
openair2/GNB_APP/gnb_paramdef.h
View file @
6106207b
...
...
@@ -387,8 +387,8 @@ typedef enum {
{GNB_CONFIG_STRING_E1_IPV4_ADDRESS_CUCP, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_E1_PORT_CUCP, NULL, 0, uptr :NULL, defintval:25L, TYPE_UINT, 0}, \
{GNB_CONFIG_STRING_E1_IPV4_ADDRESS_CUUP, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \
{GNB_CONFIG_STRING_E1_PORT_CUUP, NULL, 0, uptr :NULL, defintval:25L, TYPE_UINT, 0} \
{GNB_CONFIG_STRING_E1_CN_SUPPORT, NULL, 0, uptr :NULL, defintval:1L, TYPE_U
NI
T, 0} \
{GNB_CONFIG_STRING_E1_PORT_CUUP, NULL, 0, uptr :NULL, defintval:25L, TYPE_UINT, 0}
,
\
{GNB_CONFIG_STRING_E1_CN_SUPPORT, NULL, 0, uptr :NULL, defintval:1L, TYPE_U
IN
T, 0} \
}
/* L1 configuration section names */
...
...
This diff is collapsed.
Click to expand it.
openair2/RRC/NR/nr_rrc_defs.h
View file @
6106207b
...
...
@@ -476,6 +476,7 @@ typedef struct nr_mac_rrc_dl_if_s {
typedef
struct
gNB_RRC_INST_s
{
ngran_node_t
node_type
;
int
cu_type
;
uint32_t
node_id
;
char
*
node_name
;
int
module_id
;
...
...
This diff is collapsed.
Click to expand it.
FANG WANG
@wf
mentioned in commit
553f1d1a
·
2 years ago
mentioned in commit
553f1d1a
mentioned in commit 553f1d1a52845911be4ba61ec2bcc5c60ad42ae7
Toggle commit list
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