pespin has submitted this change. ( 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 contrib/jenkins.sh M contrib/osmo-pcap.spec.in 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 9 files changed, 31 insertions(+), 28 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve osmith: Looks good to me, but someone else must approve pespin: Looks good to me, approved
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/contrib/jenkins.sh b/contrib/jenkins.sh index 683fb9d..5a218dc 100755 --- a/contrib/jenkins.sh +++ b/contrib/jenkins.sh @@ -23,6 +23,7 @@ export PKG_CONFIG_PATH="$inst/lib/pkgconfig:$PKG_CONFIG_PATH" export LD_LIBRARY_PATH="$inst/lib" osmo-build-dep.sh libosmocore "" '--disable-doxygen --enable-gnutls' +osmo-build-dep.sh libosmo-netif "" --disable-doxygen
# Additional configure options and depends CONFIG="" diff --git a/contrib/osmo-pcap.spec.in b/contrib/osmo-pcap.spec.in index afca559..406ef31 100644 --- a/contrib/osmo-pcap.spec.in +++ b/contrib/osmo-pcap.spec.in @@ -29,6 +29,7 @@ %endif BuildRequires: pkgconfig BuildRequires: pkgconfig(gnutls) +BuildRequires: pkgconfig(libosmo-netif) >= 1.5.0 BuildRequires: pkgconfig(libosmocore) >= 1.10.0 BuildRequires: pkgconfig(libosmogb) >= 1.10.0 BuildRequires: pkgconfig(libosmogsm) >= 1.10.0 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 14a1410..c384ed9 100644 --- a/src/osmo_server_core.c +++ b/src/osmo_server_core.c @@ -619,6 +619,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; }
@@ -632,6 +639,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 a6db562..c93ce6d 100644 --- a/src/osmo_server_network.c +++ b/src/osmo_server_network.c @@ -471,24 +471,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);
@@ -518,37 +516,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) \