- Fixed instance id for SCTP layer
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4379 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -63,6 +63,8 @@ static int s1ap_eNB_generate_s1_setup_request(
|
||||
|
||||
static
|
||||
void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_eNB_t *s1ap_register_eNB);
|
||||
static
|
||||
void s1ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_association_resp_t *sctp_new_association_resp);
|
||||
|
||||
uint32_t s1ap_generate_eNB_id(void)
|
||||
{
|
||||
@@ -121,7 +123,7 @@ static void s1ap_eNB_register_mme(s1ap_eNB_instance_t *instance_p,
|
||||
*/
|
||||
RB_INSERT(s1ap_mme_map, &instance_p->s1ap_mme_head, s1ap_mme_data_p);
|
||||
|
||||
itti_send_msg_to_task(TASK_SCTP, INSTANCE_DEFAULT, message_p);
|
||||
itti_send_msg_to_task(TASK_SCTP, instance_p->instance, message_p);
|
||||
}
|
||||
|
||||
static
|
||||
@@ -132,7 +134,7 @@ void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_eNB_t *s1ap
|
||||
|
||||
DevAssert(s1ap_register_eNB != NULL);
|
||||
|
||||
/* Look if the provided mod id already exists
|
||||
/* Look if the provided instance already exists
|
||||
* If so notify user...
|
||||
*/
|
||||
new_instance = s1ap_eNB_get_instance(instance);
|
||||
@@ -172,14 +174,15 @@ void s1ap_eNB_handle_register_eNB(instance_t instance, s1ap_register_eNB_t *s1ap
|
||||
}
|
||||
}
|
||||
|
||||
void s1ap_eNB_handle_sctp_association_resp(sctp_new_association_resp_t *sctp_new_association_resp)
|
||||
static
|
||||
void s1ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_association_resp_t *sctp_new_association_resp)
|
||||
{
|
||||
s1ap_eNB_instance_t *instance_p;
|
||||
s1ap_eNB_mme_data_t *s1ap_mme_data_p;
|
||||
|
||||
DevAssert(sctp_new_association_resp != NULL);
|
||||
|
||||
instance_p = s1ap_eNB_get_instance(sctp_new_association_resp->mod_id);
|
||||
instance_p = s1ap_eNB_get_instance(instance);
|
||||
DevAssert(instance_p != NULL);
|
||||
|
||||
s1ap_mme_data_p = s1ap_eNB_get_MME(instance_p, -1,
|
||||
@@ -187,9 +190,9 @@ void s1ap_eNB_handle_sctp_association_resp(sctp_new_association_resp_t *sctp_new
|
||||
DevAssert(s1ap_mme_data_p != NULL);
|
||||
|
||||
if (sctp_new_association_resp->sctp_state != SCTP_STATE_ESTABLISHED) {
|
||||
S1AP_WARN("Received unsuccessful result for SCTP association (%u), mod_id %u, cnx_id %u\n",
|
||||
S1AP_WARN("Received unsuccessful result for SCTP association (%u), instance %d, cnx_id %u\n",
|
||||
sctp_new_association_resp->sctp_state,
|
||||
sctp_new_association_resp->mod_id,
|
||||
instance,
|
||||
sctp_new_association_resp->ulp_cnx_id);
|
||||
}
|
||||
|
||||
@@ -240,7 +243,8 @@ void *s1ap_eNB_task(void *arg)
|
||||
&received_msg->msg.s1ap_register_eNB);
|
||||
} break;
|
||||
case SCTP_NEW_ASSOCIATION_RESP: {
|
||||
s1ap_eNB_handle_sctp_association_resp(&received_msg->msg.sctp_new_association_resp);
|
||||
s1ap_eNB_handle_sctp_association_resp(ITTI_MESSAGE_GET_INSTANCE(received_msg),
|
||||
&received_msg->msg.sctp_new_association_resp);
|
||||
} break;
|
||||
case SCTP_DATA_IND: {
|
||||
s1ap_eNB_handle_sctp_data_ind(&received_msg->msg.sctp_data_ind);
|
||||
@@ -326,7 +330,7 @@ static int s1ap_eNB_generate_s1_setup_request(
|
||||
}
|
||||
|
||||
/* Non UE-Associated signalling -> stream = 0 */
|
||||
s1ap_eNB_itti_send_sctp_data_req(s1ap_mme_data_p->assoc_id, buffer, len, 0);
|
||||
s1ap_eNB_itti_send_sctp_data_req(instance_p->instance, s1ap_mme_data_p->assoc_id, buffer, len, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#include "s1ap_eNB_itti_messaging.h"
|
||||
|
||||
void s1ap_eNB_itti_send_sctp_data_req(int32_t assoc_id, uint8_t *buffer,
|
||||
void s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uint8_t *buffer,
|
||||
uint32_t buffer_length, uint16_t stream)
|
||||
{
|
||||
MessageDef *message_p;
|
||||
@@ -17,7 +17,7 @@ void s1ap_eNB_itti_send_sctp_data_req(int32_t assoc_id, uint8_t *buffer,
|
||||
sctp_data_req->buffer_length = buffer_length;
|
||||
sctp_data_req->stream = stream;
|
||||
|
||||
itti_send_msg_to_task(TASK_SCTP, INSTANCE_DEFAULT, message_p);
|
||||
itti_send_msg_to_task(TASK_SCTP, instance, message_p);
|
||||
}
|
||||
|
||||
void s1ap_eNB_itti_send_nas_downlink_ind(instance_t instance, uint8_t *nas_pdu,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef S1AP_ENB_ITTI_MESSAGING_H_
|
||||
#define S1AP_ENB_ITTI_MESSAGING_H_
|
||||
|
||||
void s1ap_eNB_itti_send_sctp_data_req(int32_t assoc_id, uint8_t *buffer,
|
||||
void s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uint8_t *buffer,
|
||||
uint32_t buffer_length, uint16_t stream);
|
||||
|
||||
void s1ap_eNB_itti_send_nas_downlink_ind(instance_t instance, uint8_t *nas_pdu,
|
||||
|
||||
@@ -179,7 +179,8 @@ int s1ap_eNB_handle_nas_first_req(
|
||||
ue_desc_p->stream = ++mme_desc_p->nextstream;
|
||||
|
||||
/* Send encoded message over sctp */
|
||||
s1ap_eNB_itti_send_sctp_data_req(mme_desc_p->assoc_id, buffer, length, ue_desc_p->stream);
|
||||
s1ap_eNB_itti_send_sctp_data_req(instance_p->instance, mme_desc_p->assoc_id,
|
||||
buffer, length, ue_desc_p->stream);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -312,7 +313,8 @@ int s1ap_eNB_nas_uplink(instance_t instance, s1ap_uplink_nas_t *s1ap_uplink_nas_
|
||||
}
|
||||
|
||||
/* UE associated signalling -> use the allocated stream */
|
||||
s1ap_eNB_itti_send_sctp_data_req(ue_context_p->mme_ref->assoc_id, buffer,
|
||||
s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance,
|
||||
ue_context_p->mme_ref->assoc_id, buffer,
|
||||
length, ue_context_p->stream);
|
||||
|
||||
return 0;
|
||||
@@ -391,7 +393,8 @@ int s1ap_eNB_initial_ctxt_resp(
|
||||
}
|
||||
|
||||
/* UE associated signalling -> use the allocated stream */
|
||||
s1ap_eNB_itti_send_sctp_data_req(ue_context_p->mme_ref->assoc_id, buffer,
|
||||
s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance,
|
||||
ue_context_p->mme_ref->assoc_id, buffer,
|
||||
length, ue_context_p->stream);
|
||||
|
||||
return ret;
|
||||
@@ -456,7 +459,8 @@ int s1ap_eNB_ue_capabilities(instance_t instance,
|
||||
}
|
||||
|
||||
/* UE associated signalling -> use the allocated stream */
|
||||
s1ap_eNB_itti_send_sctp_data_req(ue_context_p->mme_ref->assoc_id, buffer,
|
||||
s1ap_eNB_itti_send_sctp_data_req(s1ap_eNB_instance_p->instance,
|
||||
ue_context_p->mme_ref->assoc_id, buffer,
|
||||
length, ue_context_p->stream);
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -75,7 +75,8 @@ void s1ap_eNB_generate_trace_failure(struct s1ap_eNB_ue_context_s *ue_desc_p,
|
||||
return;
|
||||
}
|
||||
|
||||
s1ap_eNB_itti_send_sctp_data_req(ue_desc_p->mme_ref->assoc_id, buffer,
|
||||
s1ap_eNB_itti_send_sctp_data_req(ue_desc_p->mme_ref->s1ap_eNB_instance->instance,
|
||||
ue_desc_p->mme_ref->assoc_id, buffer,
|
||||
length, ue_desc_p->stream);
|
||||
}
|
||||
|
||||
|
||||
@@ -71,6 +71,9 @@ struct sctp_cnx_list_elm_s {
|
||||
/* Task id of the task who asked for this connection */
|
||||
task_id_t task_id;
|
||||
|
||||
/* Instance */
|
||||
instance_t instance;
|
||||
|
||||
/* Upper layer identifier */
|
||||
uint16_t cnx_id;
|
||||
};
|
||||
@@ -99,6 +102,7 @@ struct sctp_cnx_list_elm_s *sctp_get_cnx(int32_t assoc_id, int sd)
|
||||
}
|
||||
|
||||
void sctp_handle_new_association_req(
|
||||
const instance_t instance,
|
||||
const task_id_t requestor,
|
||||
const sctp_new_association_req_t * const sctp_new_association_req_p)
|
||||
{
|
||||
@@ -216,10 +220,11 @@ void sctp_handle_new_association_req(
|
||||
|
||||
sctp_cnx = calloc(1, sizeof(*sctp_cnx));
|
||||
|
||||
sctp_cnx->sd = sd;
|
||||
sctp_cnx->task_id = requestor;
|
||||
sctp_cnx->cnx_id = sctp_new_association_req_p->ulp_cnx_id;
|
||||
sctp_cnx->ppid = sctp_new_association_req_p->ppid;
|
||||
sctp_cnx->sd = sd;
|
||||
sctp_cnx->task_id = requestor;
|
||||
sctp_cnx->cnx_id = sctp_new_association_req_p->ulp_cnx_id;
|
||||
sctp_cnx->ppid = sctp_new_association_req_p->ppid;
|
||||
sctp_cnx->instance = instance;
|
||||
|
||||
/* Get socket info */
|
||||
sctp_get_sockinfo(sd,
|
||||
@@ -247,11 +252,11 @@ void sctp_handle_new_association_req(
|
||||
SCTP_DEBUG("Sending SCTP new association resp message to %s\n",
|
||||
itti_get_task_name(requestor));
|
||||
|
||||
itti_send_msg_to_task(requestor, INSTANCE_DEFAULT, new_message_p);
|
||||
itti_send_msg_to_task(requestor, sctp_cnx->instance, new_message_p);
|
||||
}
|
||||
}
|
||||
|
||||
void sctp_send_data(task_id_t task_id, sctp_data_req_t *sctp_data_req_p)
|
||||
void sctp_send_data(instance_t instance, task_id_t task_id, sctp_data_req_t *sctp_data_req_p)
|
||||
{
|
||||
struct sctp_cnx_list_elm_s *sctp_cnx = NULL;
|
||||
|
||||
@@ -427,12 +432,14 @@ void *sctp_eNB_task(void *arg)
|
||||
itti_exit_task();
|
||||
break;
|
||||
case SCTP_NEW_ASSOCIATION_REQ: {
|
||||
sctp_handle_new_association_req(received_msg->header.originTaskId,
|
||||
sctp_handle_new_association_req(ITTI_MESSAGE_GET_INSTANCE(received_msg),
|
||||
received_msg->header.originTaskId,
|
||||
&received_msg->msg.sctp_new_association_req);
|
||||
} break;
|
||||
case SCTP_DATA_REQ: {
|
||||
sctp_send_data(received_msg->header.originTaskId,
|
||||
&received_msg->msg.sctp_data_req);
|
||||
sctp_send_data(ITTI_MESSAGE_GET_INSTANCE(received_msg),
|
||||
received_msg->header.originTaskId,
|
||||
&received_msg->msg.sctp_data_req);
|
||||
} break;
|
||||
default:
|
||||
SCTP_ERROR("Received unhandled message with id %d\n",
|
||||
|
||||
@@ -8,8 +8,6 @@ enum sctp_state_e {
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
/* Module id: used in virtual mode */
|
||||
uint8_t mod_id;
|
||||
/* Upper layer connexion identifier */
|
||||
uint16_t ulp_cnx_id;
|
||||
|
||||
@@ -25,8 +23,6 @@ typedef struct {
|
||||
} sctp_new_association_req_t;
|
||||
|
||||
typedef struct {
|
||||
/* Module id: used in virtual mode */
|
||||
uint8_t mod_id;
|
||||
/* Upper layer connexion identifier */
|
||||
uint16_t ulp_cnx_id;
|
||||
|
||||
@@ -42,7 +38,10 @@ typedef struct {
|
||||
} sctp_new_association_resp_t;
|
||||
|
||||
typedef struct {
|
||||
/* SCTP Association ID */
|
||||
int32_t assoc_id;
|
||||
|
||||
/* Buffer to send over SCTP */
|
||||
uint32_t buffer_length;
|
||||
uint8_t *buffer;
|
||||
|
||||
|
||||
@@ -405,7 +405,6 @@ void *l2l1_task(void *args_p) {
|
||||
hash = s1ap_generate_eNB_id();
|
||||
|
||||
/* Some default/random parameters */
|
||||
s1ap_register_eNB->mod_id = eNB_id;
|
||||
s1ap_register_eNB->eNB_id = eNB_id + (hash & 0xFFFF8);
|
||||
s1ap_register_eNB->cell_type = CELL_MACRO_ENB;
|
||||
s1ap_register_eNB->tac = 0;
|
||||
@@ -420,7 +419,7 @@ void *l2l1_task(void *args_p) {
|
||||
memcpy(s1ap_register_eNB->mme_ip_address[0].ipv6_address, mme_address_v6,
|
||||
strlen(mme_address_v6));
|
||||
|
||||
itti_send_msg_to_task(TASK_S1AP, INSTANCE_DEFAULT, message_p);
|
||||
itti_send_msg_to_task(TASK_S1AP, eNB_id, message_p);
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user