mirror of
https://github.com/open5gs/open5gs.git
synced 2025-11-01 20:44:06 +00:00
socknode includes pollset
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
Submodule lib/ogslib updated: 15b346f625...5330ac05a1
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user