Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
lizhongxiao
OpenXG UE
Commits
7dbd8a84
Commit
7dbd8a84
authored
Sep 07, 2018
by
Konstantinos Alexandris
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Pass multi socket descriptor in SCTP + add SCTP multi init req/resp mechanism
parent
dec17a42
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
148 additions
and
57 deletions
+148
-57
common/utils/LOG/log.c
common/utils/LOG/log.c
+1
-0
openair2/COMMON/sctp_messages_def.h
openair2/COMMON/sctp_messages_def.h
+11
-10
openair2/COMMON/sctp_messages_types.h
openair2/COMMON/sctp_messages_types.h
+28
-1
openair2/COMMON/x2ap_messages_def.h
openair2/COMMON/x2ap_messages_def.h
+9
-9
openair2/X2AP/x2ap_eNB.c
openair2/X2AP/x2ap_eNB.c
+56
-24
openair2/X2AP/x2ap_eNB_defs.h
openair2/X2AP/x2ap_eNB_defs.h
+7
-1
openair3/SCTP/sctp_eNB_itti_messaging.c
openair3/SCTP/sctp_eNB_itti_messaging.c
+14
-0
openair3/SCTP/sctp_eNB_itti_messaging.h
openair3/SCTP/sctp_eNB_itti_messaging.h
+2
-0
openair3/SCTP/sctp_eNB_task.c
openair3/SCTP/sctp_eNB_task.c
+20
-12
No files found.
common/utils/LOG/log.c
View file @
7dbd8a84
...
@@ -418,6 +418,7 @@ int logInit (void)
...
@@ -418,6 +418,7 @@ int logInit (void)
register_log_component
(
"S1AP"
,
""
,
S1AP
);
register_log_component
(
"S1AP"
,
""
,
S1AP
);
register_log_component
(
"X2AP"
,
""
,
X2AP
);
register_log_component
(
"SCTP"
,
""
,
SCTP
);
register_log_component
(
"SCTP"
,
""
,
SCTP
);
...
...
openair2/COMMON/sctp_messages_def.h
View file @
7dbd8a84
...
@@ -19,13 +19,14 @@
...
@@ -19,13 +19,14 @@
* contact@openairinterface.org
* contact@openairinterface.org
*/
*/
MESSAGE_DEF
(
SCTP_NEW_ASSOCIATION_REQ
,
MESSAGE_PRIORITY_MED
,
sctp_new_association_req_t
,
sctp_new_association_req
)
MESSAGE_DEF
(
SCTP_NEW_ASSOCIATION_REQ
,
MESSAGE_PRIORITY_MED
,
sctp_new_association_req_t
,
sctp_new_association_req
)
MESSAGE_DEF
(
SCTP_NEW_ASSOCIATION_REQ_MULTI
,
MESSAGE_PRIORITY_MED
,
sctp_new_association_req_t
,
sctp_new_association_req_multi
)
MESSAGE_DEF
(
SCTP_NEW_ASSOCIATION_REQ_MULTI
,
MESSAGE_PRIORITY_MED
,
sctp_new_association_req_multi_t
,
sctp_new_association_req_multi
)
MESSAGE_DEF
(
SCTP_NEW_ASSOCIATION_RESP
,
MESSAGE_PRIORITY_MED
,
sctp_new_association_resp_t
,
sctp_new_association_resp
)
MESSAGE_DEF
(
SCTP_NEW_ASSOCIATION_RESP
,
MESSAGE_PRIORITY_MED
,
sctp_new_association_resp_t
,
sctp_new_association_resp
)
MESSAGE_DEF
(
SCTP_NEW_ASSOCIATION_IND
,
MESSAGE_PRIORITY_MED
,
sctp_new_association_ind_t
,
sctp_new_association_ind
)
MESSAGE_DEF
(
SCTP_NEW_ASSOCIATION_IND
,
MESSAGE_PRIORITY_MED
,
sctp_new_association_ind_t
,
sctp_new_association_ind
)
MESSAGE_DEF
(
SCTP_REGISTER_UPPER_LAYER
,
MESSAGE_PRIORITY_MED
,
sctp_listener_register_upper_layer_t
,
sctp_listener_register_upper_layer
)
MESSAGE_DEF
(
SCTP_REGISTER_UPPER_LAYER
,
MESSAGE_PRIORITY_MED
,
sctp_listener_register_upper_layer_t
,
sctp_listener_register_upper_layer
)
MESSAGE_DEF
(
SCTP_DATA_REQ
,
MESSAGE_PRIORITY_MED
,
sctp_data_req_t
,
sctp_data_req
)
MESSAGE_DEF
(
SCTP_DATA_REQ
,
MESSAGE_PRIORITY_MED
,
sctp_data_req_t
,
sctp_data_req
)
MESSAGE_DEF
(
SCTP_DATA_IND
,
MESSAGE_PRIORITY_MED
,
sctp_data_ind_t
,
sctp_data_ind
)
MESSAGE_DEF
(
SCTP_DATA_IND
,
MESSAGE_PRIORITY_MED
,
sctp_data_ind_t
,
sctp_data_ind
)
MESSAGE_DEF
(
SCTP_INIT_MSG
,
MESSAGE_PRIORITY_MED
,
sctp_init_t
,
sctp_init
)
MESSAGE_DEF
(
SCTP_INIT_MSG
,
MESSAGE_PRIORITY_MED
,
sctp_init_t
,
sctp_init
)
MESSAGE_DEF
(
SCTP_INIT_MSG_MULTI
,
MESSAGE_PRIORITY_MED
,
sctp_init_t
,
sctp_init_multi
)
MESSAGE_DEF
(
SCTP_INIT_MSG_MULTI_REQ
,
MESSAGE_PRIORITY_MED
,
sctp_init_t
,
sctp_init_multi
)
MESSAGE_DEF
(
SCTP_CLOSE_ASSOCIATION
,
MESSAGE_PRIORITY_MAX
,
sctp_close_association_t
,
sctp_close_association
)
MESSAGE_DEF
(
SCTP_INIT_MSG_MULTI_CNF
,
MESSAGE_PRIORITY_MED
,
sctp_init_msg_multi_cnf_t
,
sctp_init_msg_multi_cnf
)
MESSAGE_DEF
(
SCTP_CLOSE_ASSOCIATION
,
MESSAGE_PRIORITY_MAX
,
sctp_close_association_t
,
sctp_close_association
)
openair2/COMMON/sctp_messages_types.h
View file @
7dbd8a84
...
@@ -29,7 +29,8 @@
...
@@ -29,7 +29,8 @@
#define SCTP_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.sctp_data_ind
#define SCTP_DATA_IND(mSGpTR) (mSGpTR)->ittiMsg.sctp_data_ind
#define SCTP_DATA_REQ(mSGpTR) (mSGpTR)->ittiMsg.sctp_data_req
#define SCTP_DATA_REQ(mSGpTR) (mSGpTR)->ittiMsg.sctp_data_req
#define SCTP_INIT_MSG(mSGpTR) (mSGpTR)->ittiMsg.sctp_init
#define SCTP_INIT_MSG(mSGpTR) (mSGpTR)->ittiMsg.sctp_init
#define SCTP_INIT_MSG_MULTI(mSGpTR) (mSGpTR)->ittiMsg.sctp_init_multi
#define SCTP_INIT_MSG_MULTI_REQ(mSGpTR) (mSGpTR)->ittiMsg.sctp_init_multi
#define SCTP_INIT_MSG_MULTI_CNF(mSGpTR) (mSGpTR)->ittiMsg.sctp_init_msg_multi_cnf
#define SCTP_CLOSE_ASSOCIATION(mSGpTR) (mSGpTR)->ittiMsg.sctp_close_association
#define SCTP_CLOSE_ASSOCIATION(mSGpTR) (mSGpTR)->ittiMsg.sctp_close_association
enum
sctp_state_e
{
enum
sctp_state_e
{
...
@@ -58,6 +59,32 @@ typedef struct sctp_new_association_req_s {
...
@@ -58,6 +59,32 @@ typedef struct sctp_new_association_req_s {
net_ip_address_t
remote_address
;
net_ip_address_t
remote_address
;
}
sctp_new_association_req_t
;
}
sctp_new_association_req_t
;
typedef
struct
sctp_new_association_req_multi_s
{
/* Upper layer connexion identifier */
uint16_t
ulp_cnx_id
;
/* The port to connect to */
uint16_t
port
;
/* Payload Protocol Identifier to use */
uint32_t
ppid
;
/* Number of streams used for this association */
uint16_t
in_streams
;
uint16_t
out_streams
;
/* Local address to bind to */
net_ip_address_t
local_address
;
/* Remote address to connect to */
net_ip_address_t
remote_address
;
/* Multi-socket descriptor */
int
multi_sd
;
}
sctp_new_association_req_multi_t
;
typedef
struct
sctp_init_msg_multi_cnf_s
{
int
multi_sd
;
}
sctp_init_msg_multi_cnf_t
;
typedef
struct
sctp_new_association_ind_s
{
typedef
struct
sctp_new_association_ind_s
{
/* Assoc id of the new association */
/* Assoc id of the new association */
int32_t
assoc_id
;
int32_t
assoc_id
;
...
...
openair2/COMMON/x2ap_messages_def.h
View file @
7dbd8a84
...
@@ -22,21 +22,21 @@
...
@@ -22,21 +22,21 @@
/* eNB application layer -> X2AP messages */
/* eNB application layer -> X2AP messages */
/* ITTI LOG messages */
/* ITTI LOG messages */
/* ENCODER */
/* ENCODER */
MESSAGE_DEF
(
X2AP_RESET_REQUST_LOG
,
MESSAGE_PRIORITY_MED
,
IttiMsgText
,
x2ap_reset_request_log
)
MESSAGE_DEF
(
X2AP_RESET_REQUST_LOG
,
MESSAGE_PRIORITY_MED
,
IttiMsgText
,
x2ap_reset_request_log
)
MESSAGE_DEF
(
X2AP_RESOURCE_STATUS_RESPONSE_LOG
,
MESSAGE_PRIORITY_MED
,
IttiMsgText
,
x2ap_resource_status_response_log
)
MESSAGE_DEF
(
X2AP_RESOURCE_STATUS_RESPONSE_LOG
,
MESSAGE_PRIORITY_MED
,
IttiMsgText
,
x2ap_resource_status_response_log
)
MESSAGE_DEF
(
X2AP_RESOURCE_STATUS_FAILURE_LOG
,
MESSAGE_PRIORITY_MED
,
IttiMsgText
,
x2ap_resource_status_failure_log
)
MESSAGE_DEF
(
X2AP_RESOURCE_STATUS_FAILURE_LOG
,
MESSAGE_PRIORITY_MED
,
IttiMsgText
,
x2ap_resource_status_failure_log
)
/* Messages for X2AP logging */
/* Messages for X2AP logging */
MESSAGE_DEF
(
X2AP_SETUP_REQUEST_LOG
,
MESSAGE_PRIORITY_MED
,
IttiMsgText
,
x2ap_setup_request_log
)
MESSAGE_DEF
(
X2AP_SETUP_REQUEST_LOG
,
MESSAGE_PRIORITY_MED
,
IttiMsgText
,
x2ap_setup_request_log
)
/* eNB application layer -> X2AP messages */
/* eNB application layer -> X2AP messages */
MESSAGE_DEF
(
X2AP_REGISTER_ENB_REQ
,
MESSAGE_PRIORITY_MED
,
x2ap_register_enb_req_t
,
x2ap_register_enb_req
)
MESSAGE_DEF
(
X2AP_REGISTER_ENB_REQ
,
MESSAGE_PRIORITY_MED
,
x2ap_register_enb_req_t
,
x2ap_register_enb_req
)
/* X2AP -> eNB application layer messages */
/* X2AP -> eNB application layer messages */
MESSAGE_DEF
(
X2AP_REGISTER_ENB_CNF
,
MESSAGE_PRIORITY_MED
,
x2ap_register_enb_cnf_t
,
x2ap_register_enb_cnf
)
MESSAGE_DEF
(
X2AP_REGISTER_ENB_CNF
,
MESSAGE_PRIORITY_MED
,
x2ap_register_enb_cnf_t
,
x2ap_register_enb_cnf
)
MESSAGE_DEF
(
X2AP_DEREGISTERED_ENB_IND
,
MESSAGE_PRIORITY_MED
,
x2ap_deregistered_enb_ind_t
,
x2ap_deregistered_enb_ind
)
MESSAGE_DEF
(
X2AP_DEREGISTERED_ENB_IND
,
MESSAGE_PRIORITY_MED
,
x2ap_deregistered_enb_ind_t
,
x2ap_deregistered_enb_ind
)
/* handover messages X2AP <-> RRC */
/* handover messages X2AP <-> RRC */
MESSAGE_DEF
(
X2AP_HANDOVER_REQ
,
MESSAGE_PRIORITY_MED
,
x2ap_handover_req_t
,
x2ap_handover_req
)
MESSAGE_DEF
(
X2AP_HANDOVER_REQ
,
MESSAGE_PRIORITY_MED
,
x2ap_handover_req_t
,
x2ap_handover_req
)
MESSAGE_DEF
(
X2AP_HANDOVER_REQ_ACK
,
MESSAGE_PRIORITY_MED
,
x2ap_handover_req_ack_t
,
x2ap_handover_req_ack
)
MESSAGE_DEF
(
X2AP_HANDOVER_REQ_ACK
,
MESSAGE_PRIORITY_MED
,
x2ap_handover_req_ack_t
,
x2ap_handover_req_ack
)
openair2/X2AP/x2ap_eNB.c
View file @
7dbd8a84
...
@@ -60,11 +60,8 @@ void x2ap_eNB_register_eNB(x2ap_eNB_instance_t *instance_p,
...
@@ -60,11 +60,8 @@ void x2ap_eNB_register_eNB(x2ap_eNB_instance_t *instance_p,
net_ip_address_t
*
local_ip_addr
,
net_ip_address_t
*
local_ip_addr
,
uint16_t
in_streams
,
uint16_t
in_streams
,
uint16_t
out_streams
,
uint16_t
out_streams
,
uint32_t
enb_port_for_X2C
);
uint32_t
enb_port_for_X2C
,
int
multi_sd
);
static
void
x2ap_eNB_handle_sctp_association_resp
(
instance_t
instance
,
sctp_new_association_resp_t
*
sctp_new_association_resp
);
/*
/*
static
static
...
@@ -209,7 +206,7 @@ int x2ap_eNB_init_sctp (x2ap_eNB_instance_t *instance_p,
...
@@ -209,7 +206,7 @@ int x2ap_eNB_init_sctp (x2ap_eNB_instance_t *instance_p,
DevAssert
(
instance_p
!=
NULL
);
DevAssert
(
instance_p
!=
NULL
);
DevAssert
(
local_ip_addr
!=
NULL
);
DevAssert
(
local_ip_addr
!=
NULL
);
message
=
itti_alloc_new_message
(
TASK_X2AP
,
SCTP_INIT_MSG_MULTI
);
message
=
itti_alloc_new_message
(
TASK_X2AP
,
SCTP_INIT_MSG_MULTI
_REQ
);
sctp_init
=
&
message
->
ittiMsg
.
sctp_init_multi
;
sctp_init
=
&
message
->
ittiMsg
.
sctp_init_multi
;
sctp_init
->
port
=
enb_port_for_X2C
;
sctp_init
->
port
=
enb_port_for_X2C
;
...
@@ -240,12 +237,13 @@ static void x2ap_eNB_register_eNB(x2ap_eNB_instance_t *instance_p,
...
@@ -240,12 +237,13 @@ static void x2ap_eNB_register_eNB(x2ap_eNB_instance_t *instance_p,
net_ip_address_t
*
local_ip_addr
,
net_ip_address_t
*
local_ip_addr
,
uint16_t
in_streams
,
uint16_t
in_streams
,
uint16_t
out_streams
,
uint16_t
out_streams
,
uint32_t
enb_port_for_X2C
)
uint32_t
enb_port_for_X2C
,
int
multi_sd
)
{
{
MessageDef
*
message
=
NULL
;
MessageDef
*
message
=
NULL
;
sctp_new_association_req_t
*
sctp_new_association_req
=
NULL
;
sctp_new_association_req_
multi_
t
*
sctp_new_association_req
=
NULL
;
x2ap_eNB_data_t
*
x2ap_enb_data
=
NULL
;
x2ap_eNB_data_t
*
x2ap_enb_data
=
NULL
;
DevAssert
(
instance_p
!=
NULL
);
DevAssert
(
instance_p
!=
NULL
);
DevAssert
(
target_eNB_ip_address
!=
NULL
);
DevAssert
(
target_eNB_ip_address
!=
NULL
);
...
@@ -260,6 +258,8 @@ static void x2ap_eNB_register_eNB(x2ap_eNB_instance_t *instance_p,
...
@@ -260,6 +258,8 @@ static void x2ap_eNB_register_eNB(x2ap_eNB_instance_t *instance_p,
sctp_new_association_req
->
in_streams
=
in_streams
;
sctp_new_association_req
->
in_streams
=
in_streams
;
sctp_new_association_req
->
out_streams
=
out_streams
;
sctp_new_association_req
->
out_streams
=
out_streams
;
sctp_new_association_req
->
multi_sd
=
multi_sd
;
memcpy
(
&
sctp_new_association_req
->
remote_address
,
memcpy
(
&
sctp_new_association_req
->
remote_address
,
target_eNB_ip_address
,
target_eNB_ip_address
,
sizeof
(
*
target_eNB_ip_address
));
sizeof
(
*
target_eNB_ip_address
));
...
@@ -293,9 +293,7 @@ static
...
@@ -293,9 +293,7 @@ static
void
x2ap_eNB_handle_register_eNB
(
instance_t
instance
,
void
x2ap_eNB_handle_register_eNB
(
instance_t
instance
,
x2ap_register_enb_req_t
*
x2ap_register_eNB
)
x2ap_register_enb_req_t
*
x2ap_register_eNB
)
{
{
x2ap_eNB_instance_t
*
new_instance
;
x2ap_eNB_instance_t
*
new_instance
;
uint8_t
index
;
DevAssert
(
x2ap_register_eNB
!=
NULL
);
DevAssert
(
x2ap_register_eNB
!=
NULL
);
...
@@ -309,7 +307,7 @@ void x2ap_eNB_handle_register_eNB(instance_t instance,
...
@@ -309,7 +307,7 @@ void x2ap_eNB_handle_register_eNB(instance_t instance,
DevCheck
(
new_instance
->
tac
==
x2ap_register_eNB
->
tac
,
new_instance
->
tac
,
x2ap_register_eNB
->
tac
,
0
);
DevCheck
(
new_instance
->
tac
==
x2ap_register_eNB
->
tac
,
new_instance
->
tac
,
x2ap_register_eNB
->
tac
,
0
);
DevCheck
(
new_instance
->
mcc
==
x2ap_register_eNB
->
mcc
,
new_instance
->
mcc
,
x2ap_register_eNB
->
mcc
,
0
);
DevCheck
(
new_instance
->
mcc
==
x2ap_register_eNB
->
mcc
,
new_instance
->
mcc
,
x2ap_register_eNB
->
mcc
,
0
);
DevCheck
(
new_instance
->
mnc
==
x2ap_register_eNB
->
mnc
,
new_instance
->
mnc
,
x2ap_register_eNB
->
mnc
,
0
);
DevCheck
(
new_instance
->
mnc
==
x2ap_register_eNB
->
mnc
,
new_instance
->
mnc
,
x2ap_register_eNB
->
mnc
,
0
);
X2AP_WARN
(
"eNB[%d] already registered
\n
"
,
instance
);
}
}
else
{
else
{
new_instance
=
calloc
(
1
,
sizeof
(
x2ap_eNB_instance_t
));
new_instance
=
calloc
(
1
,
sizeof
(
x2ap_eNB_instance_t
));
...
@@ -327,6 +325,18 @@ void x2ap_eNB_handle_register_eNB(instance_t instance,
...
@@ -327,6 +325,18 @@ void x2ap_eNB_handle_register_eNB(instance_t instance,
new_instance
->
mnc
=
x2ap_register_eNB
->
mnc
;
new_instance
->
mnc
=
x2ap_register_eNB
->
mnc
;
new_instance
->
mnc_digit_length
=
x2ap_register_eNB
->
mnc_digit_length
;
new_instance
->
mnc_digit_length
=
x2ap_register_eNB
->
mnc_digit_length
;
DevCheck
(
x2ap_register_eNB
->
nb_x2
<=
X2AP_MAX_NB_ENB_IP_ADDRESS
,
X2AP_MAX_NB_ENB_IP_ADDRESS
,
x2ap_register_eNB
->
nb_x2
,
0
);
memcpy
(
new_instance
->
target_enb_x2_ip_address
,
x2ap_register_eNB
->
target_enb_x2_ip_address
,
x2ap_register_eNB
->
nb_x2
*
sizeof
(
net_ip_address_t
));
new_instance
->
nb_x2
=
x2ap_register_eNB
->
nb_x2
;
new_instance
->
enb_x2_ip_address
=
x2ap_register_eNB
->
enb_x2_ip_address
;
new_instance
->
sctp_in_streams
=
x2ap_register_eNB
->
sctp_in_streams
;
new_instance
->
sctp_out_streams
=
x2ap_register_eNB
->
sctp_out_streams
;
new_instance
->
enb_port_for_X2C
=
x2ap_register_eNB
->
enb_port_for_X2C
;
/* Add the new instance to the list of eNB (meaningfull in virtual mode) */
/* Add the new instance to the list of eNB (meaningfull in virtual mode) */
x2ap_eNB_insert_new_instance
(
new_instance
);
x2ap_eNB_insert_new_instance
(
new_instance
);
...
@@ -342,24 +352,41 @@ void x2ap_eNB_handle_register_eNB(instance_t instance,
...
@@ -342,24 +352,41 @@ void x2ap_eNB_handle_register_eNB(instance_t instance,
X2AP_INFO
(
"eNB[%d] eNB id %u acting as a listner (server)
\n
"
,
X2AP_INFO
(
"eNB[%d] eNB id %u acting as a listner (server)
\n
"
,
instance
,
x2ap_register_eNB
->
eNB_id
);
instance
,
x2ap_register_eNB
->
eNB_id
);
}
}
}
DevCheck
(
x2ap_register_eNB
->
nb_x2
<=
X2AP_MAX_NB_ENB_IP_ADDRESS
,
static
X2AP_MAX_NB_ENB_IP_ADDRESS
,
x2ap_register_eNB
->
nb_x2
,
0
);
void
x2ap_eNB_handle_sctp_init_msg_multi_cnf
(
instance_t
instance_id
,
sctp_init_msg_multi_cnf_t
*
m
)
{
x2ap_eNB_instance_t
*
instance
;
int
index
;
DevAssert
(
m
!=
NULL
);
instance
=
x2ap_eNB_get_instance
(
instance_id
);
DevAssert
(
instance
!=
NULL
);
instance
->
multi_sd
=
m
->
multi_sd
;
/* Exit if CNF message reports failure.
* Failure means multi_sd < 0.
*/
DevAssert
(
instance
->
multi_sd
>=
0
);
/* Trying to connect to the provided list of eNB ip address */
/* Trying to connect to the provided list of eNB ip address */
for
(
index
=
0
;
index
<
x2ap_register_eNB
->
nb_x2
;
index
++
)
{
for
(
index
=
0
;
index
<
instance
->
nb_x2
;
index
++
)
{
X2AP_INFO
(
"eNB[%d] eNB id %u acting as an initiator (client)
\n
"
,
X2AP_INFO
(
"eNB[%d] eNB id %u acting as an initiator (client)
\n
"
,
instance
,
x2ap_register_eNB
->
eNB_id
);
instance_id
,
instance
->
eNB_id
);
x2ap_eNB_register_eNB
(
new_instance
,
x2ap_eNB_register_eNB
(
instance
,
&
x2ap_register_eNB
->
target_enb_x2_ip_address
[
index
],
&
instance
->
target_enb_x2_ip_address
[
index
],
&
x2ap_register_eNB
->
enb_x2_ip_address
,
&
instance
->
enb_x2_ip_address
,
x2ap_register_eNB
->
sctp_in_streams
,
instance
->
sctp_in_streams
,
x2ap_register_eNB
->
sctp_out_streams
,
instance
->
sctp_out_streams
,
x2ap_register_eNB
->
enb_port_for_X2C
);
instance
->
enb_port_for_X2C
,
instance
->
multi_sd
);
}
}
}
}
void
*
x2ap_task
(
void
*
arg
)
void
*
x2ap_task
(
void
*
arg
)
...
@@ -386,6 +413,11 @@ void *x2ap_task(void *arg)
...
@@ -386,6 +413,11 @@ void *x2ap_task(void *arg)
&
X2AP_REGISTER_ENB_REQ
(
received_msg
));
&
X2AP_REGISTER_ENB_REQ
(
received_msg
));
break
;
break
;
case
SCTP_INIT_MSG_MULTI_CNF
:
x2ap_eNB_handle_sctp_init_msg_multi_cnf
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
&
received_msg
->
ittiMsg
.
sctp_init_msg_multi_cnf
);
break
;
case
SCTP_NEW_ASSOCIATION_RESP
:
case
SCTP_NEW_ASSOCIATION_RESP
:
x2ap_eNB_handle_sctp_association_resp
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
x2ap_eNB_handle_sctp_association_resp
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
&
received_msg
->
ittiMsg
.
sctp_new_association_resp
);
&
received_msg
->
ittiMsg
.
sctp_new_association_resp
);
...
...
openair2/X2AP/x2ap_eNB_defs.h
View file @
7dbd8a84
...
@@ -151,7 +151,13 @@ typedef struct x2ap_eNB_instance_s {
...
@@ -151,7 +151,13 @@ typedef struct x2ap_eNB_instance_s {
uint16_t
mnc
;
uint16_t
mnc
;
uint8_t
mnc_digit_length
;
uint8_t
mnc_digit_length
;
net_ip_address_t
target_enb_x2_ip_address
[
X2AP_MAX_NB_ENB_IP_ADDRESS
];
uint8_t
nb_x2
;
net_ip_address_t
enb_x2_ip_address
;
uint16_t
sctp_in_streams
;
uint16_t
sctp_out_streams
;
uint32_t
enb_port_for_X2C
;
int
multi_sd
;
}
x2ap_eNB_instance_t
;
}
x2ap_eNB_instance_t
;
typedef
struct
{
typedef
struct
{
...
...
openair3/SCTP/sctp_eNB_itti_messaging.c
View file @
7dbd8a84
...
@@ -24,6 +24,20 @@
...
@@ -24,6 +24,20 @@
#include "sctp_common.h"
#include "sctp_common.h"
#include "sctp_eNB_itti_messaging.h"
#include "sctp_eNB_itti_messaging.h"
int
sctp_itti_send_init_msg_multi_cnf
(
task_id_t
task_id
,
instance_t
instance
,
int
multi_sd
)
{
MessageDef
*
message_p
;
sctp_init_msg_multi_cnf_t
*
sctp_init_msg_multi_cnf_p
;
message_p
=
itti_alloc_new_message
(
TASK_SCTP
,
SCTP_INIT_MSG_MULTI_CNF
);
sctp_init_msg_multi_cnf_p
=
&
message_p
->
ittiMsg
.
sctp_init_msg_multi_cnf
;
sctp_init_msg_multi_cnf_p
->
multi_sd
=
multi_sd
;
return
itti_send_msg_to_task
(
task_id
,
instance
,
message_p
);
}
int
sctp_itti_send_new_message_ind
(
task_id_t
task_id
,
uint32_t
assoc_id
,
uint8_t
*
buffer
,
int
sctp_itti_send_new_message_ind
(
task_id_t
task_id
,
uint32_t
assoc_id
,
uint8_t
*
buffer
,
uint32_t
buffer_length
,
uint16_t
stream
)
uint32_t
buffer_length
,
uint16_t
stream
)
{
{
...
...
openair3/SCTP/sctp_eNB_itti_messaging.h
View file @
7dbd8a84
...
@@ -22,6 +22,8 @@
...
@@ -22,6 +22,8 @@
#ifndef SCTP_ITTI_MESSAGING_H_
#ifndef SCTP_ITTI_MESSAGING_H_
#define SCTP_ITTI_MESSAGING_H_
#define SCTP_ITTI_MESSAGING_H_
int
sctp_itti_send_init_msg_multi_cnf
(
task_id_t
task_id
,
instance_t
instance
,
int
multi_sd
);
int
sctp_itti_send_new_message_ind
(
task_id_t
task_id
,
uint32_t
assoc_id
,
uint8_t
*
buffer
,
int
sctp_itti_send_new_message_ind
(
task_id_t
task_id
,
uint32_t
assoc_id
,
uint8_t
*
buffer
,
uint32_t
buffer_length
,
uint16_t
stream
);
uint32_t
buffer_length
,
uint16_t
stream
);
...
...
openair3/SCTP/sctp_eNB_task.c
View file @
7dbd8a84
...
@@ -220,10 +220,10 @@ void
...
@@ -220,10 +220,10 @@ void
sctp_handle_new_association_req_multi
(
sctp_handle_new_association_req_multi
(
const
instance_t
instance
,
const
instance_t
instance
,
const
task_id_t
requestor
,
const
task_id_t
requestor
,
const
sctp_new_association_req_t
*
const
sctp_new_association_req_p
,
const
sctp_new_association_req_multi_t
*
const
sctp_new_association_req_p
)
int
sd
)
{
{
int
ns
;
int
ns
;
int
sd
;
int32_t
assoc_id
=
0
;
int32_t
assoc_id
=
0
;
...
@@ -235,6 +235,8 @@ sctp_handle_new_association_req_multi(
...
@@ -235,6 +235,8 @@ sctp_handle_new_association_req_multi(
*/
*/
DevAssert
(
sctp_new_association_req_p
!=
NULL
);
DevAssert
(
sctp_new_association_req_p
!=
NULL
);
sd
=
sctp_new_association_req_p
->
multi_sd
;
/* Create new socket with IPv6 affinity */
/* Create new socket with IPv6 affinity */
//#warning "SCTP may Force IPv4 only, here"
//#warning "SCTP may Force IPv4 only, here"
...
@@ -265,8 +267,9 @@ sctp_handle_new_association_req_multi(
...
@@ -265,8 +267,9 @@ sctp_handle_new_association_req_multi(
SCTP_ERROR
(
"Failed to convert ipv6 address %*s to network type
\n
"
,
SCTP_ERROR
(
"Failed to convert ipv6 address %*s to network type
\n
"
,
(
int
)
strlen
(
sctp_new_association_req_p
->
remote_address
.
ipv6_address
),
(
int
)
strlen
(
sctp_new_association_req_p
->
remote_address
.
ipv6_address
),
sctp_new_association_req_p
->
remote_address
.
ipv6_address
);
sctp_new_association_req_p
->
remote_address
.
ipv6_address
);
close
(
sd
);
//close(sd);
return
;
//return;
exit
(
1
);
}
}
SCTP_DEBUG
(
"Converted ipv6 address %*s to network type
\n
"
,
SCTP_DEBUG
(
"Converted ipv6 address %*s to network type
\n
"
,
...
@@ -284,8 +287,9 @@ sctp_handle_new_association_req_multi(
...
@@ -284,8 +287,9 @@ sctp_handle_new_association_req_multi(
SCTP_ERROR
(
"Failed to convert ipv4 address %*s to network type
\n
"
,
SCTP_ERROR
(
"Failed to convert ipv4 address %*s to network type
\n
"
,
(
int
)
strlen
(
sctp_new_association_req_p
->
remote_address
.
ipv4_address
),
(
int
)
strlen
(
sctp_new_association_req_p
->
remote_address
.
ipv4_address
),
sctp_new_association_req_p
->
remote_address
.
ipv4_address
);
sctp_new_association_req_p
->
remote_address
.
ipv4_address
);
close
(
sd
);
//close(sd);
return
;
//return;
exit
(
1
);
}
}
SCTP_DEBUG
(
"Converted ipv4 address %*s to network type
\n
"
,
SCTP_DEBUG
(
"Converted ipv4 address %*s to network type
\n
"
,
...
@@ -307,7 +311,7 @@ sctp_handle_new_association_req_multi(
...
@@ -307,7 +311,7 @@ sctp_handle_new_association_req_multi(
SCTP_STATE_UNREACHABLE
,
0
,
0
);
SCTP_STATE_UNREACHABLE
,
0
,
0
);
/* Add the socket to list of fd monitored by ITTI */
/* Add the socket to list of fd monitored by ITTI */
//itti_unsubscribe_event_fd(TASK_SCTP, sd);
//itti_unsubscribe_event_fd(TASK_SCTP, sd);
close
(
sd
);
//
close(sd);
return
;
return
;
}
else
{
}
else
{
SCTP_DEBUG
(
"connectx assoc_id %d in progress..., used %d addresses
\n
"
,
SCTP_DEBUG
(
"connectx assoc_id %d in progress..., used %d addresses
\n
"
,
...
@@ -1043,7 +1047,6 @@ void *sctp_eNB_task(void *arg)
...
@@ -1043,7 +1047,6 @@ void *sctp_eNB_task(void *arg)
struct
epoll_event
*
events
;
struct
epoll_event
*
events
;
MessageDef
*
received_msg
=
NULL
;
MessageDef
*
received_msg
=
NULL
;
int
result
;
int
result
;
int
multi_sd
=
-
1
;
SCTP_DEBUG
(
"Starting SCTP layer
\n
"
);
SCTP_DEBUG
(
"Starting SCTP layer
\n
"
);
...
@@ -1072,8 +1075,10 @@ void *sctp_eNB_task(void *arg)
...
@@ -1072,8 +1075,10 @@ void *sctp_eNB_task(void *arg)
}
}
break
;
break
;
case
SCTP_INIT_MSG_MULTI
:
{
case
SCTP_INIT_MSG_MULTI_REQ
:
{
SCTP_DEBUG
(
"Received SCTP_INIT_MSG_MULTI
\n
"
);
int
multi_sd
;
SCTP_DEBUG
(
"Received SCTP_INIT_MSG_MULTI_REQ
\n
"
);
multi_sd
=
sctp_create_new_listener
(
multi_sd
=
sctp_create_new_listener
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
...
@@ -1084,6 +1089,10 @@ void *sctp_eNB_task(void *arg)
...
@@ -1084,6 +1089,10 @@ void *sctp_eNB_task(void *arg)
/* SCTP socket creation or bind failed... */
/* SCTP socket creation or bind failed... */
SCTP_ERROR
(
"Failed to create new SCTP listener
\n
"
);
SCTP_ERROR
(
"Failed to create new SCTP listener
\n
"
);
}
}
sctp_itti_send_init_msg_multi_cnf
(
ITTI_MSG_ORIGIN_ID
(
received_msg
),
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
multi_sd
);
}
}
break
;
break
;
...
@@ -1097,8 +1106,7 @@ void *sctp_eNB_task(void *arg)
...
@@ -1097,8 +1106,7 @@ void *sctp_eNB_task(void *arg)
case
SCTP_NEW_ASSOCIATION_REQ_MULTI
:
{
case
SCTP_NEW_ASSOCIATION_REQ_MULTI
:
{
sctp_handle_new_association_req_multi
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
sctp_handle_new_association_req_multi
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
ITTI_MSG_ORIGIN_ID
(
received_msg
),
ITTI_MSG_ORIGIN_ID
(
received_msg
),
&
received_msg
->
ittiMsg
.
sctp_new_association_req_multi
,
&
received_msg
->
ittiMsg
.
sctp_new_association_req_multi
);
multi_sd
);
}
}
break
;
break
;
...
...
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