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
ao gleen
OpenXG-RAN
Commits
6106207b
Commit
6106207b
authored
May 26, 2022
by
Sakthivel Velumani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixing build issues
parent
67235fac
Changes
15
Hide 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})
...
@@ -1325,6 +1325,8 @@ add_library(NFAPI_COMMON_LIB ${NFAPI_COMMON_SRC})
include_directories
(
${
NFAPI_DIR
}
/common/public_inc
)
include_directories
(
${
NFAPI_DIR
}
/common/public_inc
)
include_directories
(
${
CMAKE_CURRENT_BINARY_DIR
}
/openair2/E1AP/MESSAGES/
)
set
(
NFAPI_SRC
set
(
NFAPI_SRC
${
NFAPI_DIR
}
/nfapi/src/nfapi.c
${
NFAPI_DIR
}
/nfapi/src/nfapi.c
${
NFAPI_DIR
}
/nfapi/src/nfapi_p4.c
${
NFAPI_DIR
}
/nfapi/src/nfapi_p4.c
...
...
common/utils/ocp_itti/intertask_interface.h
View file @
6106207b
...
@@ -79,6 +79,7 @@ typedef struct IttiMsgText_s {
...
@@ -79,6 +79,7 @@ typedef struct IttiMsgText_s {
#include <openair2/COMMON/as_message.h>
#include <openair2/COMMON/as_message.h>
#include <openair2/RRC/LTE/rrc_types.h>
#include <openair2/RRC/LTE/rrc_types.h>
#include <openair2/COMMON/rrc_messages_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/UTIL/OctetString.h>
#include <openair3/NAS/COMMON/IES/AccessPointName.h>
#include <openair3/NAS/COMMON/IES/AccessPointName.h>
...
...
openair2/COMMON/e1ap_messages_def.h
View file @
6106207b
...
@@ -19,13 +19,13 @@
...
@@ -19,13 +19,13 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
#ifndef E1AP_MESSAGES_DEF_H_
#define E1AP_MESSAGES_DEF_H_
/* gNB_CUUP application layer -> E1AP messages */
/* gNB_CUUP application layer -> E1AP messages */
MESSAGE_DEF
(
E1AP_SETUP_REQ
,
MESSAGE_PRIORITY_MED
,
e1ap_setup_req_t
,
e1ap_setup_req
)
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 */
/* 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
)
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
)
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 */
openair2/COMMON/messages_def.h
View file @
6106207b
...
@@ -42,4 +42,4 @@
...
@@ -42,4 +42,4 @@
#include "udp_messages_def.h"
#include "udp_messages_def.h"
#include "gtpv1_u_messages_def.h"
#include "gtpv1_u_messages_def.h"
#include "flexran_messages_def.h"
#include "flexran_messages_def.h"
#include "e1ap_message
_types
.h"
#include "e1ap_message
s_def
.h"
openair2/E1AP/CMakeLists.txt
View file @
6106207b
add_subdirectory
(
MESSAGES
)
add_subdirectory
(
MESSAGES
)
add_library
(
E1AP e1ap.c
)
add_library
(
E1AP e1ap.c
e1ap_common.c
)
target_link_libraries
(
E1AP
target_link_libraries
(
E1AP
PUBLIC ASN1_E1AP_LIB
PUBLIC ASN1_E1AP_LIB
PRIVATE UTIL
)
PRIVATE UTIL
)
...
...
openair2/E1AP/e1ap.c
View file @
6106207b
...
@@ -22,34 +22,39 @@
...
@@ -22,34 +22,39 @@
*/
*/
#include "e1ap.h"
#include "e1ap.h"
#include "e1ap_common.h"
#define NUM_E1AP_MSG_HANDLERS 14
#define E1AP_NUM_MSG_HANDLERS 14
e1ap_message_processing_t
e1ap_message_processing
[
NUM_E1AP_MSG_HANDLERS
][
3
]
=
{
e1ap_message_processing_t
e1ap_message_processing
[
E1AP_NUM_MSG_HANDLERS
][
3
]
=
{
{
0
,
0
,
0
}
/* Reset */
{
0
,
0
,
0
}
/* ErrorIndication */
{
0
,
0
,
0
},
/* Reset */
{
0
,
0
,
0
}
/* privateMessage */
{
0
,
0
,
0
},
/* ErrorIndication */
{
e1apCUCP_handle_SETUP_REQUEST
,
e1apCUUP_handle_SETUP_RESPONSE
,
e1apCUUP_handle_SETUP_FAILURE
}
/* gNBCUUPE1Setup */
{
0
,
0
,
0
},
/* privateMessage */
{
0
,
0
,
0
}
/* gNBCUCPE1Setup */
{
e1apCUCP_handle_SETUP_REQUEST
,
e1apCUUP_handle_SETUP_RESPONSE
,
e1apCUUP_handle_SETUP_FAILURE
},
/* gNBCUUPE1Setup */
{
0
,
0
,
0
}
/* gNBCUUPConfigurationUpdate */
{
0
,
0
,
0
},
/* gNBCUCPE1Setup */
{
0
,
0
,
0
}
/* gNBCUCPConfigurationUpdate */
{
0
,
0
,
0
},
/* gNBCUUPConfigurationUpdate */
{
0
,
0
,
0
}
/* E1Release */
{
0
,
0
,
0
},
/* gNBCUCPConfigurationUpdate */
{
e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST
,
e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE
,
e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE
}
/* bearerContextSetup */
{
0
,
0
,
0
},
/* E1Release */
{
0
,
0
,
0
}
/* bearerContextModification */
{
e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST
,
e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE
,
e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE
},
/* bearerContextSetup */
{
0
,
0
,
0
}
/* bearerContextModificationRequired */
{
0
,
0
,
0
},
/* bearerContextModification */
{
0
,
0
,
0
}
/* bearerContextRelease */
{
0
,
0
,
0
},
/* bearerContextModificationRequired */
{
0
,
0
,
0
}
/* bearerContextReleaseRequired */
{
0
,
0
,
0
},
/* bearerContextRelease */
{
0
,
0
,
0
},
/* bearerContextReleaseRequired */
{
0
,
0
,
0
}
/* bearerContextInactivityNotification */
{
0
,
0
,
0
}
/* bearerContextInactivityNotification */
};
};
int
asn1_encoder_xer_print
=
1
;
const
char
*
e1ap_direction2String
(
int
e1ap_dir
)
{
static
const
char
*
e1ap_direction_String
[]
=
{
int
e1ap_assoc_id
(
bool
isCu
,
instance_t
instance
)
{
""
,
/* Nothing */
return
0
;
"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
)
{
const
uint8_t
*
const
data
,
const
uint32_t
data_length
)
{
E1AP_E1AP_PDU_t
pdu
=
{
0
};
E1AP_E1AP_PDU_t
pdu
=
{
0
};
int
ret
;
int
ret
;
...
@@ -61,7 +66,7 @@ int e1ap_handle_message(instance_t instance, uint32_t assoc_id, int32_t stream,
...
@@ -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 */
/* 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_unsuccessfulOutcome
)
||
(
pdu
.
present
<=
E1AP_E1AP_PDU_PR_NOTHING
))
{
||
(
pdu
.
present
<=
E1AP_E1AP_PDU_PR_NOTHING
))
{
LOG_E
(
E1AP
,
"[SCTP %d] Either procedureCode %ld or direction %d exceed expected
\n
"
,
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,
...
@@ -70,17 +75,17 @@ int e1ap_handle_message(instance_t instance, uint32_t assoc_id, int32_t stream,
return
-
1
;
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).
// 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
"
,
LOG_E
(
E1AP
,
"[SCTP %d] No handler for procedureCode %ld in %s
\n
"
,
assoc_id
,
pdu
.
choice
.
initiatingMessage
->
procedureCode
,
assoc_id
,
pdu
.
choice
.
initiatingMessage
->
procedureCode
,
f
1ap_direction2String
(
pdu
.
present
-
1
));
e
1ap_direction2String
(
pdu
.
present
-
1
));
ret
=-
1
;
ret
=-
1
;
}
else
{
}
else
{
/* Calling the right handler */
/* Calling the right handler */
LOG_I
(
E1AP
,
"Calling handler with instance %ld
\n
"
,
instance
);
LOG_I
(
E1AP
,
"Calling handler with instance %ld
\n
"
,
instance
);
ret
=
(
*
e1ap_message
s
_processing
[
pdu
.
choice
.
initiatingMessage
->
procedureCode
][
pdu
.
present
-
1
])
ret
=
(
*
e1ap_message_processing
[
pdu
.
choice
.
initiatingMessage
->
procedureCode
][
pdu
.
present
-
1
])
(
instance
,
assoc_id
,
stream
,
&
pdu
);
(
instance
,
&
pdu
);
}
}
ASN_STRUCT_FREE_CONTENTS_ONLY
(
asn_DEF_E1AP_E1AP_PDU
,
&
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,
...
@@ -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
)
{
void
cuup_task_handle_sctp_data_ind
(
instance_t
instance
,
sctp_data_ind_t
*
sctp_data_ind
)
{
int
result
;
int
result
;
DevAssert
(
sctp_data_ind
!=
NULL
);
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
);
sctp_data_ind
->
buffer
,
sctp_data_ind
->
buffer_length
);
result
=
itti_free
(
TASK_UNKNOWN
,
sctp_data_ind
->
buffer
);
result
=
itti_free
(
TASK_UNKNOWN
,
sctp_data_ind
->
buffer
);
AssertFatal
(
result
==
EXIT_SUCCESS
,
"Failed to free memory (%d)!
\n
"
,
result
);
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
)
{
void
e1ap_itti_send_sctp_close_association
(
bool
isCu
,
instance_t
instance
)
{
MessageDef
*
message
=
itti_alloc_new_message
(
TASK_S1AP
,
0
,
SCTP_CLOSE_ASSOCIATION
);
MessageDef
*
message
=
itti_alloc_new_message
(
TASK_S1AP
,
0
,
SCTP_CLOSE_ASSOCIATION
);
sctp_close_association_t
*
sctp_close_association
=
&
message
->
ittiMsg
.
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) {
...
@@ -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
)
{
int
e1ap_send_RESET_ACKNOWLEDGE
(
instance_t
instance
,
E1AP_Reset_t
*
Reset
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1ap_handle_RESET
(
instance_t
instance
,
int
e1ap_handle_RESET
(
instance_t
instance
,
...
@@ -155,6 +124,7 @@ int e1ap_handle_RESET(instance_t instance,
...
@@ -155,6 +124,7 @@ int e1ap_handle_RESET(instance_t instance,
uint32_t
stream
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1ap_handle_RESET_ACKNOWLEDGE
(
instance_t
instance
,
int
e1ap_handle_RESET_ACKNOWLEDGE
(
instance_t
instance
,
...
@@ -162,6 +132,7 @@ int e1ap_handle_RESET_ACKNOWLEDGE(instance_t instance,
...
@@ -162,6 +132,7 @@ int e1ap_handle_RESET_ACKNOWLEDGE(instance_t instance,
uint32_t
stream
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
/*
/*
...
@@ -172,10 +143,12 @@ int e1ap_handle_ERROR_INDICATION(instance_t instance,
...
@@ -172,10 +143,12 @@ int e1ap_handle_ERROR_INDICATION(instance_t instance,
uint32_t
stream
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1ap_send_ERROR_INDICATION
(
instance_t
instance
,
E1AP_ErrorIndication_t
*
ErrorIndication
)
{
int
e1ap_send_ERROR_INDICATION
(
instance_t
instance
,
E1AP_ErrorIndication_t
*
ErrorIndication
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
...
@@ -185,14 +158,14 @@ int e1ap_send_ERROR_INDICATION(instance_t instance, E1AP_ErrorIndication_t *Erro
...
@@ -185,14 +158,14 @@ int e1ap_send_ERROR_INDICATION(instance_t instance, E1AP_ErrorIndication_t *Erro
int
e1apCUUP_send_SETUP_REQUEST
(
instance_t
instance
)
{
int
e1apCUUP_send_SETUP_REQUEST
(
instance_t
instance
)
{
E1AP_E1AP_PDU_t
pdu
=
{
0
};
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 */
/* Create */
/* 0. pdu Type */
/* 0. pdu Type */
pdu
.
present
=
E1AP_E1AP_PDU_PR_initiatingMessage
;
pdu
.
present
=
E1AP_E1AP_PDU_PR_initiatingMessage
;
asn1cCalloc
(
pdu
.
choice
.
initiatingMessage
,
initMsg
);
asn1cCalloc
(
pdu
.
choice
.
initiatingMessage
,
initMsg
);
initMsg
->
procedureCode
=
E1AP_ProcedureCode_id_gNB_CU_UP_E1Setup
;
initMsg
->
procedureCode
=
E1AP_ProcedureCode_id_gNB_CU_UP_E1Setup
;
initMsg
->
criticality
=
E1AP_Criticality_reject
;
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
;
E1AP_GNB_CU_UP_E1SetupRequest_t
*
e1SetupUP
=
&
initMsg
->
value
.
choice
.
GNB_CU_UP_E1SetupRequest
;
/* mandatory */
/* mandatory */
/* c1. Transaction ID (integer value) */
/* c1. Transaction ID (integer value) */
...
@@ -212,27 +185,28 @@ int e1apCUUP_send_SETUP_REQUEST(instance_t instance) {
...
@@ -212,27 +185,28 @@ int e1apCUUP_send_SETUP_REQUEST(instance_t instance) {
/* mandatory */
/* mandatory */
/* c4. CN Support */
/* c4. CN Support */
asn1cSequenceAdd
(
e1SetupUP
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ieC4
);
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
;
ieC4
->
criticality
=
E1AP_Criticality_reject
;
ie
c
4
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupRequestIEs__value_PR_CNSupport
;
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
.
choice
.
CNSupport
=
setup
->
cn_support
;
/* mandatory */
/* mandatory */
/* c5. Supported PLMNs */
/* c5. Supported PLMNs */
asn1cSequenceAdd
(
e1SetupUP
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ieC5
);
asn1cSequenceAdd
(
e1SetupUP
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ieC5
);
ie
c
5
->
id
=
E1AP_ProtocolIE_ID_id_SupportedPLMNs
;
ie
C
5
->
id
=
E1AP_ProtocolIE_ID_id_SupportedPLMNs
;
ie
c
5
->
criticality
=
E1AP_Criticality_reject
;
ie
C
5
->
criticality
=
E1AP_Criticality_reject
;
ie
c
5
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupRequestIEs__value_PR_SupportedPLMNs_List
;
ie
C
5
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupRequestIEs__value_PR_SupportedPLMNs_List
;
int
numSupportedPLMNs
=
setup
->
supported_plmns
;
int
numSupportedPLMNs
=
setup
->
supported_plmns
;
for
(
int
i
=
0
;
i
<
numSupportedPLMNs
;
i
++
)
{
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 */
/* 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
,
int
e1apCUCP_send_SETUP_RESPONSE
(
instance_t
instance
,
...
@@ -248,16 +222,18 @@ 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
;
E1AP_GNB_CU_UP_E1SetupResponse_t
*
out
=
&
pdu
.
choice
.
successfulOutcome
->
value
.
choice
.
GNB_CU_UP_E1SetupResponse
;
/* mandatory */
/* mandatory */
/* c1. Transaction ID (integer value) */
/* 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
->
id
=
E1AP_ProtocolIE_ID_id_TransactionID
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupResponseIEs__value_PR_TransactionID
;
ieC1
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupResponseIEs__value_PR_TransactionID
;
ieC1
->
value
.
choice
.
TransactionID
=
e1ap_setup_resp
->
transac_id
;
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
};
E1AP_E1AP_PDU_t
pdu
=
{
0
};
/* Create */
/* Create */
/* 0. pdu Type */
/* 0. pdu Type */
...
@@ -266,56 +242,56 @@ int e1apCUCP_send_SETUP_FAILURE(e1ap_setup_resp_t *e1ap_setup_resp) {
...
@@ -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
->
procedureCode
=
E1AP_ProcedureCode_id_gNB_CU_UP_E1Setup
;
initMsg
->
criticality
=
E1AP_Criticality_reject
;
initMsg
->
criticality
=
E1AP_Criticality_reject
;
initMsg
->
value
.
present
=
E1AP_UnsuccessfulOutcome__value_PR_GNB_CU_UP_E1SetupFailure
;
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 */
/* mandatory */
/* c1. Transaction ID (integer value) */
/* 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
->
id
=
E1AP_ProtocolIE_ID_id_TransactionID
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupResponseIEs__value_PR_TransactionID
;
ieC1
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupResponseIEs__value_PR_TransactionID
;
ieC1
->
value
.
choice
.
TransactionID
=
e1ap_setup_resp
->
transac_id
;
ieC1
->
value
.
choice
.
TransactionID
=
e1ap_setup_resp
->
transac_id
;
/* mandatory */
/* mandatory */
/* c2. cause (integer value) */
/* 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
->
id
=
E1AP_ProtocolIE_ID_id_Cause
;
ieC2
->
criticality
=
E1AP_Criticality_ignore
;
ieC2
->
criticality
=
E1AP_Criticality_ignore
;
ieC2
->
value
.
present
=
E1AP_GNB_CU_UP_E1SetupFailureIEs__value_PR_Cause
;
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
.
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
,
int
e1apCUCP_handle_SETUP_REQUEST
(
instance_t
instance
,
uint32_t
assoc_id
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
*
ie
;
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
*
ie
;
DevAssert
(
pdu
!=
NULL
);
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 */
/* assoc_id */
req
->
assoc_id
=
assoc_id
;
/* req->assoc_id = assoc_id; */
/* transac_id */
/* transac_id */
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ie
,
in
,
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ie
,
in
,
E1AP_ProtocolIE_ID_id_TransactionID
,
true
);
E1AP_ProtocolIE_ID_id_TransactionID
,
true
);
asn_INTEGER2ulong
(
&
ie
->
value
.
choice
.
TransactionID
,
&
req
->
transac_id
)
;
req
->
transac_id
=
ie
->
value
.
choice
.
TransactionID
;
LOG_D
(
E1AP
,
"gNB CU UP E1 setup request transaction ID: %d
\n
"
,
req
->
transac_id
);
LOG_D
(
E1AP
,
"gNB CU UP E1 setup request transaction ID: %
l
d
\n
"
,
req
->
transac_id
);
/* gNB CU UP ID */
/* gNB CU UP ID */
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ie
,
in
,
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ie
,
in
,
E1AP_ProtocolIE_ID_id_gNB_CU_UP_ID
,
true
);
E1AP_ProtocolIE_ID_id_gNB_CU_UP_ID
,
true
);
asn_INTEGER2ulong
(
&
ie
->
value
.
choice
.
GNB_CU_UP_ID
,
&
req
->
gNB_cu_up_id
);
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 */
/* CN Support */
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ie
,
in
,
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ie
,
in
,
E1AP_ProtocolIE_ID_id_CNSupport
,
true
);
E1AP_ProtocolIE_ID_id_CNSupport
,
true
);
asn_INTEGER2ulong
(
&
ie
->
value
.
choice
.
GNB_CU_UP_ID
,
&
req
->
cn_support
)
;
req
->
cn_support
=
ie
->
value
.
choice
.
CNSupport
;
LOG_D
(
E1AP
,
"E1ap CN support: %d
\n
"
,
req
->
cn_support
);
LOG_D
(
E1AP
,
"E1ap CN support: %
l
d
\n
"
,
req
->
cn_support
);
/* Supported PLMNs */
/* Supported PLMNs */
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupRequestIEs_t
,
ie
,
in
,
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,
...
@@ -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
]);
E1AP_SupportedPLMNs_Item_t
*
supported_plmn_item
=
(
E1AP_SupportedPLMNs_Item_t
*
)(
ie
->
value
.
choice
.
SupportedPLMNs_List
.
list
.
array
[
i
]);
/* PLMN Identity */
/* 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
].
mcc
,
req
->
plmns
[
i
].
mnc
,
req
->
plmns
[
i
].
mnc
,
req
->
plmns
[
i
].
mnc_digit_length
);
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
);
LOG_D
(
E1AP
,
"MCC: %d
\n
MNC: %d
\n
"
,
req
->
plmns
[
i
].
mcc
,
req
->
plmns
[
i
].
mnc
);
}
}
/* Create ITTI message and send to queue */
/* Create ITTI message and send to queue */
return
0
;
}
}
int
e1apCUUP_handle_SETUP_RESPONSE
(
instance_t
instance
,
int
e1apCUUP_handle_SETUP_RESPONSE
(
instance_t
instance
,
...
@@ -351,25 +327,26 @@ 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
,
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
"
);
"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_E1SetupResponse_t
*
in
=
&
pdu
->
choice
.
successfulOutcome
->
value
.
choice
.
GNB_CU_UP_E1SetupResponse
;
E1AP_GNB_CU_UP_E1SetupResponseIEs
*
ie
;
E1AP_GNB_CU_UP_E1SetupResponseIEs
_t
*
ie
;
/* transac_id */
/* transac_id */
int
transaction_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
);
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
);
LOG_D
(
E1AP
,
"gNB CU UP E1 setup response transaction ID: %d
\n
"
,
transaction_id
);
/* do the required processing */
/* do the required processing */
return
0
;
}
}
int
e1apCUUP_handle_SETUP_FAILURE
(
instance_t
instance
,
int
e1apCUUP_handle_SETUP_FAILURE
(
instance_t
instance
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_GNB_CU_UP_E1SetupFailureIEs_t
*
ie
;
E1AP_GNB_CU_UP_E1SetupFailureIEs_t
*
ie
;
DevAssert
(
pdu
!=
NULL
);
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 */
/* Transaction ID */
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupFailureIEs_t
,
ie
,
in
,
F1AP_FIND_PROTOCOLIE_BY_ID
(
E1AP_GNB_CU_UP_E1SetupFailureIEs_t
,
ie
,
in
,
E1AP_ProtocolIE_ID_id_TransactionID
,
true
);
E1AP_ProtocolIE_ID_id_TransactionID
,
true
);
...
@@ -393,25 +370,25 @@ int e1apCUUP_send_CONFIGURATION_UPDATE(instance_t instance) {
...
@@ -393,25 +370,25 @@ int e1apCUUP_send_CONFIGURATION_UPDATE(instance_t instance) {
msg
->
procedureCode
=
E1AP_ProcedureCode_id_gNB_CU_UP_ConfigurationUpdate
;
msg
->
procedureCode
=
E1AP_ProcedureCode_id_gNB_CU_UP_ConfigurationUpdate
;
msg
->
criticality
=
E1AP_Criticality_reject
;
msg
->
criticality
=
E1AP_Criticality_reject
;
msg
->
value
.
present
=
E1AP_InitiatingMessage__value_PR_GNB_CU_UP_ConfigurationUpdate
;
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 */
/* mandatory */
/* c1. Transaction ID (integer value) */
/* c1. Transaction ID (integer value) */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_ConfigurationUpdateIEs_t
,
ieC1
);
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_ConfigurationUpdateIEs_t
,
ieC1
);
ieC1
->
id
=
E1AP_ProtocolIE_ID_id_TransactionID
;
ieC1
->
id
=
E1AP_ProtocolIE_ID_id_TransactionID
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
value
.
present
=
E1AP_GNB_CU_UP_ConfigurationUpdateIEs__value_PR_TransactionID
;
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 */
/* mandatory */
/* c2. Supported PLMNs */
/* c2. Supported PLMNs */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_ConfigurationUpdateIEs_t
,
ieC2
);
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_ConfigurationUpdateIEs_t
,
ieC2
);
ie
c
2
->
id
=
E1AP_ProtocolIE_ID_id_SupportedPLMNs
;
ie
C
2
->
id
=
E1AP_ProtocolIE_ID_id_SupportedPLMNs
;
ie
c
2
->
criticality
=
E1AP_Criticality_reject
;
ie
C
2
->
criticality
=
E1AP_Criticality_reject
;
ie
c
2
->
value
.
present
=
E1AP_GNB_CU_UP_ConfigurationUpdateIEs__value_PR_SupportedPLMNs_List
;
ie
C
2
->
value
.
present
=
E1AP_GNB_CU_UP_ConfigurationUpdateIEs__value_PR_SupportedPLMNs_List
;
int
numSupportedPLMNs
=
1
;
int
numSupportedPLMNs
=
1
;
for
(
int
i
=
0
;
i
<
numSupportedPLMNs
;
i
++
)
{
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 */
/* 5.1 PLMN Identity */
OCTET_STRING_fromBuf
(
&
supportedPLMN
->
pLMN_Identity
,
"OAI"
,
strlen
(
"OAI"
));
OCTET_STRING_fromBuf
(
&
supportedPLMN
->
pLMN_Identity
,
"OAI"
,
strlen
(
"OAI"
));
}
}
...
@@ -419,39 +396,43 @@ int e1apCUUP_send_CONFIGURATION_UPDATE(instance_t instance) {
...
@@ -419,39 +396,43 @@ int e1apCUUP_send_CONFIGURATION_UPDATE(instance_t instance) {
/* mandatory */
/* mandatory */
/* c3. TNLA to remove list */
/* c3. TNLA to remove list */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_GNB_CU_UP_ConfigurationUpdateIEs_t
,
ieC3
);
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
->
id
=
E1AP_ProtocolIE_ID_id_GNB_CU_UP_TNLA_To_Remove_List
;
ie
c
3
->
criticality
=
E1AP_Criticality_reject
;
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
->
value
.
present
=
E1AP_GNB_CU_UP_ConfigurationUpdateIEs__value_PR_GNB_CU_UP_TNLA_To_Remove_List
;
int
numTNLAtoRemoveList
=
1
;
int
numTNLAtoRemoveList
=
1
;
for
(
int
i
=
0
;
i
<
numTNLAtoRemoveList
;
i
++
)
{
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
;
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
)
{
int
e1apCUCP_send_gNB_DU_CONFIGURATION_FAILURE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUCP_send_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE
(
instance_t
instance
)
{
int
e1apCUCP_send_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUCP_handle_CONFIGURATION_UPDATE
(
instance_t
instance
,
int
e1apCUCP_handle_CONFIGURATION_UPDATE
(
instance_t
instance
,
uint32_t
assoc_id
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
/*
E1AP_GNB_CU_UP_E1SetupRequestIEs_t *ie;
E1AP_GNB_CU_UP_E1SetupRequestIEs_t *ie;
DevAssert(pdu != NULL);
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
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUUP_handle_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE
(
instance_t
instance
,
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,
...
@@ -459,6 +440,7 @@ int e1apCUUP_handle_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance,
uint32_t
stream
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUUP_handle_gNB_DU_CONFIGURATION_FAILURE
(
instance_t
instance
,
int
e1apCUUP_handle_gNB_DU_CONFIGURATION_FAILURE
(
instance_t
instance
,
...
@@ -466,6 +448,7 @@ 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
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
/*
/*
...
@@ -474,10 +457,12 @@ int e1apCUUP_handle_gNB_DU_CONFIGURATION_FAILURE(instance_t instance,
...
@@ -474,10 +457,12 @@ int e1apCUUP_handle_gNB_DU_CONFIGURATION_FAILURE(instance_t instance,
int
e1ap_send_RELEASE_REQUEST
(
instance_t
instance
)
{
int
e1ap_send_RELEASE_REQUEST
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1ap_send_RELEASE_ACKNOWLEDGE
(
instance_t
instance
)
{
int
e1ap_send_RELEASE_ACKNOWLEDGE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1ap_handle_RELEASE_REQUEST
(
instance_t
instance
,
int
e1ap_handle_RELEASE_REQUEST
(
instance_t
instance
,
...
@@ -485,6 +470,7 @@ int e1ap_handle_RELEASE_REQUEST(instance_t instance,
...
@@ -485,6 +470,7 @@ int e1ap_handle_RELEASE_REQUEST(instance_t instance,
uint32_t
stream
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1ap_handle_RELEASE_ACKNOWLEDGE
(
instance_t
instance
,
int
e1ap_handle_RELEASE_ACKNOWLEDGE
(
instance_t
instance
,
...
@@ -492,6 +478,7 @@ int e1ap_handle_RELEASE_ACKNOWLEDGE(instance_t instance,
...
@@ -492,6 +478,7 @@ int e1ap_handle_RELEASE_ACKNOWLEDGE(instance_t instance,
uint32_t
stream
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
/*
/*
...
@@ -499,7 +486,7 @@ int e1ap_handle_RELEASE_ACKNOWLEDGE(instance_t instance,
...
@@ -499,7 +486,7 @@ int e1ap_handle_RELEASE_ACKNOWLEDGE(instance_t instance,
*/
*/
int
e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST
(
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
};
E1AP_E1AP_PDU_t
pdu
=
{
0
};
/* Create */
/* Create */
/* 0. pdu Type */
/* 0. pdu Type */
...
@@ -537,8 +524,7 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
...
@@ -537,8 +524,7 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
ieC4
->
id
=
E1AP_ProtocolIE_ID_id_Serving_PLMN
;
ieC4
->
id
=
E1AP_ProtocolIE_ID_id_Serving_PLMN
;
ieC4
->
criticality
=
E1AP_Criticality_ignore
;
ieC4
->
criticality
=
E1AP_Criticality_ignore
;
ieC4
->
value
.
present
=
E1AP_BearerContextSetupRequestIEs__value_PR_PLMN_Identity
;
ieC4
->
value
.
present
=
E1AP_BearerContextSetupRequestIEs__value_PR_PLMN_Identity
;
uint64_t
servingPLMNId
=
getServingPlmn
();
// TODO: define this
MCC_MNC_TO_PLMNID
(
bearerCxt
->
servingPLMNid
.
mcc
,
bearerCxt
->
servingPLMNid
.
mnc
,
bearerCxt
->
servingPLMNid
.
mnc_digit_length
,
&
ieC4
->
value
.
choice
.
PLMN_Identity
);
OCTET_STRING_fromBuf
(
&
ieC4
->
value
.
choice
.
PLMN_Identity
,
servingPLMNId
);
/* mandatory */
/* mandatory */
/* Activity Notification Level */
/* Activity Notification Level */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextSetupRequestIEs_t
,
ieC5
);
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
E1AP_BearerContextSetupRequestIEs_t
,
ieC5
);
...
@@ -552,25 +538,25 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
...
@@ -552,25 +538,25 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
ieC6
->
id
=
E1AP_ProtocolIE_ID_id_System_BearerContextSetupRequest
;
ieC6
->
id
=
E1AP_ProtocolIE_ID_id_System_BearerContextSetupRequest
;
ieC6
->
criticality
=
E1AP_Criticality_reject
;
ieC6
->
criticality
=
E1AP_Criticality_reject
;
if
(
0
)
{
// EUTRAN
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
));
E1AP_EUTRAN_BearerContextSetupRequest_t
*
msgEUTRAN
=
calloc
(
1
,
sizeof
(
E1AP_EUTRAN_BearerContextSetupRequest_t
));
ieC6
->
System_BearerContextSetupRequest
.
choice
.
e_UTRAN_BearerContextSetupRequest
=
(
E1AP_ProtocolIE_Container
*
)
msgEUTRAN
;
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
->
id
=
E1AP_ProtocolIE_ID_id_DRB_To_Setup_List_EUTRAN
;
msgEUTRAN
->
value
.
present
=
E1AP_EUTRAN_BearerContextSetupRequest__value_PR_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
;
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
++
)
{
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
->
dRB_ID
=
i
->
drbId
;
ieC6_1
->
pD
PC
_Configuration
.
pDCP_SN_Size_UL
=
i
->
pDCP_SN_Size_UL
;
ieC6_1
->
pD
CP
_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
CP
_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
.
rLC_Mode
=
i
->
rLC_Mode
;
ieC6_1
->
eUTRAN_QoS
.
qCI
=
i
->
qci
;
ieC6_1
->
eUTRAN_QoS
.
qCI
=
i
->
qci
;
ieC6_1
->
eUTRAN_QoS
.
eUTRANallocationAndRetentionPriority
.
priorityLevel
=
i
->
qosPriorityLevel
;
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_emptionCapability
=
i
->
pre
_e
mptionCapability
;
ieC6_1
->
eUTRAN_QoS
.
eUTRANallocationAndRetentionPriority
.
pre_emptionVulnerability
=
i
->
pre
E
mptionVulnerability
;
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
;
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
);
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,
...
@@ -578,22 +564,22 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
INT32_TO_OCTET_STRING
(
i
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
INT32_TO_OCTET_STRING
(
i
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
for
(
cell_group_t
*
j
=
i
->
cellGroupList
;
j
<
i
->
cellGroupList
+
i
->
numCellGroups
;
j
++
)
{
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
;
ieC6_1_1
->
cell_Group_ID
=
j
->
id
;
}
}
}
}
}
else
{
}
else
{
/* mandatory */
/* 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
));
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
->
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
;
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
;
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
++
)
{
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_ID
=
i
->
sessionId
;
ieC6_1
->
pDU_Session_Type
=
i
->
sessionType
;
ieC6_1
->
pDU_Session_Type
=
i
->
sessionType
;
...
@@ -609,20 +595,20 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
...
@@ -609,20 +595,20 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
INT32_TO_OCTET_STRING
(
i
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
INT32_TO_OCTET_STRING
(
i
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
for
(
DRB_nGRAN_to_setup_t
*
j
=
i
->
DRBnGRanList
;
j
<
i
->
DRBnGRanList
+
i
->
numDRB2Setup
;
j
++
)
{
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
->
dRB_ID
=
j
->
id
;
ieC6_1_1
->
sDAP_Configuration
.
defaultDRB
=
j
->
defaultDRB
;
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_UL
=
j
->
sDAP_Header_UL
;
ieC6_1_1
->
sDAP_Configuration
.
sDAP_Header_DL
=
j
->
sDAP_Header_DL
;
ieC6_1_1
->
sDAP_Configuration
.
sDAP_Header_DL
=
j
->
sDAP_Header_DL
;
for
(
cell_group_t
*
k
=
j
->
cellGroupList
;
k
<
j
->
cellGroupList
+
numCellGroups
;
k
++
)
{
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
,
ieC6_1_1_1
);
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
;
ieC6_1_1_1
->
cell_Group_ID
=
k
->
id
;
}
}
for
(
qos_flow_to_setup_t
*
k
=
j
->
qosFlows
;
k
<
j
->
qosFlows
+
j
->
numQosFlow2Setup
;
k
++
)
{
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
;
ieC6_1_1_1
->
qoS_Flow_Identifier
=
k
->
id
;
if
(
0
)
{
// non Dynamic 5QI
if
(
0
)
{
// non Dynamic 5QI
...
@@ -646,7 +632,8 @@ int e1apCUCP_send_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
...
@@ -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
,
int
e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE
(
instance_t
instance
,
...
@@ -655,49 +642,49 @@ 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 */
/* Create */
/* 0. pdu Type */
/* 0. pdu Type */
pdu
.
present
=
E1AP_E1AP_PDU_PR_successfulOutcome
;
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
->
procedureCode
=
E1AP_ProcedureCode_id_bearerContextSetup
;
msg
->
criticality
=
E1AP_Criticality_reject
;
msg
->
criticality
=
E1AP_Criticality_reject
;
msg
->
value
.
present
=
E1AP_SuccessfulOutcome__value_PR_BearerContextSetupResponse
;
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 */
/* mandatory */
/* c1. gNB-CU-CP UE E1AP ID */
/* 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
->
id
=
E1AP_ProtocolIE_ID_id_gNB_CU_CP_UE_E1AP_ID
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
criticality
=
E1AP_Criticality_reject
;
ieC1
->
value
.
present
=
E1AP_BearerContextSetupResponseIEs__value_PR_GNB_CU_CP_UE_E1AP_ID
;
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
;
ieC1
->
value
.
choice
.
GNB_CU_CP_UE_E1AP_ID
=
resp
->
gNB_cu_cp_ue_id
;
/* mandatory */
/* mandatory */
/* c2. gNB-CU-UP UE E1AP ID */
/* 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
->
id
=
E1AP_ProtocolIE_ID_id_gNB_CU_UP_UE_E1AP_ID
;
ieC2
->
criticality
=
E1AP_Criticality_reject
;
ieC2
->
criticality
=
E1AP_Criticality_reject
;
ieC2
->
value
.
present
=
E1AP_BearerContextSetupResponseIEs__value_PR_GNB_CU_UP_UE_E1AP_ID
;
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
;
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
->
id
=
E1AP_ProtocolIE_ID_id_System_BearerContextSetupRequest
;
ieC3
->
criticality
=
E1AP_Criticality_reject
;
ieC3
->
criticality
=
E1AP_Criticality_reject
;
if
(
0
)
{
// EUTRAN
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
));
E1AP_EUTRAN_BearerContextSetupResponse_t
*
msgEUTRAN
=
calloc
(
1
,
sizeof
(
E1AP_EUTRAN_BearerContextSetupResponse_t
));
ieC3
->
System_BearerContextSetupResponse
.
choice
.
e_UTRAN_BearerContextSetupResponse
=
(
E1AP_ProtocolIE_Container
*
)
msgEUTRAN
;
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
->
id
=
E1AP_ProtocolIE_ID_id_DRB_Setup_List_EUTRAN
;
msgEUTRAN
.
criticality
=
E1AP_Criticality_reject
;
msgEUTRAN
->
criticality
=
E1AP_Criticality_reject
;
msgEUTRAN
->
value
.
present
=
E1AP_EUTRAN_BearerContextSetupResponse__value_PR_DRB_Setup_List_EUTRAN
;
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
;
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
++
)
{
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
->
dRB_ID
=
i
->
drbId
;
ieC3_1
->
s1_DL_UP_TNL_Information
.
present
=
E1AP_UP_TNL_Information_PR_gTPTunnel
;
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
);
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING
(
i
->
tlAddress
,
&
gTPTunnel
->
transportLayerAddress
);
INT32_TO_OCTET_STRING
(
i
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
INT32_TO_OCTET_STRING
(
i
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
for
(
up_params_t
*
j
=
i
->
UpParamList
;
j
<
i
->
UpParamList
+
i
->
numUpParam
;
j
++
)
{
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
;
ieC3_1_1
->
uP_TNL_Information
.
present
=
E1AP_UP_TNL_Information_PR_gTPTunnel
;
asn1cCalloc
(
ieC3_1_1
->
uP_TNL_Information
.
choice
.
gTPTunnel
,
gTPTunnel
);
asn1cCalloc
(
ieC3_1_1
->
uP_TNL_Information
.
choice
.
gTPTunnel
,
gTPTunnel
);
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING
(
j
->
tlAddress
,
&
gTPTunnel
->
transportLayerAddress
);
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,
...
@@ -705,16 +692,16 @@ int e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(instance_t instance,
}
}
}
}
}
else
{
}
else
{
ieC3
->
System_BearerContextSetupResponse
.
present
=
E1AP_System_BearerContextSetupResponse_PR_nG_RAN_BearerContextSetupResponse
;
ieC3
->
value
.
choice
.
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
));
E1AP_NG_RAN_BearerContextSetupResponse_t
*
msg
NG
RAN
=
calloc
(
1
,
sizeof
(
E1AP_NG_RAN_BearerContextSetupResponse_t
));
ieC3
->
System_BearerContextSetupResponse
.
choice
.
nG_RAN_BearerContextSetupResponse
=
(
E1AP_ProtocolIE_Container
*
)
msgNGRAN
;
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
->
id
=
E1AP_ProtocolIE_ID_id_DRB_Setup_List_EUTRAN
;
msgNGRAN
.
criticality
=
E1AP_Criticality_reject
;
msgNGRAN
->
criticality
=
E1AP_Criticality_reject
;
msgNGRAN
->
value
.
present
=
E1AP_NG_RAN_BearerContextSetupResponse__value_PR_PDU_Session_Resource_Setup_List
;
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
;
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
++
)
{
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
->
pDU_Session_ID
=
i
->
id
;
ieC3_1
->
nG_DL_UP_TNL_Information
.
present
=
E1AP_UP_TNL_Information_PR_gTPTunnel
;
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,
...
@@ -723,26 +710,26 @@ int e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(instance_t instance,
INT32_TO_OCTET_STRING
(
i
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
INT32_TO_OCTET_STRING
(
i
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
for
(
DRB_nGRAN_setup_t
*
j
=
i
->
DRBnGRanList
;
j
<
i
->
DRBnGRanList
+
i
->
numDRBSetup
;
j
++
)
{
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
;
ieC3_1_1
->
dRB_ID
=
j
->
id
;
for
(
up_params_t
*
k
=
j
->
UpParamList
;
k
<
j
->
UpParamList
+
j
->
numUpParam
;
k
++
)
{
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
);
asn1cSequenceAdd
(
ieC3_1_1
->
uL_UP_Transport_Parameters
.
list
,
E1AP_UP_Parameters_Item
_t
,
ieC3_1_1_1
);
ieC3_1_1
->
uP_TNL_Information
.
present
=
E1AP_UP_TNL_Information_PR_gTPTunnel
;
ieC3_1_1
_1
->
uP_TNL_Information
.
present
=
E1AP_UP_TNL_Information_PR_gTPTunnel
;
asn1cCalloc
(
ieC3_1_1
->
uP_TNL_Information
.
choice
.
gTPTunnel
,
gTPTunnel
);
asn1cCalloc
(
ieC3_1_1
_1
->
uP_TNL_Information
.
choice
.
gTPTunnel
,
gTPTunnel
);
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING
(
k
->
tlAddress
,
&
gTPTunnel
->
transportLayerAddress
);
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING
(
k
->
tlAddress
,
&
gTPTunnel
->
transportLayerAddress
);
INT32_TO_OCTET_STRING
(
k
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
INT32_TO_OCTET_STRING
(
k
->
teId
,
&
gTPTunnel
->
gTP_TEID
);
}
}
for
(
qos_flow_setup_t
*
k
=
j
->
qosFlows
;
k
<
j
->
qosFlows
+
j
->
numQosFlowSetup
;
k
++
)
{
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
;
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
++
)
{
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
->
dRB_ID
=
j
->
id
;
ieC3_1_1
->
cause
.
present
=
j
->
cause_type
;
ieC3_1_1
->
cause
.
present
=
j
->
cause_type
;
...
@@ -770,11 +757,13 @@ int e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(instance_t instance,
...
@@ -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
)
{
int
e1apCUUP_send_BEARER_CONTEXT_SETUP_FAILURE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST
(
instance_t
instance
,
int
e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST
(
instance_t
instance
,
...
@@ -789,17 +778,17 @@ 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
,
AssertFatal
(
pdu
->
choice
.
initiatingMessage
->
value
.
present
==
E1AP_InitiatingMessage__value_PR_BearerContextSetupRequest
,
"initiatingMessage->value.present != E1AP_InitiatingMessage__value_PR_BearerContextSetupRequest
\n
"
);
"initiatingMessage->value.present != E1AP_InitiatingMessage__value_PR_BearerContextSetupRequest
\n
"
);
E1AP_BearerContextSetupRequest_t
*
in
=
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
BearerContextSetupRequest
;
E1AP_BearerContextSetupRequest_t
*
in
=
&
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
BearerContextSetupRequest
;
E1AP_
GNB_CU_CP_E1
SetupRequestIEs_t
*
ie
;
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
);
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
++
)
{
for
(
int
i
=
0
;
i
<
in
->
protocolIEs
.
list
.
count
;
i
++
)
{
ie
=
in
.
protocolIEs
.
list
.
array
[
i
];
ie
=
in
->
protocolIEs
.
list
.
array
[
i
];
switch
(
ie
->
id
)
{
switch
(
ie
->
id
)
{
case
E1AP_ProtocolIE_ID_id_gNB_CU_CP_UE_E1AP_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,
...
@@ -807,7 +796,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
"ie->criticality != E1AP_Criticality_reject
\n
"
);
"ie->criticality != E1AP_Criticality_reject
\n
"
);
AssertFatal
(
ie
->
value
.
present
==
E1AP_BearerContextSetupRequestIEs__value_PR_GNB_CU_CP_UE_E1AP_ID
,
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
"
);
"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
;
break
;
case
E1AP_ProtocolIE_ID_id_SecurityInformation
:
case
E1AP_ProtocolIE_ID_id_SecurityInformation
:
...
@@ -816,7 +805,9 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
...
@@ -816,7 +805,9 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
AssertFatal
(
ie
->
value
.
present
==
E1AP_BearerContextSetupRequestIEs__value_PR_SecurityInformation
,
AssertFatal
(
ie
->
value
.
present
==
E1AP_BearerContextSetupRequestIEs__value_PR_SecurityInformation
,
"ie->value.present != E1AP_BearerContextSetupRequestIEs__value_PR_SecurityInformation
\n
"
);
"ie->value.present != E1AP_BearerContextSetupRequestIEs__value_PR_SecurityInformation
\n
"
);
bearerCxt
->
cipheringAlgorithm
=
ie
->
value
.
choice
.
SecurityInformation
.
securityAlgorithm
.
cipheringAlgorithm
;
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
;
break
;
case
E1AP_ProtocolIE_ID_id_UEDLAggregateMaximumBitRate
:
case
E1AP_ProtocolIE_ID_id_UEDLAggregateMaximumBitRate
:
...
@@ -824,7 +815,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
...
@@ -824,7 +815,7 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
"ie->criticality != E1AP_Criticality_reject
\n
"
);
"ie->criticality != E1AP_Criticality_reject
\n
"
);
AssertFatal
(
ie
->
value
.
present
==
E1AP_BearerContextSetupRequestIEs__value_PR_BitRate
,
AssertFatal
(
ie
->
value
.
present
==
E1AP_BearerContextSetupRequestIEs__value_PR_BitRate
,
"ie->value.present != E1AP_BearerContextSetupRequestIEs__value_PR_BitRate
\n
"
);
"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
;
break
;
case
E1AP_ProtocolIE_ID_id_Serving_PLMN
:
case
E1AP_ProtocolIE_ID_id_Serving_PLMN
:
...
@@ -851,42 +842,41 @@ int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(instance_t instance,
...
@@ -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
,
int
e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE
(
instance_t
instance
,
uint32_t
assoc_id
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
pdu
->
present
==
E1AP_E1AP_PDU_PR_successfulOutcome
,
AssertFatal
(
pdu
->
present
==
E1AP_E1AP_PDU_PR_successfulOutcome
,
"pdu->present != E1AP_E1AP_PDU_PR_successfulOutcome
\n
"
);
"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
"
);
"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
"
);
"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
"
);
"initiatingMessage->value.present != E1AP_InitiatingMessage__value_PR_BearerContextSetupRequest
\n
"
);
E1AP_BearerContextSetupResponse_t
*
in
=
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
BearerContextSetupRequest
;
E1AP_BearerContextSetupResponse_t
*
in
=
&
pdu
->
choice
.
successfulOutcome
->
value
.
choice
.
BearerContextSetupResponse
;
E1AP_
GNB_CU_CP_E1SetupRequest
IEs_t
*
ie
;
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
);
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
++
)
{
for
(
int
i
=
0
;
i
<
in
->
protocolIEs
.
list
.
count
;
i
++
)
{
ie
=
in
.
protocolIEs
.
list
.
array
[
i
];
ie
=
in
->
protocolIEs
.
list
.
array
[
i
];
switch
(
ie
->
id
)
{
switch
(
ie
->
id
)
{
case
E1AP_ProtocolIE_ID_id_gNB_CU_UP_UE_E1AP_ID
:
case
E1AP_ProtocolIE_ID_id_gNB_CU_UP_UE_E1AP_ID
:
AssertFatal
(
ie
->
criticality
==
E1AP_Criticality_reject
,
AssertFatal
(
ie
->
criticality
==
E1AP_Criticality_reject
,
"ie->criticality != E1AP_Criticality_reject
\n
"
);
"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
"
);
"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
;
break
;
// TODO: remaining IE handlers
// TODO: remaining IE handlers
...
@@ -897,15 +887,15 @@ int e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE(instance_t instance,
...
@@ -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
,
int
e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE
(
instance_t
instance
,
uint32_t
assoc_id
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
/*
/*
...
@@ -914,14 +904,17 @@ int e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE(instance_t instance,
...
@@ -914,14 +904,17 @@ int e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE(instance_t instance,
int
e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_REQUEST
(
instance_t
instance
)
{
int
e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_REQUEST
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_RESPONSE
(
instance_t
instance
)
{
int
e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_RESPONSE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_FAILURE
(
instance_t
instance
)
{
int
e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_FAILURE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST
(
instance_t
instance
,
int
e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST
(
instance_t
instance
,
...
@@ -929,6 +922,7 @@ 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
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_RESPONSE
(
instance_t
instance
,
int
e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_RESPONSE
(
instance_t
instance
,
...
@@ -936,6 +930,7 @@ 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
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_FAILURE
(
instance_t
instance
,
int
e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_FAILURE
(
instance_t
instance
,
...
@@ -943,14 +938,17 @@ 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
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_REQUIRED
(
instance_t
instance
)
{
int
e1apCUUP_send_BEARER_CONTEXT_MODIFICATION_REQUIRED
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_CONFIRM
(
instance_t
instance
)
{
int
e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_CONFIRM
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_REQUIRED
(
instance_t
instance
,
int
e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_REQUIRED
(
instance_t
instance
,
...
@@ -958,6 +956,7 @@ 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
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_CONFIRM
(
instance_t
instance
,
int
e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_CONFIRM
(
instance_t
instance
,
...
@@ -965,6 +964,7 @@ 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
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
/*
/*
BEARER CONTEXT RELEASE
BEARER CONTEXT RELEASE
...
@@ -972,14 +972,17 @@ int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_CONFIRM(instance_t instance,
...
@@ -972,14 +972,17 @@ int e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_CONFIRM(instance_t instance,
int
e1apCUCP_send_BEARER_CONTEXT_RELEASE_COMMAND
(
instance_t
instance
)
{
int
e1apCUCP_send_BEARER_CONTEXT_RELEASE_COMMAND
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
)
{
int
e1apCUUP_send_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUUP_send_BEARER_CONTEXT_RELEASE_REQUEST
(
instance_t
instance
)
{
int
e1apCUUP_send_BEARER_CONTEXT_RELEASE_REQUEST
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND
(
instance_t
instance
,
int
e1apCUUP_handle_BEARER_CONTEXT_RELEASE_COMMAND
(
instance_t
instance
,
...
@@ -987,6 +990,7 @@ 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
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
,
int
e1apCUCP_handle_BEARER_CONTEXT_RELEASE_COMPLETE
(
instance_t
instance
,
...
@@ -994,6 +998,7 @@ 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
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUCP_handle_BEARER_CONTEXT_RELEASE_REQUEST
(
instance_t
instance
,
int
e1apCUCP_handle_BEARER_CONTEXT_RELEASE_REQUEST
(
instance_t
instance
,
...
@@ -1001,6 +1006,7 @@ 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
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
/*
/*
...
@@ -1009,6 +1015,7 @@ BEARER CONTEXT INACTIVITY NOTIFICATION
...
@@ -1009,6 +1015,7 @@ BEARER CONTEXT INACTIVITY NOTIFICATION
int
e1apCUUP_send_BEARER_CONTEXT_INACTIVITY_NOTIFICATION
(
instance_t
instance
)
{
int
e1apCUUP_send_BEARER_CONTEXT_INACTIVITY_NOTIFICATION
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUCP_handle_BEARER_CONTEXT_INACTIVITY_NOTIFICATION
(
instance_t
instance
,
int
e1apCUCP_handle_BEARER_CONTEXT_INACTIVITY_NOTIFICATION
(
instance_t
instance
,
...
@@ -1016,6 +1023,7 @@ 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
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
/*
/*
DL DATA
DL DATA
...
@@ -1023,10 +1031,12 @@ int e1apCUCP_handle_BEARER_CONTEXT_INACTIVITY_NOTIFICATION(instance_t instance,
...
@@ -1023,10 +1031,12 @@ int e1apCUCP_handle_BEARER_CONTEXT_INACTIVITY_NOTIFICATION(instance_t instance,
int
e1apCUUP_send_DL_DATA_NOTIFICATION
(
instance_t
instance
)
{
int
e1apCUUP_send_DL_DATA_NOTIFICATION
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUUP_send_DATA_USAGE_REPORT
(
instance_t
instance
)
{
int
e1apCUUP_send_DATA_USAGE_REPORT
(
instance_t
instance
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUCP_handle_DL_DATA_NOTIFICATION
(
instance_t
instance
,
int
e1apCUCP_handle_DL_DATA_NOTIFICATION
(
instance_t
instance
,
...
@@ -1034,6 +1044,7 @@ 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
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
return
-
1
;
}
}
int
e1apCUCP_handle_send_DATA_USAGE_REPORT
(
instance_t
instance
,
int
e1apCUCP_handle_send_DATA_USAGE_REPORT
(
instance_t
instance
,
...
@@ -1041,6 +1052,7 @@ 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
,
uint32_t
stream
,
E1AP_E1AP_PDU_t
*
pdu
)
{
E1AP_E1AP_PDU_t
*
pdu
)
{
AssertFatal
(
false
,
"Not implemented yet
\n
"
);
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
)
{
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 *
...
@@ -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
);
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
);
DevAssert
(
sctp_new_association_resp
!=
NULL
);
if
(
sctp_new_association_resp
->
sctp_state
!=
SCTP_STATE_ESTABLISHED
)
{
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
...
@@ -1076,7 +1088,7 @@ void cuup_task_handle_sctp_association_resp(instance_t instance, sctp_new_associ
return
;
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
->
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_in_streams
=
sctp_new_association_resp
->
in_streams
;
e1ap_cuup_setup_req
->
sctp_out_streams
=
sctp_new_association_resp
->
out_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) {
...
@@ -1107,7 +1119,7 @@ void cucp_task_send_sctp_init_req(instance_t instance, char *my_addr) {
void
*
E1AP_CUCP_task
(
void
*
arg
)
{
void
*
E1AP_CUCP_task
(
void
*
arg
)
{
LOG_I
(
E1AP
,
"Starting E1AP at CU CP
\n
"
);
LOG_I
(
E1AP
,
"Starting E1AP at CU CP
\n
"
);
MessageDef
*
msg
=
NULL
;
MessageDef
*
msg
=
NULL
;
int
result
;
e1ap_common_init
()
;
while
(
1
)
{
while
(
1
)
{
itti_receive_msg
(
TASK_CUCP_E1
,
&
msg
);
itti_receive_msg
(
TASK_CUCP_E1
,
&
msg
);
...
@@ -1120,7 +1132,7 @@ void *E1AP_CUCP_task(void *arg) {
...
@@ -1120,7 +1132,7 @@ void *E1AP_CUCP_task(void *arg) {
char
*
ipaddr
;
char
*
ipaddr
;
if
(
req
->
CUCP_e1_ip_address
.
ipv4
==
0
)
{
if
(
req
->
CUCP_e1_ip_address
.
ipv4
==
0
)
{
LOG_E
(
E1AP
,
"No IPv4 address configured
\n
"
);
LOG_E
(
E1AP
,
"No IPv4 address configured
\n
"
);
return
-
1
;
return
NULL
;
}
}
else
else
ipaddr
=
req
->
CUCP_e1_ip_address
.
ipv4_address
;
ipaddr
=
req
->
CUCP_e1_ip_address
.
ipv4_address
;
...
@@ -1136,6 +1148,7 @@ void *E1AP_CUCP_task(void *arg) {
...
@@ -1136,6 +1148,7 @@ void *E1AP_CUCP_task(void *arg) {
void
*
E1AP_CUUP_task
(
void
*
arg
)
{
void
*
E1AP_CUUP_task
(
void
*
arg
)
{
LOG_I
(
E1AP
,
"Starting E1AP at CU UP
\n
"
);
LOG_I
(
E1AP
,
"Starting E1AP at CU UP
\n
"
);
e1ap_common_init
();
// SCTP
// SCTP
while
(
1
)
{
while
(
1
)
{
...
@@ -1147,19 +1160,19 @@ void *E1AP_CUUP_task(void *arg) {
...
@@ -1147,19 +1160,19 @@ void *E1AP_CUUP_task(void *arg) {
case
E1AP_SETUP_REQ
:
case
E1AP_SETUP_REQ
:
LOG_I
(
E1AP
,
"CUUP Task Received E1AP_SETUP_REQ
\n
"
);
LOG_I
(
E1AP
,
"CUUP Task Received E1AP_SETUP_REQ
\n
"
);
e1ap_setup_req_t
*
msgSetup
=
&
E1AP_SETUP_REQ
(
msg
);
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
;
break
;
case
SCTP_NEW_ASSOCIATION_RESP
:
case
SCTP_NEW_ASSOCIATION_RESP
:
LOG_I
(
E1AP
,
"CUUP Task Received SCTP_NEW_ASSOCIATION_RESP
\n
"
);
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
;
break
;
case
SCTP_DATA_IND
:
case
SCTP_DATA_IND
:
LOG_I
(
E1AP
,
"CUUP Task Received SCTP_DATA_IND
\n
"
);
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
;
break
;
default:
default:
...
...
openair2/E1AP/e1ap.h
View file @
6106207b
...
@@ -27,9 +27,61 @@
...
@@ -27,9 +27,61 @@
#include <common/utils/LOG/log.h>
#include <common/utils/LOG/log.h>
#include "openairinterface5g_limits.h"
#include "openairinterface5g_limits.h"
#include <openair2/RRC/NR/MESSAGES/asn1_msg.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_Cause.h>
#include <E1AP_InitiatingMessage.h>
#include <E1AP_InitiatingMessage.h>
#include <E1AP_E1AP-PDU.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
#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
);
openair2/E1AP/e1ap_common.c
View file @
6106207b
...
@@ -23,34 +23,42 @@
...
@@ -23,34 +23,42 @@
#include <time.h>
#include <time.h>
#include <stdlib.h>
#include <stdlib.h>
#include "e1ap.h"
#include "e1ap_common.h"
#include "e1ap_common.h"
static
e1ap_upcp_inst_t
*
e1_cp_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_up_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
)
{
e1ap_upcp_inst_t
*
getCxtE1
(
E1_t
type
,
instance_t
instance
)
{
AssertFatal
(
instance
<
sizeofArray
(
e1_cp_inst
),
"instance exceeds limit
\n
"
);
AssertFatal
(
instance
<
sizeofArray
(
e1ap_cp_inst
),
"instance exceeds limit
\n
"
);
return
type
?
e1_up_inst
[
instance
]
:
e1_cp_inst
[
instance
];
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
)
{
void
createE1inst
(
E1_t
type
,
instance_t
instance
,
e1ap_setup_req_t
*
req
)
{
if
(
type
==
CPtype
)
{
if
(
type
==
CPtype
)
{
AssertFatal
(
e1
_cp_inst
[
instance
]
==
NULL
,
"Double call to E1 CP instance %d
\n
"
,
instance
);
AssertFatal
(
e1
ap_cp_inst
[
instance
]
==
NULL
,
"Double call to E1 CP instance %d
\n
"
,
(
int
)
instance
);
e1
_cp_inst
[
instance
]
=
(
e1_upcp_inst_t
*
)
calloc
(
1
,
sizeof
(
e1
_upcp_inst_t
));
e1
ap_cp_inst
[
instance
]
=
(
e1ap_upcp_inst_t
*
)
calloc
(
1
,
sizeof
(
e1ap
_upcp_inst_t
));
}
else
{
}
else
{
AssertFatal
(
e1
_up_inst
[
instance
]
==
NULL
,
"Double call to E1 UP instance %d
\n
"
,
instance
);
AssertFatal
(
e1
ap_up_inst
[
instance
]
==
NULL
,
"Double call to E1 UP instance %d
\n
"
,
(
int
)
instance
);
e1
_up_inst
[
instance
]
=
(
e1_upcp_inst_t
*
)
calloc
(
1
,
sizeof
(
e1
_upcp_inst_t
));
e1
ap_up_inst
[
instance
]
=
(
e1ap_upcp_inst_t
*
)
calloc
(
1
,
sizeof
(
e1ap
_upcp_inst_t
));
memcpy
(
&
e1_up_inst
[
instance
]
->
setupReq
,
req
,
sizeof
(
e1ap_setup_req_t
));
memcpy
(
&
e1
ap
_up_inst
[
instance
]
->
setupReq
,
req
,
sizeof
(
e1ap_setup_req_t
));
}
}
}
}
E1AP_TransactionID_t
transacID
[
MAX_NUM_TRANSAC_IDS
]
=
{
0
};
E1AP_TransactionID_t
transacID
[
E1AP_MAX_NUM_TRANSAC_IDS
]
=
{
0
};
srand
(
time
(
NULL
));
void
e1ap_common_init
()
{
srand
(
time
(
NULL
));
}
bool
check_transac_id
(
E1AP_TransactionID_t
id
,
int
*
freeIdx
)
{
bool
check_transac_id
(
E1AP_TransactionID_t
id
,
int
*
freeIdx
)
{
bool
isFreeIdxSet
=
false
;
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
])
if
(
id
==
transacID
[
i
])
return
false
;
return
false
;
else
if
(
!
isFreeIdxSet
&&
(
transacID
[
i
]
==
0
))
{
else
if
(
!
isFreeIdxSet
&&
(
transacID
[
i
]
==
0
))
{
...
@@ -69,14 +77,68 @@ E1AP_TransactionID_t E1AP_get_next_transaction_identifier() {
...
@@ -69,14 +77,68 @@ E1AP_TransactionID_t E1AP_get_next_transaction_identifier() {
while
(
!
isTransacIdValid
)
{
while
(
!
isTransacIdValid
)
{
genTransacId
=
rand
();
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
;
transacID
[
freeIdx
]
=
genTransacId
;
return
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
)
{
int
e1ap_decode_pdu
(
E1AP_E1AP_PDU_t
*
pdu
,
const
uint8_t
*
const
buffer
,
uint32_t
length
)
{
asn_dec_rval_t
dec_ret
;
asn_dec_rval_t
dec_ret
;
DevAssert
(
buffer
!=
NULL
);
DevAssert
(
buffer
!=
NULL
);
...
@@ -88,7 +150,7 @@ int e1ap_decode_pdu(E1AP_E1AP_PDU_t *pdu, const uint8_t *const buffer, uint32_t
...
@@ -88,7 +150,7 @@ int e1ap_decode_pdu(E1AP_E1AP_PDU_t *pdu, const uint8_t *const buffer, uint32_t
0
,
0
,
0
);
0
);
if
(
asn1_
decoder_xer_print
)
{
if
(
asn1_
xer_print_e1ap
)
{
LOG_E
(
F1AP
,
"----------------- ASN1 DECODER PRINT START-----------------
\n
"
);
LOG_E
(
F1AP
,
"----------------- ASN1 DECODER PRINT START-----------------
\n
"
);
xer_fprint
(
stdout
,
&
asn_DEF_E1AP_E1AP_PDU
,
pdu
);
xer_fprint
(
stdout
,
&
asn_DEF_E1AP_E1AP_PDU
,
pdu
);
LOG_E
(
F1AP
,
"----------------- ASN1 DECODER PRINT END -----------------
\n
"
);
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
...
@@ -116,3 +178,41 @@ int e1ap_decode_pdu(E1AP_E1AP_PDU_t *pdu, const uint8_t *const buffer, uint32_t
return
-
1
;
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
;
}
openair2/E1AP/e1ap_common.h
View file @
6106207b
...
@@ -24,153 +24,21 @@
...
@@ -24,153 +24,21 @@
#ifndef E1AP_COMMON_H_
#ifndef E1AP_COMMON_H_
#define E1AP_COMMON_H_
#define E1AP_COMMON_H_
#include "E1AP_E1AP-PDU.h"
#include "openair2/COMMON/e1ap_messages_types.h"
#include "E1AP_TransactionID.h"
#include "E1AP_PriorityLevel.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
e1ap_upcp_inst_t
*
getCxtE1
(
E1_t
type
,
instance_t
instance
);
#define E1AP_SETUP_RESP(mSGpTR) (mSGpTR)->ittiMsg.e1ap_setup_resp
#define E1AP_PORT_NUMBER 25
E1AP_TransactionID_t
E1AP_get_next_transaction_identifier
();
#define E1AP_SCTP_PPID 63
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
)(
bool
check_transac_id
(
E1AP_TransactionID_t
id
,
int
*
freeIdx
);
instance_t
instance
;
uint32_t
assoc_id
;
uint32_t
stream
;
E1AP_E1AP_PDU_t
*
message_p
;
}
;
typedef
struct
cell_group_s
{
int
e1ap_assoc_id
(
bool
isCu
,
instance_t
instance
);
long
id
;
}
cell_group_t
;
typedef
struct
drb_to_setup_s
{
int
e1ap_encode_send
(
bool
isCu
,
instance_t
instance
,
E1AP_E1AP_PDU_t
*
pdu
,
uint16_t
stream
,
const
char
*
func
);
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
;
void
e1ap_common_init
();
#endif
/* E1AP_COMMON_H_ */
#endif
/* E1AP_COMMON_H_ */
openair2/GNB_APP/gnb_app.c
View file @
6106207b
...
@@ -52,6 +52,7 @@
...
@@ -52,6 +52,7 @@
#include "nfapi/oai_integration/vendor_ext.h"
#include "nfapi/oai_integration/vendor_ext.h"
#include <openair2/LAYER2/nr_pdcp/nr_pdcp.h>
#include <openair2/LAYER2/nr_pdcp/nr_pdcp.h>
#include "openair2/LAYER2/PDCP_v10.1.0/pdcp.h"
#include "openair2/LAYER2/PDCP_v10.1.0/pdcp.h"
#include "openair2/E1AP/e1ap.h"
extern
unsigned
char
NB_gNB_INST
;
extern
unsigned
char
NB_gNB_INST
;
extern
RAN_CONTEXT_t
RC
;
extern
RAN_CONTEXT_t
RC
;
...
...
openair2/GNB_APP/gnb_config.c
View file @
6106207b
...
@@ -1845,7 +1845,7 @@ int RCconfig_NR_CU_E1(MessageDef *msg_p, uint32_t i) {
...
@@ -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
);
"gNB id %u is not defined in configuration file
\n
"
,
i
);
config_getlist
(
&
GNBE1ParamList
,
GNBE1Params
,
sizeof
(
GNBE1Params
)
/
sizeof
(
paramdef_t
),
NULL
);
config_getlist
(
&
GNBE1ParamList
,
GNBE1Params
,
sizeof
(
GNBE1Params
)
/
sizeof
(
paramdef_t
),
NULL
);
e1ap_setup_req_t
*
e1Setup
=
&
E1AP_SETUP_REQ
(
msg_p
);
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
;
paramdef_t
PLMNParams
[]
=
GNBPLMNPARAMS_DESC
;
paramlist_def_t
PLMNParamList
=
{
GNB_CONFIG_STRING_PLMN_LIST
,
NULL
,
0
};
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) {
...
@@ -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
)
for
(
int
I
=
0
;
I
<
sizeof
(
PLMNParams
)
/
sizeof
(
paramdef_t
);
++
I
)
PLMNParams
[
I
].
chkPptr
=
&
(
config_check_PLMNParams
[
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
;
int
numPLMNs
=
PLMNParamList
.
numelt
;
e1Setup
->
supported_plmns
=
numPLMNs
;
e1Setup
->
supported_plmns
=
numPLMNs
;
...
@@ -1865,12 +1865,12 @@ int RCconfig_NR_CU_E1(MessageDef *msg_p, uint32_t i) {
...
@@ -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
;
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
);
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
;
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
);
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
->
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
;
return
0
;
...
...
openair2/GNB_APP/gnb_config.h
View file @
6106207b
...
@@ -41,6 +41,7 @@
...
@@ -41,6 +41,7 @@
#include "s1ap_messages_types.h"
#include "s1ap_messages_types.h"
#include "ngap_messages_types.h"
#include "ngap_messages_types.h"
#include "f1ap_messages_types.h"
#include "f1ap_messages_types.h"
#include "e1ap_messages_types.h"
#include "rrc_messages_types.h"
#include "rrc_messages_types.h"
#include "intertask_interface.h"
#include "intertask_interface.h"
...
@@ -107,6 +108,8 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i);
...
@@ -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_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
);
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
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_ */
#endif
/* GNB_CONFIG_H_ */
/** @} */
/** @} */
openair2/GNB_APP/gnb_paramdef.h
View file @
6106207b
...
@@ -387,8 +387,8 @@ typedef enum {
...
@@ -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_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_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_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_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_CN_SUPPORT, NULL, 0, uptr :NULL, defintval:1L, TYPE_U
IN
T, 0} \
}
}
/* L1 configuration section names */
/* L1 configuration section names */
...
...
openair2/RRC/NR/nr_rrc_defs.h
View file @
6106207b
...
@@ -476,6 +476,7 @@ typedef struct nr_mac_rrc_dl_if_s {
...
@@ -476,6 +476,7 @@ typedef struct nr_mac_rrc_dl_if_s {
typedef
struct
gNB_RRC_INST_s
{
typedef
struct
gNB_RRC_INST_s
{
ngran_node_t
node_type
;
ngran_node_t
node_type
;
int
cu_type
;
uint32_t
node_id
;
uint32_t
node_id
;
char
*
node_name
;
char
*
node_name
;
int
module_id
;
int
module_id
;
...
...
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