summaryrefslogtreecommitdiffstats
path: root/src/host/virt_phy/include/osmocom/bb/virtphy/l1ctl_sock.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/host/virt_phy/include/osmocom/bb/virtphy/l1ctl_sock.h')
-rw-r--r--src/host/virt_phy/include/osmocom/bb/virtphy/l1ctl_sock.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/host/virt_phy/include/osmocom/bb/virtphy/l1ctl_sock.h b/src/host/virt_phy/include/osmocom/bb/virtphy/l1ctl_sock.h
new file mode 100644
index 00000000..2c98fa58
--- /dev/null
+++ b/src/host/virt_phy/include/osmocom/bb/virtphy/l1ctl_sock.h
@@ -0,0 +1,53 @@
+#pragma once
+
+#include <osmocom/core/msgb.h>
+#include <osmocom/core/linuxlist.h>
+#include <osmocom/core/select.h>
+
+#define L1CTL_SOCK_PATH "/tmp/osmocom_l2"
+
+struct l1ctl_sock_inst;
+
+struct l1ctl_sock_client {
+ /* list head in l1ctl_sock_inst.clients */
+ struct llist_head list;
+ /* pointer back to the server socket that accepted us */
+ struct l1ctl_sock_inst *l1ctl_sock;
+ /* Osmo FD for the client socket */
+ struct osmo_fd ofd;
+ /* private data, can be set in accept_cb */
+ void *priv;
+};
+
+/* L1CTL socket instance contains socket data. */
+struct l1ctl_sock_inst {
+ void *priv; /* Will be appended after osmo-fd's data pointer. */
+ struct llist_head clients;
+ char* l1ctl_sock_path; /* Socket path used to connect to l23 */
+ struct osmo_fd ofd; /* Osmocom file descriptor to accept L1CTL connections. */
+ void (*recv_cb)(struct l1ctl_sock_client *lsc, struct msgb *msg); /* Callback function called for incoming data from l2 app. */
+ /* Callback function called for new client after accept() */
+ int (*accept_cb)(struct l1ctl_sock_client *lsc);
+ /* Callback function called when client disappeared */
+ void (*close_cb)(struct l1ctl_sock_client *lsc);
+};
+
+/**
+ * @brief Initialise the l1ctl socket for communication with l2 apps.
+ */
+struct l1ctl_sock_inst *l1ctl_sock_init(
+ void *ctx,
+ void (*recv_cb)(struct l1ctl_sock_client *lsc, struct msgb *msg),
+ int (*accept_cb)(struct l1ctl_sock_client *lsc),
+ void (*close_cb)(struct l1ctl_sock_client *lsc),
+ char *path);
+
+/**
+ * @brief Transmit message to l2.
+ */
+int l1ctl_sock_write_msg(struct l1ctl_sock_client *lsc, struct msgb *msg);
+
+/**
+ * @brief Destroy instance.
+ */
+void l1ctl_sock_destroy(struct l1ctl_sock_inst *lsi);