From 15435aefc096496d48e7df511a2bbf24ef5efd50 Mon Sep 17 00:00:00 2001 From: Lionel Gauthier <lionel.gauthier@eurecom.fr> Date: Wed, 26 Mar 2014 09:42:58 +0000 Subject: [PATCH] Update ipv4 s1U git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5216 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair-cn/GTPV1-U/gtpv1u_eNB.c | 24 +++++++++++++++++------- openair-cn/GTPV1-U/gtpv1u_eNB_defs.h | 4 ++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/openair-cn/GTPV1-U/gtpv1u_eNB.c b/openair-cn/GTPV1-U/gtpv1u_eNB.c index 20f40135f5..f078f9eb3f 100644 --- a/openair-cn/GTPV1-U/gtpv1u_eNB.c +++ b/openair-cn/GTPV1-U/gtpv1u_eNB.c @@ -568,7 +568,13 @@ static int gtpv1u_create_s1u_tunnel(gtpv1u_enb_create_tunnel_req_t *create_tunne gtpv1u_ue_data_p = calloc (1, sizeof(gtpv1u_ue_data_t)); gtpv1u_ue_data_p->ue_id = create_tunnel_req_pP->ue_index; gtpv1u_ue_data_p->instance_id = 0; // TO DO -#warning "TO DO TO DO gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr" + memcpy(>PV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_addr.buffer, + >pv1u_data_g.enb_ip_address_for_S1u_S12_S4_up, + sizeof (in_addr_t)); + GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_addr.length = sizeof (in_addr_t); + AssertFatal(create_tunnel_req_pP->sgw_addr[i].length == 4, "Bad transport layer address for next operation, TO DO"); + gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr = *((in_addr_t*)create_tunnel_req_pP->sgw_addr[i].buffer); + gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].state = BEARER_IN_CONFIG; gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_eNB = s1u_teid; gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_sgw = create_tunnel_req_pP->sgw_S1u_teid[i]; @@ -578,8 +584,12 @@ static int gtpv1u_create_s1u_tunnel(gtpv1u_enb_create_tunnel_req_t *create_tunne } else if (hash_rc == HASH_TABLE_OK) { gtpv1u_ue_data_p->ue_id = create_tunnel_req_pP->ue_index; gtpv1u_ue_data_p->instance_id = 0; // TO DO - ipv4_addr = -#warning "TO DO TO DO gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr = (uint32_t)(create_tunnel_req_pP->sgw_addr[i].buffer;" + memcpy(>PV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_addr.buffer, + >pv1u_data_g.enb_ip_address_for_S1u_S12_S4_up, + sizeof (in_addr_t)); + GTPV1U_ENB_CREATE_TUNNEL_RESP(message_p).enb_addr.length = sizeof (in_addr_t); + gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr = *((in_addr_t*)create_tunnel_req_pP->sgw_addr[i].buffer); + gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].state = BEARER_IN_CONFIG; gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_eNB = s1u_teid; gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_sgw = create_tunnel_req_pP->sgw_S1u_teid[i]; @@ -651,10 +661,10 @@ static int gtpv1u_delete_s1u_tunnel(gtpv1u_enb_delete_tunnel_req_t *req_pP) //----------------------- hash_rc = hashtable_get(gtpv1u_data_g.ue_mapping, req_pP->ue_index, (void**)>pv1u_ue_data_p); if (hash_rc == HASH_TABLE_OK) { - gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].state = BEARER_DOWN; - gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_eNB = 0; - gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_sgw = 0; -#warning "TO DO TO DO gtpv1u_ue_data_p->bearers[eps_bearer_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr" + gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].state = BEARER_DOWN; + gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_eNB = 0; + gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].teid_sgw = 0; + gtpv1u_ue_data_p->bearers[req_pP->eps_bearer_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr = 0; gtpv1u_ue_data_p->num_bearers -= 1; if (gtpv1u_ue_data_p->num_bearers == 0) { diff --git a/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h b/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h index f8c13e8cc5..871609689c 100644 --- a/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h +++ b/openair-cn/GTPV1-U/gtpv1u_eNB_defs.h @@ -70,7 +70,7 @@ typedef struct gtpv1u_bearer_s { /* TEID used in dl and ul */ teid_t teid_eNB; ///< eNB TEID teid_t teid_sgw; ///< Remote TEID - uint32_t sgw_ip_addr; + in_addr_t sgw_ip_addr; tcp_udp_port_t port; //NwGtpv1uStackSessionHandleT stack_session; bearer_state_t state; @@ -102,7 +102,7 @@ typedef struct gtpv1u_data_s{ //RB_HEAD(gtpv1u_ue_map, gtpv1u_ue_data_s) gtpv1u_ue_map_head; /* Local IP address to use */ - uint32_t enb_ip_address_for_S1u_S12_S4_up; + in_addr_t enb_ip_address_for_S1u_S12_S4_up; char *ip_addr; tcp_udp_port_t enb_port_for_S1u_S12_S4_up; /* UDP internal data */ -- GitLab