diff options
author | Harald Welte <laforge@gnumonks.org> | 2011-02-05 19:13:00 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2011-02-05 20:26:27 +0100 |
commit | d38f10593afbd9ab79d4940d48371333d0c034c9 (patch) | |
tree | 946684de325ac6718954d61667974cc351efa46b /openbsc/src/input/lapd.h | |
parent | 0ae575536a0421bf734e51bdc71722d107ab6c13 (diff) |
[LAPD] Support multiple instances of LAPD
We cannot afford static/global state, as we may have multiple E1
lines, each having its own LAPD instance. Furthermore, we might
even have multiple LAPD instances on the same E1 line (think of
a multi-drop setup).
This also implements dynamic TEI allocation, i.e. no hardcoded
TEI list anymore.
Diffstat (limited to 'openbsc/src/input/lapd.h')
-rw-r--r-- | openbsc/src/input/lapd.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/openbsc/src/input/lapd.h b/openbsc/src/input/lapd.h index b0e6e6f66..f79d84f14 100644 --- a/openbsc/src/input/lapd.h +++ b/openbsc/src/input/lapd.h @@ -3,6 +3,8 @@ #include <stdint.h> +#include <osmocore/linuxlist.h> + typedef enum { LAPD_MPH_NONE = 0, @@ -14,10 +16,22 @@ typedef enum { } lapd_mph_type; -extern uint8_t *lapd_receive(uint8_t *data, int len, int *ilen, lapd_mph_type *prim, void *cbdata); +struct lapd_instance { + struct llist_head list; /* list of LAPD instances */ + int network_side; + + void (*transmit_cb)(uint8_t *data, int len, void *cbdata); + void *cbdata; + + struct llist_head tei_list; /* list of TEI in this LAPD instance */ +}; + +extern uint8_t *lapd_receive(struct lapd_instance *li, uint8_t *data, unsigned int len, + int *ilen, lapd_mph_type *prim); -extern void (*lapd_transmit_cb)(uint8_t *data, int len, void *cbdata); +extern void lapd_transmit(struct lapd_instance *li, uint8_t tei, uint8_t *data, unsigned int len); -extern void lapd_transmit(int tei, uint8_t *data, int len, void *cbdata); +struct lapd_instance *lapd_instance_alloc(void (*tx_cb)(uint8_t *data, int len, + void *cbdata), void *cbdata); #endif /* OPENBSC_LAPD_H */ |