socknode includes pollset

This commit is contained in:
Sukchan Lee
2019-05-31 23:22:22 +09:00
parent 163bc4a040
commit 32c9c512d8
9 changed files with 71 additions and 106 deletions

View File

@@ -23,18 +23,19 @@
#include "gtp_path.h"
int gtp_server(ogs_socknode_t *snode)
ogs_sock_t *gtp_server(ogs_socknode_t *node)
{
char buf[OGS_ADDRSTRLEN];
ogs_assert(snode);
ogs_sock_t *gtp;
ogs_assert(node);
ogs_udp_server(snode);
ogs_assert(snode->sock);
gtp = ogs_udp_server(node);
ogs_assert(gtp);
ogs_info("gtp_server() [%s]:%d",
OGS_ADDR(snode->addr, buf), OGS_PORT(snode->addr));
OGS_ADDR(node->addr, buf), OGS_PORT(node->addr));
return OGS_OK;
return gtp;
}
int gtp_connect(ogs_sock_t *ipv4, ogs_sock_t *ipv6, gtp_node_t *gnode)

View File

@@ -26,7 +26,7 @@ typedef struct gtp_node_s gtp_node_t;
extern "C" {
#endif /* __cplusplus */
int gtp_server(ogs_socknode_t *snode);
ogs_sock_t *gtp_server(ogs_socknode_t *node);
int gtp_connect(ogs_sock_t *ipv4, ogs_sock_t *ipv6, gtp_node_t *gnode);
ogs_sock_t *gtp_local_sock_first(ogs_list_t *list);

View File

@@ -36,33 +36,25 @@ static void _gtpv2_c_recv_cb(short when, ogs_socket_t fd, void *data)
int mme_gtp_open()
{
int rv;
ogs_socknode_t *snode = NULL;
ogs_socknode_t *node = NULL;
ogs_sock_t *sock = NULL;
mme_sgw_t *sgw = NULL;
ogs_list_for_each(&mme_self()->gtpc_list, snode)
ogs_list_for_each(&mme_self()->gtpc_list, node)
{
rv = gtp_server(snode);
ogs_assert(rv == OGS_OK);
ogs_socknode_set_poll(node, mme_self()->pollset,
OGS_POLLIN, _gtpv2_c_recv_cb, NULL);
sock = snode->sock;
sock = gtp_server(node);
ogs_assert(sock);
snode->pollin.poll = ogs_pollset_add(mme_self()->pollset,
OGS_POLLIN, sock->fd, _gtpv2_c_recv_cb, NULL);
ogs_assert(snode->pollin.poll);
}
ogs_list_for_each(&mme_self()->gtpc_list6, snode)
ogs_list_for_each(&mme_self()->gtpc_list6, node)
{
rv = gtp_server(snode);
ogs_assert(rv == OGS_OK);
ogs_socknode_set_poll(node, mme_self()->pollset,
OGS_POLLIN, _gtpv2_c_recv_cb, NULL);
sock = snode->sock;
sock = gtp_server(node);
ogs_assert(sock);
snode->pollin.poll = ogs_pollset_add(mme_self()->pollset,
OGS_POLLIN, sock->fd, _gtpv2_c_recv_cb, NULL);
ogs_assert(snode->pollin.poll);
}
mme_self()->gtpc_sock = gtp_local_sock_first(&mme_self()->gtpc_list);

View File

@@ -156,6 +156,8 @@ ogs_sock_t *ogs_sctp_server(int type, ogs_socknode_t *node)
node->sock = new;
ogs_socknode_install_poll(node);
return new;
}
@@ -193,6 +195,8 @@ ogs_sock_t *ogs_sctp_client(int type, ogs_socknode_t *node)
node->sock = new;
ogs_socknode_install_poll(node);
return new;
}

View File

@@ -7,23 +7,22 @@
static void accept_handler(short when, ogs_socket_t fd, void *data);
void s1ap_server(ogs_socknode_t *snode, int type)
void s1ap_server(ogs_socknode_t *node, int type)
{
char buf[OGS_ADDRSTRLEN];
ogs_sock_t *sock = NULL;
ogs_assert(snode);
ogs_assert(node);
memcpy(&snode->option,
&context_self()->config.sockopt, sizeof(snode->option));
ogs_sctp_server(type, snode);
ogs_assert(snode->sock);
ogs_socknode_set_option(node, &context_self()->config.sockopt);
ogs_socknode_set_poll(node, mme_self()->pollset,
OGS_POLLIN, accept_handler, node);
snode->pollin.poll = ogs_pollset_add(mme_self()->pollset,
OGS_POLLIN, snode->sock->fd, accept_handler, snode->sock);
ogs_assert(snode->pollin.poll);
sock = ogs_sctp_server(type, node);
ogs_assert(sock);
ogs_info("s1ap_server() [%s]:%d",
OGS_ADDR(snode->addr, buf), OGS_PORT(snode->addr));
OGS_ADDR(node->addr, buf), OGS_PORT(node->addr));
}
void s1ap_closesocket(ogs_sock_t *sock)
@@ -73,9 +72,12 @@ int s1ap_recv(ogs_sock_t *sock, ogs_pkbuf_t *pkbuf)
static void accept_handler(short when, ogs_socket_t fd, void *data)
{
char buf[OGS_ADDRSTRLEN];
ogs_sock_t *sock = data;
ogs_socknode_t *node = data;
ogs_sock_t *sock = NULL;
ogs_sock_t *new = NULL;
ogs_assert(node);
sock = node->sock;
ogs_assert(sock);
ogs_assert(fd != INVALID_SOCKET);

View File

@@ -13,9 +13,9 @@ extern "C" {
int s1ap_open();
void s1ap_close();
void s1ap_server(ogs_socknode_t *snode, int type);
void s1ap_server(ogs_socknode_t *node, int type);
void s1ap_closesocket(ogs_sock_t *sock);
void s1ap_delete(ogs_socknode_t *snode);
void s1ap_delete(ogs_socknode_t *node);
void s1ap_recv_handler(short when, ogs_socket_t fd, void *data);
int s1ap_send(ogs_sock_t *sock,

View File

@@ -181,36 +181,27 @@ cleanup:
int pgw_gtp_open()
{
int rv;
pgw_dev_t *dev = NULL;
pgw_subnet_t *subnet = NULL;
ogs_socknode_t *snode = NULL;
ogs_socknode_t *node = NULL;
ogs_sock_t *sock = NULL;
int rc;
ogs_list_for_each(&pgw_self()->gtpc_list, snode)
ogs_list_for_each(&pgw_self()->gtpc_list, node)
{
rv = gtp_server(snode);
ogs_assert(rv == OGS_OK);
ogs_socknode_set_poll(node, pgw_self()->pollset,
OGS_POLLIN, _gtpv2_c_recv_cb, NULL);
sock = snode->sock;
sock = gtp_server(node);
ogs_assert(sock);
snode->pollin.poll = ogs_pollset_add(pgw_self()->pollset,
OGS_POLLIN, sock->fd, _gtpv2_c_recv_cb, NULL);
ogs_assert(snode->pollin.poll);
}
ogs_list_for_each(&pgw_self()->gtpc_list6, snode)
ogs_list_for_each(&pgw_self()->gtpc_list6, node)
{
rv = gtp_server(snode);
ogs_assert(rv == OGS_OK);
ogs_socknode_set_poll(node, pgw_self()->pollset,
OGS_POLLIN, _gtpv2_c_recv_cb, NULL);
sock = snode->sock;
sock = gtp_server(node);
ogs_assert(sock);
snode->pollin.poll = ogs_pollset_add(pgw_self()->pollset,
OGS_POLLIN, sock->fd, _gtpv2_c_recv_cb, NULL);
ogs_assert(snode->pollin.poll);
}
pgw_self()->gtpc_sock = gtp_local_sock_first(&pgw_self()->gtpc_list);
@@ -220,29 +211,21 @@ int pgw_gtp_open()
ogs_assert(pgw_self()->gtpc_addr || pgw_self()->gtpc_addr6);
ogs_list_for_each(&pgw_self()->gtpu_list, snode)
ogs_list_for_each(&pgw_self()->gtpu_list, node)
{
rv = gtp_server(snode);
ogs_assert(rv == OGS_OK);
ogs_socknode_set_poll(node, pgw_self()->pollset,
OGS_POLLIN, _gtpv1_u_recv_cb, NULL);
sock = snode->sock;
sock = gtp_server(node);
ogs_assert(sock);
snode->pollin.poll = ogs_pollset_add(pgw_self()->pollset,
OGS_POLLIN, sock->fd, _gtpv1_u_recv_cb, NULL);
ogs_assert(snode->pollin.poll);
}
ogs_list_for_each(&pgw_self()->gtpu_list6, snode)
ogs_list_for_each(&pgw_self()->gtpu_list6, node)
{
rv = gtp_server(snode);
ogs_assert(rv == OGS_OK);
ogs_socknode_set_poll(node, pgw_self()->pollset,
OGS_POLLIN, _gtpv1_u_recv_cb, NULL);
sock = snode->sock;
sock = gtp_server(node);
ogs_assert(sock);
snode->pollin.poll = ogs_pollset_add(pgw_self()->pollset,
OGS_POLLIN, sock->fd, _gtpv1_u_recv_cb, NULL);
ogs_assert(snode->pollin.poll);
}
pgw_self()->gtpu_sock = gtp_local_sock_first(&pgw_self()->gtpu_list);

View File

@@ -242,33 +242,24 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
int sgw_gtp_open()
{
int rv;
ogs_socknode_t *snode = NULL;
ogs_socknode_t *node = NULL;
ogs_sock_t *sock = NULL;
ogs_list_for_each(&sgw_self()->gtpc_list, snode)
ogs_list_for_each(&sgw_self()->gtpc_list, node)
{
rv = gtp_server(snode);
ogs_assert(rv == OGS_OK);
ogs_socknode_set_poll(node, sgw_self()->pollset,
OGS_POLLIN, _gtpv2_c_recv_cb, NULL);
sock = snode->sock;
sock = gtp_server(node);
ogs_assert(sock);
snode->pollin.poll = ogs_pollset_add(sgw_self()->pollset,
OGS_POLLIN, sock->fd, _gtpv2_c_recv_cb, NULL);
ogs_assert(snode->pollin.poll);
}
ogs_list_for_each(&sgw_self()->gtpc_list6, snode)
ogs_list_for_each(&sgw_self()->gtpc_list6, node)
{
rv = gtp_server(snode);
ogs_assert(rv == OGS_OK);
ogs_socknode_set_poll(node, sgw_self()->pollset,
OGS_POLLIN, _gtpv2_c_recv_cb, NULL);
sock = snode->sock;
sock = gtp_server(node);
ogs_assert(sock);
snode->pollin.poll = ogs_pollset_add(sgw_self()->pollset,
OGS_POLLIN, sock->fd, _gtpv2_c_recv_cb, NULL);
ogs_assert(snode->pollin.poll);
}
sgw_self()->gtpc_sock = gtp_local_sock_first(&sgw_self()->gtpc_list);
@@ -278,29 +269,21 @@ int sgw_gtp_open()
ogs_assert(sgw_self()->gtpc_addr || sgw_self()->gtpc_addr6);
ogs_list_for_each(&sgw_self()->gtpu_list, snode)
ogs_list_for_each(&sgw_self()->gtpu_list, node)
{
rv = gtp_server(snode);
ogs_assert(rv == OGS_OK);
ogs_socknode_set_poll(node, sgw_self()->pollset,
OGS_POLLIN, _gtpv1_u_recv_cb, NULL);
sock = snode->sock;
sock = gtp_server(node);
ogs_assert(sock);
snode->pollin.poll = ogs_pollset_add(sgw_self()->pollset,
OGS_POLLIN, sock->fd, _gtpv1_u_recv_cb, NULL);
ogs_assert(snode->pollin.poll);
}
ogs_list_for_each(&sgw_self()->gtpu_list6, snode)
ogs_list_for_each(&sgw_self()->gtpu_list6, node)
{
rv = gtp_server(snode);
ogs_assert(rv == OGS_OK);
ogs_socknode_set_poll(node, sgw_self()->pollset,
OGS_POLLIN, _gtpv1_u_recv_cb, NULL);
sock = snode->sock;
sock = gtp_server(node);
ogs_assert(sock);
snode->pollin.poll = ogs_pollset_add(sgw_self()->pollset,
OGS_POLLIN, sock->fd, _gtpv1_u_recv_cb, NULL);
ogs_assert(snode->pollin.poll);
}
sgw_self()->gtpu_sock = gtp_local_sock_first(&sgw_self()->gtpu_list);