name changes

This commit is contained in:
Sukchan Lee 2017-12-02 10:50:24 +09:00
parent 8add407715
commit 4a2604b52c
6 changed files with 124 additions and 120 deletions

View File

@ -67,9 +67,9 @@ struct c_sockaddr_t {
* - Should not add any atrribute in this area.
*
* e.g)
* struct sockaddr sa;
* struct sockaddr addr;
* ...
* sockaddr_len((c_sockaddr_t *)&sa);
* sockaddr_len((c_sockaddr_t *)&addr);
*/
#define c_sa_family sa.sa_family
#define c_sa_port sin.sin_port
@ -86,14 +86,12 @@ struct c_sockaddr_t {
c_sockaddr_t *next;
};
typedef list_t c_socklist_t;
typedef struct _c_socknode_t {
typedef struct _sock_node_t {
lnode_t node;
sock_id sock;
c_sockaddr_t *sa_list;
} c_socknode_t;
} sock_node_t;
/*
* Init/Final
@ -110,8 +108,8 @@ CORE_DECLARE(status_t) sock_delete(sock_id id);
CORE_DECLARE(status_t) sock_socket(
sock_id *id, int family, int type, int protocol);
CORE_DECLARE(status_t) sock_setsockopt(sock_id id, c_int32_t opt, c_int32_t on);
CORE_DECLARE(status_t) sock_bind(sock_id id, c_sockaddr_t *sa);
CORE_DECLARE(status_t) sock_connect(sock_id id, c_sockaddr_t *sa);
CORE_DECLARE(status_t) sock_bind(sock_id id, c_sockaddr_t *addr);
CORE_DECLARE(status_t) sock_connect(sock_id id, c_sockaddr_t *addr);
CORE_DECLARE(status_t) sock_listen(sock_id id);
CORE_DECLARE(status_t) sock_accept(sock_id *new, sock_id id);
@ -123,31 +121,29 @@ CORE_DECLARE(c_sockaddr_t *) sock_remote_addr(sock_id id);
/*
* Socket Address
*/
CORE_DECLARE(c_socknode_t *) socknode_add(c_socklist_t *list,
CORE_DECLARE(sock_node_t *) sock_add_node(list_t *list,
int family, const char *hostname, c_uint16_t port, int flags);
CORE_DECLARE(status_t) socknode_remove(c_socklist_t *list, c_socknode_t *node);
CORE_DECLARE(status_t) socknode_remove_all(c_socklist_t *list);
CORE_DECLARE(status_t) sock_remove_node(list_t *list, sock_node_t *node);
CORE_DECLARE(status_t) sock_remove_all_nodes(list_t *list);
CORE_DECLARE(status_t) socknode_getifaddrs_to_list(
c_socklist_t *list, c_uint16_t port);
CORE_DECLARE(status_t) socknode_filter_family(c_socklist_t *list, int family);
CORE_DECLARE(status_t) sock_get_all_nodes(list_t *list, c_uint16_t port);
CORE_DECLARE(status_t) sock_filter_node(list_t *list, int family);
CORE_DECLARE(socklen_t) sockaddr_len(const void *sa);
CORE_DECLARE(int) sockaddr_is_equal(void *p, void *q);
CORE_DECLARE(status_t) core_getifaddrs(c_sockaddr_t **sa);
CORE_DECLARE(status_t) core_getaddrinfo(c_sockaddr_t **sa,
CORE_DECLARE(status_t) core_getaddrinfo(c_sockaddr_t **sa_list,
int family, const char *hostname, c_uint16_t port, int flags);
CORE_DECLARE(status_t) core_freeaddrinfo(c_sockaddr_t *sa);
CORE_DECLARE(status_t) core_freeaddrinfo(c_sockaddr_t *sa_list);
CORE_DECLARE(status_t) core_filteraddrinfo(c_sockaddr_t **sa_list, int family);
#define CORE_ADDRSTRLEN INET6_ADDRSTRLEN
#define CORE_ADDR(__aDDR, __bUF) \
core_inet_ntop(__aDDR, buf, CORE_ADDRSTRLEN)
#define CORE_PORT(__aDDR) \
ntohs((__aDDR)->c_sa_port)
CORE_DECLARE(const char *)core_inet_ntop(void *sa, char *buf, int buflen);
CORE_DECLARE(status_t) core_inet_pton(int family, const char *src, void *sa);
CORE_DECLARE(const char *)core_inet_ntop(void *addr, char *buf, int buflen);
CORE_DECLARE(status_t) core_inet_pton(int family, const char *src, void *addr);
CORE_DECLARE(socklen_t) sockaddr_len(const void *addr);
CORE_DECLARE(int) sockaddr_is_equal(void *p, void *q);
/*
* UDP Socket

View File

@ -14,7 +14,7 @@ static list_t fd_list;
static fd_set read_fds;
pool_declare(sock_pool, sock_t, MAX_SOCK_POOL_SIZE);
pool_declare(socknode_pool, c_socknode_t, MAX_SOCKNODE_POOL_SIZE);
pool_declare(sock_node_pool, sock_node_t, MAX_SOCKNODE_POOL_SIZE);
static status_t sononblock(int sd);
static status_t soblock(int sd);
@ -27,7 +27,7 @@ static void fd_dispatch(fd_set *fds);
status_t network_init(void)
{
pool_init(&sock_pool, MAX_SOCK_POOL_SIZE);
pool_init(&socknode_pool, MAX_SOCKNODE_POOL_SIZE);
pool_init(&sock_node_pool, MAX_SOCKNODE_POOL_SIZE);
max_fd = 0;
list_init(&fd_list);
@ -44,15 +44,15 @@ status_t network_final(void)
d_trace(3, "%d not freed in sock_pool[%d]\n",
pool_size(&sock_pool) - pool_avail(&sock_pool),
pool_size(&sock_pool));
if (pool_size(&socknode_pool) != pool_avail(&socknode_pool))
d_error("%d not freed in socknode_pool[%d]",
pool_size(&socknode_pool) - pool_avail(&socknode_pool),
pool_size(&socknode_pool));
d_trace(3, "%d not freed in socknode_pool[%d]\n",
pool_size(&socknode_pool) - pool_avail(&socknode_pool),
pool_size(&socknode_pool));
if (pool_size(&sock_node_pool) != pool_avail(&sock_node_pool))
d_error("%d not freed in sock_node_pool[%d]",
pool_size(&sock_node_pool) - pool_avail(&sock_node_pool),
pool_size(&sock_node_pool));
d_trace(3, "%d not freed in sock_node_pool[%d]\n",
pool_size(&sock_node_pool) - pool_avail(&sock_node_pool),
pool_size(&sock_node_pool));
pool_final(&sock_pool);
pool_final(&socknode_pool);
pool_final(&sock_node_pool);
return CORE_OK;
}
@ -163,54 +163,54 @@ status_t sock_setsockopt(sock_id id, c_int32_t opt, c_int32_t on)
return CORE_OK;
}
status_t sock_bind(sock_id id, c_sockaddr_t *sa)
status_t sock_bind(sock_id id, c_sockaddr_t *addr)
{
sock_t *sock = (sock_t *)id;
char buf[CORE_ADDRSTRLEN];
socklen_t addrlen;
d_assert(sock, return CORE_ERROR,);
d_assert(sa, return CORE_ERROR,);
d_assert(addr, return CORE_ERROR,);
addrlen = sockaddr_len(sa);
addrlen = sockaddr_len(addr);
d_assert(addrlen, return CORE_ERROR,);
if (bind(sock->fd, &sa->sa, addrlen) != 0)
if (bind(sock->fd, &addr->sa, addrlen) != 0)
{
d_error("socket bind(%s:%d) failed(%d:%s)",
CORE_ADDR(sa, buf), CORE_PORT(sa), errno, strerror(errno));
CORE_ADDR(addr, buf), CORE_PORT(addr), errno, strerror(errno));
return CORE_ERROR;
}
memcpy(&sock->local_addr, sa, sizeof(sock->local_addr));
memcpy(&sock->local_addr, addr, sizeof(sock->local_addr));
d_trace(1, "socket bind %s:%d\n", CORE_ADDR(sa, buf), CORE_PORT(sa));
d_trace(1, "socket bind %s:%d\n", CORE_ADDR(addr, buf), CORE_PORT(addr));
return CORE_OK;
}
status_t sock_connect(sock_id id, c_sockaddr_t *sa)
status_t sock_connect(sock_id id, c_sockaddr_t *addr)
{
sock_t *sock = (sock_t *)id;
char buf[CORE_ADDRSTRLEN];
socklen_t addrlen;
d_assert(sock, return CORE_ERROR,);
d_assert(sa, return CORE_ERROR,);
d_assert(addr, return CORE_ERROR,);
addrlen = sockaddr_len(sa);
addrlen = sockaddr_len(addr);
d_assert(addrlen, return CORE_ERROR,);
if (connect(sock->fd, &sa->sa, addrlen) != 0)
if (connect(sock->fd, &addr->sa, addrlen) != 0)
{
d_error("socket connect(%s:%d) failed(%d:%s)",
CORE_ADDR(sa, buf), CORE_PORT(sa), errno, strerror(errno));
CORE_ADDR(addr, buf), CORE_PORT(addr), errno, strerror(errno));
return CORE_ERROR;
}
memcpy(&sock->remote_addr, sa, sizeof(sock->remote_addr));
memcpy(&sock->remote_addr, addr, sizeof(sock->remote_addr));
d_trace(1, "socket connect %s:%d\n", CORE_ADDR(sa, buf), CORE_PORT(sa));
d_trace(1, "socket connect %s:%d\n", CORE_ADDR(addr, buf), CORE_PORT(addr));
return CORE_OK;
}
@ -237,15 +237,15 @@ status_t sock_accept(sock_id *new, sock_id id)
sock_t *new_sock = NULL;
int new_fd = -1;
c_sockaddr_t sa;
c_sockaddr_t addr;
socklen_t addrlen;
memset(&sa, 0, sizeof(sa));
addrlen = sizeof(sa.ss);
memset(&addr, 0, sizeof(addr));
addrlen = sizeof(addr.ss);
d_assert(id, return CORE_ERROR,);
new_fd = accept(sock->fd, &sa.sa, &addrlen);
new_fd = accept(sock->fd, &addr.sa, &addrlen);
if (new_fd < 0)
{
d_error("accept failed(%d:%s)", errno, strerror(errno));
@ -259,7 +259,7 @@ status_t sock_accept(sock_id *new, sock_id id)
new_sock->family = sock->family;
new_sock->fd = new_fd;
memcpy(&new_sock->remote_addr, &sa, sizeof(new_sock->remote_addr));
memcpy(&new_sock->remote_addr, &addr, sizeof(new_sock->remote_addr));
*new = (sock_id)new_sock;
@ -291,17 +291,16 @@ c_sockaddr_t *sock_remote_addr(sock_id id)
/*
* Socket Address
*/
static c_socknode_t *socknode_add_internal(
c_socklist_t *list, c_sockaddr_t *sa_list)
static sock_node_t *sock_add_node_internal(list_t *list, c_sockaddr_t *sa_list)
{
c_socknode_t *node = NULL;
sock_node_t *node = NULL;
d_assert(list, return NULL,);
d_assert(sa_list, return NULL,);
pool_alloc_node(&socknode_pool, &node);
pool_alloc_node(&sock_node_pool, &node);
d_assert(node, return NULL,);
memset(node, 0, sizeof(c_socknode_t));
memset(node, 0, sizeof(sock_node_t));
node->sa_list = sa_list;
@ -310,7 +309,7 @@ static c_socknode_t *socknode_add_internal(
return node;
}
c_socknode_t *socknode_add(c_socklist_t *list,
sock_node_t *sock_add_node(list_t *list,
int family, const char *hostname, c_uint16_t port, int flags)
{
status_t rv;
@ -324,31 +323,31 @@ c_socknode_t *socknode_add(c_socklist_t *list,
return NULL;
}
return socknode_add_internal(list, sa_list);
return sock_add_node_internal(list, sa_list);
}
status_t socknode_remove(c_socklist_t *list, c_socknode_t *node)
status_t sock_remove_node(list_t *list, sock_node_t *node)
{
d_assert(node, return CORE_ERROR,);
list_remove(list, node);
core_freeaddrinfo(node->sa_list);
pool_free_node(&socknode_pool, node);
pool_free_node(&sock_node_pool, node);
return CORE_OK;
}
status_t socknode_remove_all(c_socklist_t *list)
status_t sock_remove_all_nodes(list_t *list)
{
c_socknode_t *node = NULL, *next_node = NULL;
sock_node_t *node = NULL, *next_node = NULL;
node = list_first(list);
while(node)
{
next_node = list_next(node);
socknode_remove(list, node);
sock_remove_node(list, node);
node = next_node;
}
@ -356,7 +355,7 @@ status_t socknode_remove_all(c_socklist_t *list)
return CORE_OK;
}
status_t socknode_getifaddrs_to_list(c_socklist_t *list, c_uint16_t port)
status_t sock_get_all_nodes(list_t *list, c_uint16_t port)
{
struct ifaddrs *iflist, *cur;
int rc;
@ -409,7 +408,7 @@ status_t socknode_getifaddrs_to_list(c_socklist_t *list, c_uint16_t port)
memcpy(&addr->sa, cur->ifa_addr, sockaddr_len(cur->ifa_addr));
addr->c_sa_port = htons(port);
d_assert(socknode_add_internal(list, addr), return CORE_ERROR,);
d_assert(sock_add_node_internal(list, addr), return CORE_ERROR,);
}
freeifaddrs(iflist);
@ -417,39 +416,21 @@ status_t socknode_getifaddrs_to_list(c_socklist_t *list, c_uint16_t port)
return CORE_OK;
}
status_t socknode_filter_family(c_socklist_t *list, int family)
status_t sock_filter_node(list_t *list, int family)
{
c_socknode_t *node = NULL, *next_node = NULL;
sock_node_t *node = NULL, *next_node = NULL;
d_assert(list, return CORE_ERROR,);
node = list_first(list);
while(node)
{
c_sockaddr_t *addr = NULL, *prev_addr = NULL, *next_addr = NULL;
next_node = list_next(node);
prev_addr = NULL;
addr = node->sa_list;
while(addr)
{
next_addr = addr->next;
if (addr->c_sa_family != family)
{
if (prev_addr)
prev_addr->next = addr->next;
else
node->sa_list = addr->next;
core_free(addr);
}
prev_addr = addr;
addr = next_addr;
}
core_filteraddrinfo(&node->sa_list, family);
if (node->sa_list == NULL)
socknode_remove(list, node);
sock_remove_node(list, node);
node = next_node;
}
@ -457,7 +438,6 @@ status_t socknode_filter_family(c_socklist_t *list, int family)
return CORE_OK;
}
status_t core_getaddrinfo(c_sockaddr_t **sa,
int family, const char *hostname, c_uint16_t port, int flags)
{
@ -533,6 +513,34 @@ status_t core_freeaddrinfo(c_sockaddr_t *sa)
return CORE_OK;
}
status_t core_filteraddrinfo(c_sockaddr_t **sa_list, int family)
{
c_sockaddr_t *addr = NULL, *prev_addr = NULL, *next_addr = NULL;
d_assert(sa_list, return CORE_ERROR,);
prev_addr = NULL;
addr = *sa_list;
while(addr)
{
next_addr = addr->next;
if (addr->c_sa_family != family)
{
if (prev_addr)
prev_addr->next = addr->next;
else
*sa_list = addr->next;
core_free(addr);
}
prev_addr = addr;
addr = next_addr;
}
return CORE_OK;
}
const char *core_inet_ntop(void *sa, char *buf, int buflen)
{
int family;

View File

@ -335,51 +335,51 @@ static void sock_test6(abts_case *tc, void *data)
static void sock_test7(abts_case *tc, void *data)
{
status_t rv;
c_socknode_t *node;
sock_node_t *node;
c_sockaddr_t *addr;
c_socklist_t list;
list_t list;
char buf[CORE_ADDRSTRLEN];
list_init(&list);
node = socknode_add(&list, AF_INET6, NULL, PORT, 0);
node = sock_add_node(&list, AF_INET6, NULL, PORT, 0);
ABTS_PTR_NOTNULL(tc, node);
rv = socknode_filter_family(&list, AF_INET6);
rv = sock_filter_node(&list, AF_INET6);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
node = list_first(&list);
ABTS_PTR_NOTNULL(tc, node);
rv = socknode_filter_family(&list, AF_INET);
rv = sock_filter_node(&list, AF_INET);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
node = list_first(&list);
ABTS_PTR_NULL(tc, node);
node = socknode_add(&list, AF_INET, NULL, PORT, AI_PASSIVE);
node = sock_add_node(&list, AF_INET, NULL, PORT, AI_PASSIVE);
ABTS_PTR_NOTNULL(tc, node);
rv = socknode_filter_family(&list, AF_INET);
rv = sock_filter_node(&list, AF_INET);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
node = list_first(&list);
ABTS_PTR_NOTNULL(tc, node);
rv = socknode_filter_family(&list, AF_INET6);
rv = sock_filter_node(&list, AF_INET6);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
node = list_first(&list);
ABTS_PTR_NULL(tc, node);
node = socknode_add(&list, AF_UNSPEC, NULL, PORT, 0);
node = sock_add_node(&list, AF_UNSPEC, NULL, PORT, 0);
ABTS_PTR_NOTNULL(tc, node);
rv = socknode_filter_family(&list, AF_INET6);
rv = sock_filter_node(&list, AF_INET6);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
node = list_first(&list);
ABTS_PTR_NOTNULL(tc, node);
rv = socknode_filter_family(&list, AF_INET);
rv = sock_filter_node(&list, AF_INET);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
node = list_first(&list);
ABTS_PTR_NULL(tc, node);
node = socknode_add(&list, AF_INET6, NULL, PORT, 0);
node = sock_add_node(&list, AF_INET6, NULL, PORT, 0);
ABTS_PTR_NOTNULL(tc, node);
node = socknode_add(&list, AF_INET, NULL, PORT, AI_PASSIVE);
node = sock_add_node(&list, AF_INET, NULL, PORT, AI_PASSIVE);
ABTS_PTR_NOTNULL(tc, node);
node = socknode_add(&list, AF_UNSPEC, NULL, PORT, AI_PASSIVE);
node = sock_add_node(&list, AF_UNSPEC, NULL, PORT, AI_PASSIVE);
ABTS_PTR_NOTNULL(tc, node);
node = list_first(&list);
@ -402,10 +402,10 @@ static void sock_test7(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, addr);
ABTS_INT_EQUAL(tc, PORT, CORE_PORT(addr));
rv = socknode_getifaddrs_to_list(&list, PORT);
rv = sock_get_all_nodes(&list, PORT);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
socknode_remove_all(&list);
sock_remove_all_nodes(&list);
}
abts_suite *testsock(abts_suite *suite)

View File

@ -109,8 +109,8 @@ status_t mme_context_final()
index_final(&mme_enb_pool);
pool_final(&mme_sgw_pool);
socknode_remove_all(&self.gtpc4_list);
socknode_remove_all(&self.gtpc6_list);
sock_remove_all_nodes(&self.gtpc4_list);
sock_remove_all_nodes(&self.gtpc6_list);
pool_final(&mme_s1ap_pool);
@ -338,7 +338,7 @@ status_t mme_context_parse_config()
yaml_iter_recurse(&mme_iter, &gtpc_array);
do
{
c_socknode_t *node = NULL;
sock_node_t *node = NULL;
int family = AF_UNSPEC;
const char *hostname = NULL;
c_uint16_t port = GTPV2_C_UDP_PORT;
@ -400,20 +400,20 @@ status_t mme_context_parse_config()
if (context_self()->parameter.no_ipv4 == 0)
{
node = socknode_add(&self.gtpc4_list,
node = sock_add_node(&self.gtpc4_list,
family, hostname, port, AI_PASSIVE);
d_assert(node, return CORE_ERROR,);
rv = socknode_filter_family(
rv = sock_filter_node(
&self.gtpc4_list, AF_INET);
d_assert(rv == CORE_OK, return CORE_ERROR,);
}
if (context_self()->parameter.no_ipv6 == 0)
{
node = socknode_add(&self.gtpc6_list,
node = sock_add_node(&self.gtpc6_list,
family, hostname, port, AI_PASSIVE);
d_assert(node, return CORE_ERROR,);
rv = socknode_filter_family(
rv = sock_filter_node(
&self.gtpc6_list, AF_INET6);
d_assert(rv == CORE_OK, return CORE_ERROR,);
}
@ -424,20 +424,20 @@ status_t mme_context_parse_config()
{
if (context_self()->parameter.no_ipv4 == 0)
{
rv = socknode_getifaddrs_to_list(
rv = sock_get_all_nodes(
&self.gtpc4_list, self.gtpc_port);
d_assert(rv == CORE_OK, return CORE_ERROR,);
rv = socknode_filter_family(
rv = sock_filter_node(
&self.gtpc4_list, AF_INET);
d_assert(rv == CORE_OK, return CORE_ERROR,);
}
if (context_self()->parameter.no_ipv6 == 0)
{
rv = socknode_getifaddrs_to_list(
rv = sock_get_all_nodes(
&self.gtpc6_list, self.gtpc_port);
d_assert(rv == CORE_OK, return CORE_ERROR,);
rv = socknode_filter_family(&self.gtpc6_list,
rv = sock_filter_node(&self.gtpc6_list,
AF_INET6);
d_assert(rv == CORE_OK, return CORE_ERROR,);
}

View File

@ -61,9 +61,9 @@ typedef struct _mme_context_t {
c_uint16_t gtpc_port; /* Default GTPC Port */
c_socklist_t gtpc4_list; /* MME GTPC IPv4 Server List */
list_t gtpc4_list; /* MME GTPC IPv4 Server List */
c_sockaddr_t *gtpc4_addr; /* MME GTPC IPv4 Address */
c_socklist_t gtpc6_list; /* MME GTPC IPv6 Server List */
list_t gtpc6_list; /* MME GTPC IPv6 Server List */
c_sockaddr_t *gtpc6_addr; /* MME GTPC IPv6 Address */
c_uint32_t s5c_addr; /* PGW S5C remote address */

View File

@ -46,7 +46,7 @@ status_t mme_gtp_open()
{
status_t rv;
mme_sgw_t *sgw = mme_sgw_first();
c_socknode_t *node;
sock_node_t *node;
sock_id temp; /* FIXME ADDR */
for (node = list_first(&mme_self()->gtpc4_list);
@ -107,7 +107,7 @@ status_t mme_gtp_open()
status_t mme_gtp_close()
{
c_socknode_t *node;
sock_node_t *node;
for (node = list_first(&mme_self()->gtpc4_list);
node; node = list_next(node))