aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorarehbein <arehbein@sysmocom.de>2023-10-24 11:45:54 +0200
committerlaforge <laforge@osmocom.org>2023-11-15 21:29:23 +0000
commitf67e45828d60561504f33316fc9dc84942cac68e (patch)
treea74973fda3a9734a6126d5ccb7cd7da5a489bd22 /src
parent1bb0b99552d3eecd5e20e58a228b92e2275de8aa (diff)
gsmtap_util: Simplify sink
- Instead of using the osmo_fd API to call read() on the socket's file descriptor each time (unused) data is received, simply open the socket and never read Related: OS#6213 Change-Id: I4025920d5f62d17133e9b5fe81cd34a88c4f20b5
Diffstat (limited to 'src')
-rw-r--r--src/core/gsmtap_util.c50
1 files changed, 7 insertions, 43 deletions
diff --git a/src/core/gsmtap_util.c b/src/core/gsmtap_util.c
index 458d1d79..d8178850 100644
--- a/src/core/gsmtap_util.c
+++ b/src/core/gsmtap_util.c
@@ -58,7 +58,7 @@ struct gsmtap_inst {
struct osmo_wqueue wq; /*!< the wait queue. This field member may not be changed or moved (backwards compatibility) */
struct osmo_io_fd *out; /*!< Used when osmo_io_mode is nonzero */
- struct osmo_fd sink_ofd;
+ int sink_fd;
};
struct _gsmtap_inst_legacy {
@@ -433,22 +433,6 @@ int gsmtap_send(struct gsmtap_inst *gti, uint16_t arfcn, uint8_t ts,
signal_dbm, snr, data, len);
}
-/* Callback from select layer if we can read from the sink socket */
-static int gsmtap_sink_fd_cb(struct osmo_fd *fd, unsigned int flags)
-{
- int rc;
- uint8_t buf[4096];
- if (!(flags & OSMO_FD_READ))
- return 0;
-
- rc = read(fd->fd, buf, sizeof(buf));
- if (rc < 0)
- return rc;
- /* simply discard any data arriving on the socket */
-
- return 0;
-}
-
/*! Add a local sink to an existing GSMTAP source and return fd
* \param[in] gti existing GSMTAP source
* \returns file descriptor of locally bound receive socket
@@ -466,28 +450,7 @@ static int gsmtap_sink_fd_cb(struct osmo_fd *fd, unsigned int flags)
*/
int gsmtap_source_add_sink(struct gsmtap_inst *gti)
{
- int fd, rc;
-
- fd = gsmtap_source_add_sink_fd(gsmtap_inst_fd2(gti));
- if (fd < 0)
- return fd;
-
- if (gti->osmo_io_mode) {
- struct osmo_fd *sink_ofd;
-
- sink_ofd = &gti->sink_ofd;
- sink_ofd->fd = fd;
- sink_ofd->when = OSMO_FD_READ;
- sink_ofd->cb = gsmtap_sink_fd_cb;
-
- rc = osmo_fd_register(sink_ofd);
- if (rc < 0) {
- close(fd);
- return rc;
- }
- }
-
- return fd;
+ return gti->sink_fd = gsmtap_source_add_sink_fd(gsmtap_inst_fd2(gti));
}
/* Registered in Osmo IO as a no-op to set the write callback. */
@@ -524,7 +487,7 @@ struct gsmtap_inst *gsmtap_source_init2(const char *local_host, uint16_t local_p
gti->osmo_io_mode = ofd_wq_mode;
/* Still using the wq member for its 'fd' field only, since we are keeping it for now, anyways */
gti->wq.bfd.fd = fd;
- gti->sink_ofd.fd = -1;
+ gti->sink_fd = -1;
if (ofd_wq_mode) {
gti->out = osmo_iofd_setup(gti, gti->wq.bfd.fd, "gsmtap_inst.io_fd", OSMO_IO_FD_MODE_READ_WRITE, &gsmtap_ops, NULL);
@@ -564,10 +527,11 @@ void gsmtap_source_free(struct gsmtap_inst *gti)
if (gti->osmo_io_mode) {
osmo_iofd_free(gti->out);
- if (gti->sink_ofd.fd != -1) {
- osmo_fd_unregister(&gti->sink_ofd);
- close(gti->sink_ofd.fd);
+ if (gti->sink_fd != -1) {
+ close(gti->sink_fd);
+ gti->sink_fd = -1;
}
+
}
talloc_free(gti);