Commit 58b09eb3 authored by gauthier's avatar gauthier

New config (libconfig) + hashtable rename

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5072 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent f3c744fe
......@@ -12,11 +12,12 @@ AM_CFLAGS = @ADD_CFLAGS@ \
-I$(top_srcdir)/UTILS/HASHTABLE
noinst_LTLIBRARIES = libsgw_lite.la
libsgw_lite_la_LDFLAGS = -all-static
libsgw_lite_la_LDFLAGS = -all-static -lconfig
libsgw_lite_la_SOURCES= \
s11_causes.c s11_causes.h \
sgw_lite_task.c \
sgw_lite_handlers.c sgw_lite_handlers.h \
libsgw_lite_la_SOURCES= \
spgw_config.c spgw_config.h \
s11_causes.c s11_causes.h \
sgw_lite_task.c \
sgw_lite_handlers.c sgw_lite_handlers.h \
sgw_lite_context_manager.c sgw_lite_context_manager.h \
sgw_lite.h
sgw_lite.h sgw_lite_defs.h sgw_lite_ie_defs.h
......@@ -27,6 +27,8 @@
06410 Biot FRANCE
*******************************************************************************/
#define SGW_LITE
#define S11_CAUSES_C
#include <stdio.h>
#include <stdlib.h>
......
......@@ -59,5 +59,19 @@ typedef struct sgw_app_s{
} sgw_app_t;
typedef struct ipv4_address_s {
}ipv4_address_t;
typedef struct ipv6_address_s {
}ipv6_address_t;
typedef struct pgw_app_s{
STAILQ_HEAD(free_ipv4_addresses_head_s, ipv4_address_s) free_ipv4_addresses_head;
STAILQ_HEAD(free_ipv6_addresses_head_s, ipv6_address_s) free_ipv6_addresses_head;
STAILQ_HEAD(allocated_ipv4_addresses_head_s, ipv4_address_s) allocated_ipv4_addresses_head;
STAILQ_HEAD(allocated_ipv6_addresses_head_s, ipv6_address_s) allocated_ipv6_addresses_head;
} pgw_app_t;
#endif
......@@ -27,6 +27,8 @@
06410 Biot FRANCE
*******************************************************************************/
#define SGW_LITE
#define SGW_LITE_CONTEXT_MANAGER_C
#include <stdio.h>
#include <stdlib.h>
......@@ -65,7 +67,7 @@ void sgw_lite_display_s11teid2mme_mappings(void)
SPGW_APP_DEBUG("+--------------------------------------+\n");
SPGW_APP_DEBUG("| MME <--- S11 TE ID MAPPINGS ---> SGW |\n");
SPGW_APP_DEBUG("+--------------------------------------+\n");
hashtbl_apply_funct_on_elements(sgw_app.s11teid2mme_hashtable, sgw_lite_display_s11teid2mme_mapping, NULL);
hashtable_apply_funct_on_elements(sgw_app.s11teid2mme_hashtable, sgw_lite_display_s11teid2mme_mapping, NULL);
SPGW_APP_DEBUG("+--------------------------------------+\n");
}
//-----------------------------------------------------------------------------
......@@ -91,7 +93,7 @@ static void sgw_lite_display_s11_bearer_context_information(uint64_t keyP, void
//-----------------------------------------------------------------------------
{
s_plus_p_gw_eps_bearer_context_information_t * sp_context_information= NULL;
hashtbl_rc_t hash_rc;
hashtable_rc_t hash_rc;
if (dataP != NULL) {
sp_context_information = (s_plus_p_gw_eps_bearer_context_information_t *)dataP;
......@@ -111,7 +113,7 @@ static void sgw_lite_display_s11_bearer_context_information(uint64_t keyP, void
SPGW_APP_DEBUG("|\t\t\tdefault_bearer: %u\n", sp_context_information->sgw_eps_bearer_context_information.pdn_connection.default_bearer);
SPGW_APP_DEBUG("|\t\t\teps_bearers:\n");
hash_rc = hashtbl_apply_funct_on_elements(sp_context_information->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers,
hash_rc = hashtable_apply_funct_on_elements(sp_context_information->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers,
sgw_lite_display_pdn_connection_sgw_eps_bearers,
NULL);
if (hash_rc != HASH_TABLE_OK) {
......@@ -131,7 +133,7 @@ void sgw_lite_display_s11_bearer_context_information_mapping(void)
SPGW_APP_DEBUG("+-----------------------------------------+\n");
SPGW_APP_DEBUG("| S11 BEARER CONTEXT INFORMATION MAPPINGS |\n");
SPGW_APP_DEBUG("+-----------------------------------------+\n");
hashtbl_apply_funct_on_elements(sgw_app.s11_bearer_context_information_hashtable, sgw_lite_display_s11_bearer_context_information, NULL);
hashtable_apply_funct_on_elements(sgw_app.s11_bearer_context_information_hashtable, sgw_lite_display_s11_bearer_context_information, NULL);
SPGW_APP_DEBUG("+--------------------------------------+\n");
}
//-----------------------------------------------------------------------------
......@@ -140,7 +142,7 @@ void pgw_lite_cm_free_apn(pgw_apn_t *apnP)
{
if (apnP != NULL) {
if (apnP->pdn_connections != NULL) {
obj_hashtbl_destroy(apnP->pdn_connections);
obj_hashtable_destroy(apnP->pdn_connections);
}
}
}
......@@ -175,7 +177,7 @@ mme_sgw_tunnel_t *sgw_lite_cm_create_s11_tunnel(Teid_t remote_teid, Teid_t local
/* Trying to insert the new tunnel into the tree.
* If collision_p is not NULL (0), it means tunnel is already present.
*/
hashtbl_insert(sgw_app.s11teid2mme_hashtable, local_teid, new_tunnel);
hashtable_insert(sgw_app.s11teid2mme_hashtable, local_teid, new_tunnel);
return new_tunnel;
}
......@@ -186,7 +188,7 @@ int sgw_lite_cm_remove_s11_tunnel(Teid_t local_teid)
{
int temp;
temp = hashtbl_remove(sgw_app.s11teid2mme_hashtable, local_teid);
temp = hashtable_remove(sgw_app.s11teid2mme_hashtable, local_teid);
return temp;
}
......@@ -223,7 +225,7 @@ sgw_pdn_connection_t * sgw_lite_cm_create_pdn_connection(void)
}
memset(pdn_connection, 0, sizeof(sgw_pdn_connection_t));
pdn_connection->sgw_eps_bearers = hashtbl_create(12, NULL, NULL);
pdn_connection->sgw_eps_bearers = hashtable_create(12, NULL, NULL);
if ( pdn_connection->sgw_eps_bearers == NULL) {
SPGW_APP_ERROR("Failed to create eps bearers collection object\n");
free(pdn_connection);
......@@ -238,7 +240,7 @@ void sgw_lite_cm_free_pdn_connection(sgw_pdn_connection_t *pdn_connectionP)
{
if (pdn_connectionP != NULL) {
if (pdn_connectionP->sgw_eps_bearers != NULL) {
hashtbl_destroy(pdn_connectionP->sgw_eps_bearers);
hashtable_destroy(pdn_connectionP->sgw_eps_bearers);
}
}
}
......@@ -250,14 +252,14 @@ void sgw_lite_cm_free_s_plus_p_gw_eps_bearer_context_information(s_plus_p_gw_eps
return;
}
/*if (contextP->sgw_eps_bearer_context_information.pdn_connections != NULL) {
obj_hashtbl_destroy(contextP->sgw_eps_bearer_context_information.pdn_connections);
obj_hashtable_destroy(contextP->sgw_eps_bearer_context_information.pdn_connections);
}*/
if (contextP->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers != NULL) {
hashtbl_destroy(contextP->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers);
hashtable_destroy(contextP->sgw_eps_bearer_context_information.pdn_connection.sgw_eps_bearers);
}
if (contextP->pgw_eps_bearer_context_information.apns != NULL) {
obj_hashtbl_destroy(contextP->pgw_eps_bearer_context_information.apns);
obj_hashtable_destroy(contextP->pgw_eps_bearer_context_information.apns);
}
free(contextP);
}
......@@ -278,7 +280,7 @@ s_plus_p_gw_eps_bearer_context_information_t * sgw_lite_cm_create_bearer_context
memset(new_bearer_context_information, 0, sizeof(s_plus_p_gw_eps_bearer_context_information_t));
SPGW_APP_DEBUG("sgw_lite_cm_create_bearer_context_information_in_collection %d\n", teid);
/*new_bearer_context_information->sgw_eps_bearer_context_information.pdn_connections = obj_hashtbl_create(32, NULL, NULL, sgw_lite_cm_free_pdn_connection);
/*new_bearer_context_information->sgw_eps_bearer_context_information.pdn_connections = obj_hashtable_create(32, NULL, NULL, sgw_lite_cm_free_pdn_connection);
if ( new_bearer_context_information->sgw_eps_bearer_context_information.pdn_connections == NULL) {
SPGW_APP_ERROR("Failed to create PDN connections collection object entry for EPS bearer teid %u \n", teid);
......@@ -286,7 +288,7 @@ s_plus_p_gw_eps_bearer_context_information_t * sgw_lite_cm_create_bearer_context
return NULL;
}*/
new_bearer_context_information->pgw_eps_bearer_context_information.apns = obj_hashtbl_create(32, NULL, NULL, pgw_lite_cm_free_apn);
new_bearer_context_information->pgw_eps_bearer_context_information.apns = obj_hashtable_create(32, NULL, NULL, pgw_lite_cm_free_apn);
if ( new_bearer_context_information->pgw_eps_bearer_context_information.apns == NULL) {
SPGW_APP_ERROR("Failed to create APN collection object entry for EPS bearer S11 teid %u \n", teid);
......@@ -297,7 +299,7 @@ s_plus_p_gw_eps_bearer_context_information_t * sgw_lite_cm_create_bearer_context
/* Trying to insert the new tunnel into the tree.
* If collision_p is not NULL (0), it means tunnel is already present.
*/
hashtbl_insert(sgw_app.s11_bearer_context_information_hashtable, teid, new_bearer_context_information);
hashtable_insert(sgw_app.s11_bearer_context_information_hashtable, teid, new_bearer_context_information);
SPGW_APP_DEBUG("Added new s_plus_p_gw_eps_bearer_context_information_t in s11_bearer_context_information_hashtable key teid %u\n", teid);
return new_bearer_context_information;
......@@ -305,7 +307,7 @@ s_plus_p_gw_eps_bearer_context_information_t * sgw_lite_cm_create_bearer_context
int sgw_lite_cm_remove_bearer_context_information(Teid_t teid) {
int temp;
temp = hashtbl_remove(sgw_app.s11_bearer_context_information_hashtable, teid);
temp = hashtable_remove(sgw_app.s11_bearer_context_information_hashtable, teid);
return temp;
}
......@@ -316,7 +318,7 @@ sgw_eps_bearer_entry_t * sgw_lite_cm_create_eps_bearer_entry_in_collection(hash_
//-----------------------------------------------------------------------------
{
sgw_eps_bearer_entry_t *new_eps_bearer_entry;
hashtbl_rc_t hash_rc = HASH_TABLE_OK;
hashtable_rc_t hash_rc = HASH_TABLE_OK;
if (eps_bearersP == NULL) {
SPGW_APP_ERROR("Failed to create EPS bearer entry for EPS bearer id %u. reason eps bearer hashtable is NULL \n", eps_bearer_idP);
......@@ -333,10 +335,10 @@ sgw_eps_bearer_entry_t * sgw_lite_cm_create_eps_bearer_entry_in_collection(hash_
new_eps_bearer_entry->eps_bearer_id = eps_bearer_idP;
hash_rc = hashtbl_insert(eps_bearersP, eps_bearer_idP, new_eps_bearer_entry);
SPGW_APP_DEBUG("Inserted new EPS bearer entry for EPS bearer id %u status %s\n", eps_bearer_idP, hashtble_rc_code2string(hash_rc));
hash_rc = hashtable_insert(eps_bearersP, eps_bearer_idP, new_eps_bearer_entry);
SPGW_APP_DEBUG("Inserted new EPS bearer entry for EPS bearer id %u status %s\n", eps_bearer_idP, hashtable_rc_code2string(hash_rc));
hash_rc = hashtbl_apply_funct_on_elements(eps_bearersP,
hash_rc = hashtable_apply_funct_on_elements(eps_bearersP,
sgw_lite_display_pdn_connection_sgw_eps_bearers,
NULL);
if (hash_rc != HASH_TABLE_OK) {
......@@ -358,7 +360,7 @@ int sgw_lite_cm_remove_eps_bearer_entry(hash_table_t *eps_bearersP, ebi_t eps_be
if (eps_bearersP == NULL) {
return -1;
}
temp = hashtbl_remove(eps_bearersP, eps_bearer_idP);
temp = hashtable_remove(eps_bearersP, eps_bearer_idP);
return temp;
}
......
......@@ -44,6 +44,6 @@
while(0)
#endif
int sgw_lite_init(const mme_config_t *mme_config);
int sgw_lite_init(char* config_file_name_pP);
#endif /* SGW_LITE_DEFS_H_ */
This diff is collapsed.
......@@ -27,6 +27,8 @@
06410 Biot FRANCE
*******************************************************************************/
#define SGW_LITE
#define SGW_LITE_TASK_C
#include <stdio.h>
#include <stdlib.h>
......@@ -40,8 +42,11 @@
#include "sgw_lite_handlers.h"
#include "sgw_lite.h"
#include "hashtable.h"
#include "spgw_config.h"
sgw_app_t sgw_app;
spgw_config_t spgw_config;
sgw_app_t sgw_app;
pgw_app_t pgw_app;
static void *sgw_lite_intertask_interface(void *args_p)
{
......@@ -105,44 +110,46 @@ static void *sgw_lite_intertask_interface(void *args_p)
return NULL;
}
int sgw_lite_init(const mme_config_t *mme_config_p)
int sgw_lite_init(char* config_file_name_pP)
{
SPGW_APP_DEBUG("Initializing SPGW-APP task interface\n");
if (itti_create_task(TASK_SPGW_APP,
&sgw_lite_intertask_interface, NULL) < 0) {
perror("pthread_create");
SPGW_APP_DEBUG("Initializing SPGW-APP task interface: ERROR\n");
return -1;
}
spgw_config_init(config_file_name_pP, &spgw_config);
sgw_app.s11teid2mme_hashtable = hashtbl_create (8192, NULL, NULL);
sgw_app.s11teid2mme_hashtable = hashtable_create (8192, NULL, NULL);
if (sgw_app.s11teid2mme_hashtable == NULL) {
perror("hashtbl_create");
perror("hashtable_create");
SPGW_APP_DEBUG("Initializing SPGW-APP task interface: ERROR\n");
return -1;
}
sgw_app.s1uteid2enb_hashtable = hashtbl_create (8192, NULL, NULL);
sgw_app.s1uteid2enb_hashtable = hashtable_create (8192, NULL, NULL);
if (sgw_app.s1uteid2enb_hashtable == NULL) {
perror("hashtbl_create");
perror("hashtable_create");
SPGW_APP_DEBUG("Initializing SPGW-APP task interface: ERROR\n");
return -1;
}
sgw_app.s11_bearer_context_information_hashtable = hashtbl_create (8192, NULL, sgw_lite_cm_free_s_plus_p_gw_eps_bearer_context_information);
sgw_app.s11_bearer_context_information_hashtable = hashtable_create (8192, NULL, sgw_lite_cm_free_s_plus_p_gw_eps_bearer_context_information);
if (sgw_app.s11_bearer_context_information_hashtable == NULL) {
perror("hashtbl_create");
perror("hashtable_create");
SPGW_APP_DEBUG("Initializing SPGW-APP task interface: ERROR\n");
return -1;
}
sgw_app.sgw_interface_name_for_S1u_S12_S4_up = mme_config_p->ipv4.sgw_interface_name_for_S1u_S12_S4_up;
sgw_app.sgw_ip_address_for_S1u_S12_S4_up = mme_config_p->ipv4.sgw_ip_address_for_S1u_S12_S4_up;
sgw_app.sgw_interface_name_for_S11_S4 = mme_config_p->ipv4.sgw_interface_name_for_S11;
sgw_app.sgw_ip_address_for_S11_S4 = mme_config_p->ipv4.sgw_ip_address_for_S11;
//sgw_app.sgw_ip_address_for_S5_S8_cp = mme_config_p->ipv4.sgw_ip_address_for_S5_S8_cp;
sgw_app.sgw_ip_address_for_S5_S8_up = mme_config_p->ipv4.sgw_ip_address_for_S5_S8_up;
sgw_app.sgw_interface_name_for_S1u_S12_S4_up = spgw_config.sgw_config.ipv4.sgw_interface_name_for_S1u_S12_S4_up;
sgw_app.sgw_ip_address_for_S1u_S12_S4_up = spgw_config.sgw_config.ipv4.sgw_ipv4_address_for_S1u_S12_S4_up;
sgw_app.sgw_interface_name_for_S11_S4 = spgw_config.sgw_config.ipv4.sgw_interface_name_for_S11;
sgw_app.sgw_ip_address_for_S11_S4 = spgw_config.sgw_config.ipv4.sgw_ipv4_address_for_S11;
//sgw_app.sgw_ip_address_for_S5_S8_cp = spgw_config.sgw_config.ipv4.sgw_ip_address_for_S5_S8_cp;
sgw_app.sgw_ip_address_for_S5_S8_up = spgw_config.sgw_config.ipv4.sgw_ipv4_address_for_S5_S8_up;
SPGW_APP_DEBUG("Initializing SPGW-APP task interface\n");
if (itti_create_task(TASK_SPGW_APP,
&sgw_lite_intertask_interface, NULL) < 0) {
perror("pthread_create");
SPGW_APP_DEBUG("Initializing SPGW-APP task interface: ERROR\n");
return -1;
}
SPGW_APP_DEBUG("Initializing SPGW-APP task interface: DONE\n");
return 0;
......
This diff is collapsed.
/*******************************************************************************
Eurecom OpenAirInterface
Copyright(c) 1999 - 2014 Eurecom
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
the file called "COPYING".
Contact Information
Openair Admin: openair_admin@eurecom.fr
Openair Tech : openair_tech@eurecom.fr
Forums : http://forums.eurecom.fr/openairinterface
Address : EURECOM, Campus SophiaTech, 450 Route des Chappes
06410 Biot FRANCE
*******************************************************************************/
#ifndef SPGW_CONFIG_H_
#define SPGW_CONFIG_H_
#include <sys/socket.h> // inet_aton
#include <netinet/in.h> // inet_aton
#include <arpa/inet.h> // inet_aton
#define SGW_CONFIG_STRING_SGW_CONFIG "S-GW"
#define SGW_CONFIG_STRING_NETWORK_INTERFACES_CONFIG "NETWORK_INTERFACES"
#define SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP "SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP"
#define SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP "SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP"
#define SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S5_S8_UP "SGW_INTERFACE_NAME_FOR_S5_S8_UP"
#define SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S5_S8_UP "SGW_IPV4_ADDRESS_FOR_S5_S8_UP"
#define SGW_CONFIG_STRING_SGW_INTERFACE_NAME_FOR_S11 "SGW_INTERFACE_NAME_FOR_S11"
#define SGW_CONFIG_STRING_SGW_IPV4_ADDRESS_FOR_S11 "SGW_IPV4_ADDRESS_FOR_S11"
#define PGW_CONFIG_STRING_PGW_CONFIG "P-GW"
#define PGW_CONFIG_STRING_NETWORK_INTERFACES_CONFIG "NETWORK_INTERFACES"
#define PGW_CONFIG_STRING_PGW_INTERFACE_NAME_FOR_S5_S8 "PGW_INTERFACE_NAME_FOR_S5_S8"
#define PGW_CONFIG_STRING_PGW_IPV4_ADDRESS_FOR_S5_S8 "PGW_IPV4_ADDRESS_FOR_S5_S8"
#define PGW_CONFIG_STRING_PGW_INTERFACE_NAME_FOR_SGI "PGW_INTERFACE_NAME_FOR_SGI"
#define PGW_CONFIG_STRING_PGW_IPV4_ADDR_FOR_SGI "PGW_IPV4_ADDR_FOR_SGI"
#define PGW_CONFIG_STRING_IP_ADDRESS_POOL "IP_ADDRESS_POOL"
#define PGW_CONFIG_STRING_IPV4_ADDRESS_LIST "IPV4_LIST"
#define PGW_CONFIG_STRING_IPV6_ADDRESS_LIST "IPV6_LIST"
#define PGW_CONFIG_STRING_IP_ADDRESS_RANGE_DELIMITERS " -<>"
#define PGW_CONFIG_STRING_IPV6_PREFIX_DELIMITER " /"
#define IPV4_STR_ADDR_TO_INT_NWBO(AdDr_StR,NwBo,MeSsAgE ) do {\
struct in_addr inp;\
if ( inet_aton(AdDr_StR, &inp ) < 0 ) {\
AssertFatal (0, MeSsAgE);\
} else {\
NwBo = inp.s_addr;\
}\
} while (0);
typedef struct sgw_config_s {
struct {
char *sgw_interface_name_for_S1u_S12_S4_up;
uint32_t sgw_ipv4_address_for_S1u_S12_S4_up;
int sgw_ip_netmask_for_S1u_S12_S4_up;
char *sgw_interface_name_for_S5_S8_up;
uint32_t sgw_ipv4_address_for_S5_S8_up;
int sgw_ip_netmask_for_S5_S8_up;
char *sgw_interface_name_for_S11;
uint32_t sgw_ipv4_address_for_S11;
int sgw_ip_netmask_for_S11;
} ipv4;
} sgw_config_t;
// may be more
#define PGW_MAX_ALLOCATED_PDN_ADDRESSES 1024
typedef struct pgw_config_s {
struct {
char *pgw_interface_name_for_S5_S8;
uint32_t pgw_ipv4_address_for_S5_S8;
int pgw_ip_netmask_for_S5_S8;
char *pgw_interface_name_for_SGI;
uint32_t pgw_ipv4_address_for_SGI;
int pgw_ip_netmask_for_SGI;
} ipv4;
struct {
int num_ipv4_addresses;
struct in_addr ipv4_addresses[PGW_MAX_ALLOCATED_PDN_ADDRESSES];
int num_ipv6_addresses;
struct in6_addr ipv6_addresses[PGW_MAX_ALLOCATED_PDN_ADDRESSES];
} pool_pdn_addresses;
} pgw_config_t;
typedef struct spgw_config_s {
sgw_config_t sgw_config;
pgw_config_t pgw_config;
}spgw_config_t;
#ifndef SGW_LITE
extern spgw_config_t spgw_config;
#endif
int spgw_config_init(char* lib_config_file_name_pP, spgw_config_t* config_pP);
#endif /* ENB_CONFIG_H_ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment