summaryrefslogtreecommitdiffstats
path: root/src/libabis/input/lapd.h
blob: fd11edaa330f1f44f36086de53c6c76c2a01afbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#ifndef OPENBSC_LAPD_H
#define OPENBSC_LAPD_H

#include <stdint.h>

#include <osmocore/linuxlist.h>

typedef enum {
	LAPD_MPH_NONE	= 0,

	LAPD_MPH_ACTIVATE_IND,
	LAPD_MPH_DEACTIVATE_IND,

	LAPD_DL_DATA_IND,
	LAPD_DL_UNITDATA_IND,

} lapd_mph_type;

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(struct lapd_instance *li, uint8_t tei, uint8_t sapi,
			  uint8_t *data, unsigned int len);

struct lapd_instance *lapd_instance_alloc(int network_side,
					  void (*tx_cb)(uint8_t *data, int len,
							void *cbdata), void *cbdata);


/* Start a (user-side) SAP for the specified TEI/SAPI on the LAPD instance */
int lapd_sap_start(struct lapd_instance *li, uint8_t tei, uint8_t sapi);

/* Stop a (user-side) SAP for the specified TEI/SAPI on the LAPD instance */
int lapd_sap_stop(struct lapd_instance *li, uint8_t tei, uint8_t sapi);

#endif /* OPENBSC_LAPD_H */