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) \
--
To view, visit
https://gerrit.osmocom.org/c/osmo-pcap/+/39324?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-pcap
Gerrit-Branch: master
Gerrit-Change-Id: I3562185f98685ea5a412273212e6dfbe55b360e2
Gerrit-Change-Number: 39324
Gerrit-PatchSet: 8
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>