54 lines
1.7 KiB
C
54 lines
1.7 KiB
C
#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);
|