diff options
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.h | 53 |
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); |