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" #include "gtp_path.h"
int gtp_server(ogs_socknode_t *snode) ogs_sock_t *gtp_server(ogs_socknode_t *node)
{ {
char buf[OGS_ADDRSTRLEN]; char buf[OGS_ADDRSTRLEN];
ogs_assert(snode); ogs_sock_t *gtp;
ogs_assert(node);
ogs_udp_server(snode); gtp = ogs_udp_server(node);
ogs_assert(snode->sock); ogs_assert(gtp);
ogs_info("gtp_server() [%s]:%d", 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) 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" { extern "C" {
#endif /* __cplusplus */ #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); 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); 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 mme_gtp_open()
{ {
int rv; int rv;
ogs_socknode_t *snode = NULL; ogs_socknode_t *node = NULL;
ogs_sock_t *sock = NULL; ogs_sock_t *sock = NULL;
mme_sgw_t *sgw = 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_socknode_set_poll(node, mme_self()->pollset,
ogs_assert(rv == OGS_OK); OGS_POLLIN, _gtpv2_c_recv_cb, NULL);
sock = snode->sock; sock = gtp_server(node);
ogs_assert(sock); 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_socknode_set_poll(node, mme_self()->pollset,
ogs_assert(rv == OGS_OK); OGS_POLLIN, _gtpv2_c_recv_cb, NULL);
sock = snode->sock; sock = gtp_server(node);
ogs_assert(sock); 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); 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; node->sock = new;
ogs_socknode_install_poll(node);
return new; return new;
} }
@@ -193,6 +195,8 @@ ogs_sock_t *ogs_sctp_client(int type, ogs_socknode_t *node)
node->sock = new; node->sock = new;
ogs_socknode_install_poll(node);
return new; return new;
} }

View File

@@ -7,23 +7,22 @@
static void accept_handler(short when, ogs_socket_t fd, void *data); 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]; char buf[OGS_ADDRSTRLEN];
ogs_sock_t *sock = NULL;
ogs_assert(snode); ogs_assert(node);
memcpy(&snode->option, ogs_socknode_set_option(node, &context_self()->config.sockopt);
&context_self()->config.sockopt, sizeof(snode->option)); ogs_socknode_set_poll(node, mme_self()->pollset,
ogs_sctp_server(type, snode); OGS_POLLIN, accept_handler, node);
ogs_assert(snode->sock);
snode->pollin.poll = ogs_pollset_add(mme_self()->pollset, sock = ogs_sctp_server(type, node);
OGS_POLLIN, snode->sock->fd, accept_handler, snode->sock); ogs_assert(sock);
ogs_assert(snode->pollin.poll);
ogs_info("s1ap_server() [%s]:%d", 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) 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) static void accept_handler(short when, ogs_socket_t fd, void *data)
{ {
char buf[OGS_ADDRSTRLEN]; 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_sock_t *new = NULL;
ogs_assert(node);
sock = node->sock;
ogs_assert(sock); ogs_assert(sock);
ogs_assert(fd != INVALID_SOCKET); ogs_assert(fd != INVALID_SOCKET);

View File

@@ -13,9 +13,9 @@ extern "C" {
int s1ap_open(); int s1ap_open();
void s1ap_close(); 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_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); void s1ap_recv_handler(short when, ogs_socket_t fd, void *data);
int s1ap_send(ogs_sock_t *sock, int s1ap_send(ogs_sock_t *sock,

View File

@@ -181,36 +181,27 @@ cleanup:
int pgw_gtp_open() int pgw_gtp_open()
{ {
int rv;
pgw_dev_t *dev = NULL; pgw_dev_t *dev = NULL;
pgw_subnet_t *subnet = NULL; pgw_subnet_t *subnet = NULL;
ogs_socknode_t *snode = NULL; ogs_socknode_t *node = NULL;
ogs_sock_t *sock = NULL; ogs_sock_t *sock = NULL;
int rc; 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_socknode_set_poll(node, pgw_self()->pollset,
ogs_assert(rv == OGS_OK); OGS_POLLIN, _gtpv2_c_recv_cb, NULL);
sock = snode->sock; sock = gtp_server(node);
ogs_assert(sock); 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_socknode_set_poll(node, pgw_self()->pollset,
ogs_assert(rv == OGS_OK); OGS_POLLIN, _gtpv2_c_recv_cb, NULL);
sock = snode->sock; sock = gtp_server(node);
ogs_assert(sock); 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); 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_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_socknode_set_poll(node, pgw_self()->pollset,
ogs_assert(rv == OGS_OK); OGS_POLLIN, _gtpv1_u_recv_cb, NULL);
sock = snode->sock; sock = gtp_server(node);
ogs_assert(sock); 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_socknode_set_poll(node, pgw_self()->pollset,
ogs_assert(rv == OGS_OK); OGS_POLLIN, _gtpv1_u_recv_cb, NULL);
sock = snode->sock; sock = gtp_server(node);
ogs_assert(sock); 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); 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 sgw_gtp_open()
{ {
int rv; ogs_socknode_t *node = NULL;
ogs_socknode_t *snode = NULL;
ogs_sock_t *sock = 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_socknode_set_poll(node, sgw_self()->pollset,
ogs_assert(rv == OGS_OK); OGS_POLLIN, _gtpv2_c_recv_cb, NULL);
sock = snode->sock; sock = gtp_server(node);
ogs_assert(sock); 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_socknode_set_poll(node, sgw_self()->pollset,
ogs_assert(rv == OGS_OK); OGS_POLLIN, _gtpv2_c_recv_cb, NULL);
sock = snode->sock; sock = gtp_server(node);
ogs_assert(sock); 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); 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_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_socknode_set_poll(node, sgw_self()->pollset,
ogs_assert(rv == OGS_OK); OGS_POLLIN, _gtpv1_u_recv_cb, NULL);
sock = snode->sock; sock = gtp_server(node);
ogs_assert(sock); 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_socknode_set_poll(node, sgw_self()->pollset,
ogs_assert(rv == OGS_OK); OGS_POLLIN, _gtpv1_u_recv_cb, NULL);
sock = snode->sock; sock = gtp_server(node);
ogs_assert(sock); 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); sgw_self()->gtpu_sock = gtp_local_sock_first(&sgw_self()->gtpu_list);