pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-pcap/+/39324?usp=email )
Change subject: server: Use osmo_stream_srv_link on tcp listen socket ......................................................................
server: Use osmo_stream_srv_link on tcp listen socket
Related: SYS#7080 Change-Id: I3562185f98685ea5a412273212e6dfbe55b360e2 --- M configure.ac M debian/control M include/osmo-pcap/osmo_pcap_server.h M src/Makefile.am M src/osmo_server_core.c M src/osmo_server_network.c M tests/rotate_localtime/Makefile.am 7 files changed, 29 insertions(+), 28 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-pcap refs/changes/24/39324/1
diff --git a/configure.ac b/configure.ac index 35892e6..1baa5b9 100644 --- a/configure.ac +++ b/configure.ac @@ -168,6 +168,7 @@ PKG_CHECK_MODULES(LIBOSMOGB, libosmogb >= 1.10.0) PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.10.0) PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.10.0) +PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 1.5.0) PKG_CHECK_MODULES(LIBZMQ, libzmq >= 3.2.2) PKG_CHECK_MODULES(LIBGNUTLS, gnutls)
diff --git a/debian/control b/debian/control index 427cc1a..b7da2b2 100644 --- a/debian/control +++ b/debian/control @@ -8,6 +8,7 @@ libpcap0.8-dev, pkg-config, libosmocore-dev (>= 1.10.0), + libosmo-netif-dev (>= 1.5.0), libgnutls28-dev, libzmq3-dev (>= 3.2.2) Standards-Version: 3.9.1 diff --git a/include/osmo-pcap/osmo_pcap_server.h b/include/osmo-pcap/osmo_pcap_server.h index aca8b6c..0543ca4 100644 --- a/include/osmo-pcap/osmo_pcap_server.h +++ b/include/osmo-pcap/osmo_pcap_server.h @@ -33,6 +33,7 @@ #include <osmocom/core/linuxlist.h> #include <osmocom/core/write_queue.h> #include <osmocom/core/socket.h> +#include <osmocom/netif/stream.h>
#include <osmo-pcap/wireformat.h> #include <osmo-pcap/osmo_tls.h> @@ -131,7 +132,7 @@
int port; char *addr; - struct osmo_fd listen_fd; + struct osmo_stream_srv_link *srv_link;
/* zeromq handling */ int zmq_port; diff --git a/src/Makefile.am b/src/Makefile.am index c3576d1..de0c372 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,6 @@ AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)/ AM_CFLAGS = -Wall \ + $(LIBOSMONETIF_CFLAGS) \ $(LIBOSMOCORE_CFLAGS) \ $(LIBOSMOGSM_CFLAGS) \ $(LIBOSMOGB_CFLAGS) \ @@ -44,6 +45,7 @@ $(NULL)
osmo_pcap_server_LDADD = \ + $(LIBOSMONETIF_LIBS) \ $(LIBOSMOVTY_LIBS) \ $(LIBOSMOCORE_LIBS) \ $(LIBZMQ_LIBS) \ diff --git a/src/osmo_server_core.c b/src/osmo_server_core.c index f6c42ce..c6fb535 100644 --- a/src/osmo_server_core.c +++ b/src/osmo_server_core.c @@ -616,6 +616,13 @@ psrv->rotate_localtime.enabled = true; psrv->rotate_localtime.intv = TIME_INTERVAL_DAY; psrv->rotate_localtime.modulus = 1; + + psrv->srv_link = osmo_stream_srv_link_create(psrv); + OSMO_ASSERT(psrv->srv_link); + osmo_stream_srv_link_set_name(psrv->srv_link, "tcp_server"); + osmo_stream_srv_link_set_proto(psrv->srv_link, IPPROTO_TCP); + osmo_stream_srv_link_set_data(psrv->srv_link, psrv); + osmo_stream_srv_link_set_nodelay(psrv->srv_link, true); return psrv; }
@@ -629,6 +636,7 @@ while ((conn = llist_first_entry_or_null(&psrv->conn, struct osmo_pcap_conn, entry))) osmo_pcap_conn_free(conn);
+ osmo_stream_srv_link_destroy(psrv->srv_link); rate_ctr_group_free(psrv->ctrg); talloc_free(psrv); } diff --git a/src/osmo_server_network.c b/src/osmo_server_network.c index 778566d..6834079 100644 --- a/src/osmo_server_network.c +++ b/src/osmo_server_network.c @@ -467,24 +467,22 @@ } }
-static int accept_cb(struct osmo_fd *fd, unsigned int when) +static int accept_cb(struct osmo_stream_srv_link *link, int fd) { struct osmo_pcap_conn *conn = NULL; - struct osmo_pcap_server *server; + struct osmo_pcap_server *server = osmo_stream_srv_link_get_data(link); char str[INET6_ADDRSTRLEN]; struct osmo_sockaddr osa; socklen_t len = sizeof(osa.u.sas); - int new_fd; + int rc;
memset(&osa, 0, sizeof(osa)); - new_fd = accept(fd->fd, &osa.u.sa, &len); - if (new_fd < 0) { - LOGP(DSERVER, LOGL_ERROR, "Failed to accept socket: %d\n", errno); + rc = getpeername(fd, &osa.u.sa, &len); + if (rc < 0) { + LOGP(DSERVER, LOGL_ERROR, "getpeername() failed during accept(): %d\n", errno); return -1; }
- server = fd->data; - /* count any accept to see no clients */ rate_ctr_inc2(server->ctrg, SERVER_CTR_CONNECT);
@@ -514,37 +512,25 @@
LOGP(DSERVER, LOGL_ERROR, "Failed to find client for %s\n", osmo_sockaddr_ntop(&osa.u.sa, str)); - close(new_fd); + close(fd); return -1;
found: LOGP(DSERVER, LOGL_NOTICE, "New connection from %s\n", conn->name); osmo_pcap_conn_event(conn, "connect", NULL); - new_connection(server, conn, new_fd); + new_connection(server, conn, fd); return 0; }
-int osmo_pcap_server_listen(struct osmo_pcap_server *server) +int osmo_pcap_server_listen(struct osmo_pcap_server *psrv) { - int fd; - - fd = osmo_sock_init(AF_INET, SOCK_STREAM, IPPROTO_TCP, - server->addr, server->port, OSMO_SOCK_F_BIND); - if (fd < 0) { + osmo_stream_srv_link_set_addr(psrv->srv_link, psrv->addr); + osmo_stream_srv_link_set_port(psrv->srv_link, psrv->port); + osmo_stream_srv_link_set_accept_cb(psrv->srv_link, accept_cb); + if (osmo_stream_srv_link_open(psrv->srv_link)) { LOGP(DSERVER, LOGL_ERROR, "Failed to create the server socket.\n"); return -1; }
- server->listen_fd.fd = fd; - server->listen_fd.when = OSMO_FD_READ; - server->listen_fd.cb = accept_cb; - server->listen_fd.data = server; - - if (osmo_fd_register(&server->listen_fd) != 0) { - LOGP(DSERVER, LOGL_ERROR, "Failed to register the socket.\n"); - close(fd); - return -1; - } - return 0; } diff --git a/tests/rotate_localtime/Makefile.am b/tests/rotate_localtime/Makefile.am index a9402aa..f63861e 100644 --- a/tests/rotate_localtime/Makefile.am +++ b/tests/rotate_localtime/Makefile.am @@ -4,6 +4,7 @@
AM_CFLAGS = \ -Wall \ + $(LIBOSMONETIF_CFLAGS) \ $(LIBOSMOGSM_CFLAGS) \ $(LIBOSMOGB_CFLAGS) \ $(LIBOSMOVTY_CFLAGS) \ @@ -31,6 +32,7 @@ $(top_builddir)/src/osmo_server_core.o \ $(top_builddir)/src/osmo_server_stats.o \ $(top_builddir)/src/osmo_tls.o \ + $(LIBOSMONETIF_LIBS) \ $(LIBOSMOCORE_LIBS) \ $(LIBOSMOVTY_LIBS) \ $(LIBGNUTLS_LIBS) \