libosmogsm 0.9.6-23.20170220git32ee5af8.fc42
Osmocom GSM library
Loading...
Searching...
No Matches
lapdm.h
Go to the documentation of this file.
1#pragma once
2
3#include <osmocom/gsm/l1sap.h>
5
17
18struct lapdm_entity;
19
22 struct lapdm_datalink *dl;
23 int lapdm_fmt;
24 uint8_t chan_nr;
25 uint8_t link_id;
26 uint8_t ta_ind; /* TA indicated by network */
27 uint8_t tx_power_ind; /* MS power indicated by network */
28};
29
32 struct lapd_datalink dl; /* \brief common LAPD */
36};
37
42 _NR_DL_SAPI
43};
44
45typedef int (*lapdm_cb_t)(struct msgb *msg, struct lapdm_entity *le, void *ctx);
46
47#define LAPDM_ENT_F_EMPTY_FRAME 0x0001
48#define LAPDM_ENT_F_POLLING_ONLY 0x0002
49
53 struct lapdm_datalink datalink[_NR_DL_SAPI];
57 unsigned int flags;
58
59 void *l1_ctx;
60 void *l3_ctx;
62 osmo_prim_cb l1_prim_cb;
63 lapdm_cb_t l3_cb;
67
68 uint8_t ta; /* TA used and indicated to network */
69 uint8_t tx_power; /* MS power used and indicated to network */
70};
71
74 struct llist_head list;
75 char *name;
78};
79
80const char *get_rsl_name(int value);
81extern const char *lapdm_state_names[];
82
83struct lapdm_datalink *lapdm_datalink_for_sapi(struct lapdm_entity *le, uint8_t sapi);
84
85/* initialize a LAPDm entity */
86void lapdm_entity_init(struct lapdm_entity *le, enum lapdm_mode mode, int t200);
87void lapdm_channel_init(struct lapdm_channel *lc, enum lapdm_mode mode);
88
89/* deinitialize a LAPDm entity */
90void lapdm_entity_exit(struct lapdm_entity *le);
91void lapdm_channel_exit(struct lapdm_channel *lc);
92
93/* input into layer2 (from layer 1) */
94int lapdm_phsap_up(struct osmo_prim_hdr *oph, struct lapdm_entity *le);
95
96/* input into layer2 (from layer 3) */
97int lapdm_rslms_recvmsg(struct msgb *msg, struct lapdm_channel *lc);
98
99void lapdm_channel_set_l3(struct lapdm_channel *lc, lapdm_cb_t cb, void *ctx);
100void lapdm_channel_set_l1(struct lapdm_channel *lc, osmo_prim_cb cb, void *ctx);
101
102int lapdm_entity_set_mode(struct lapdm_entity *le, enum lapdm_mode mode);
103int lapdm_channel_set_mode(struct lapdm_channel *lc, enum lapdm_mode mode);
104
105void lapdm_entity_reset(struct lapdm_entity *le);
106void lapdm_channel_reset(struct lapdm_channel *lc);
107
108void lapdm_entity_set_flags(struct lapdm_entity *le, unsigned int flags);
109void lapdm_channel_set_flags(struct lapdm_channel *lc, unsigned int flags);
110
111int lapdm_phsap_dequeue_prim(struct lapdm_entity *le, struct osmo_phsap_prim *pp);
112
int lapdm_entity_set_mode(struct lapdm_entity *le, enum lapdm_mode mode)
Set the lapdm_mode of a LAPDm entity.
Definition lapdm.c:1239
void lapdm_channel_set_flags(struct lapdm_channel *lc, unsigned int flags)
Set the flags of all LAPDm entities in a LAPDm channel.
Definition lapdm.c:1320
void lapdm_entity_init(struct lapdm_entity *le, enum lapdm_mode mode, int t200)
initialize a LAPDm entity and all datalinks inside
Definition lapdm.c:151
void lapdm_entity_set_flags(struct lapdm_entity *le, unsigned int flags)
Set the flags of a LAPDm entity.
Definition lapdm.c:1314
void lapdm_channel_set_l1(struct lapdm_channel *lc, osmo_prim_cb cb, void *ctx)
Set the L1 callback and context of a LAPDm channel.
Definition lapdm.c:1277
lapdm_dl_sapi
LAPDm datalink SAPIs.
Definition lapdm.h:39
void lapdm_entity_exit(struct lapdm_entity *le)
flush and release all resoures in LAPDm entity
Definition lapdm.c:176
void lapdm_entity_reset(struct lapdm_entity *le)
Reset an entire LAPDm entity and all its datalinks.
Definition lapdm.c:1295
int lapdm_phsap_up(struct osmo_prim_hdr *oph, struct lapdm_entity *le)
Receive a PH-SAP primitive from L1.
Definition lapdm.c:715
void lapdm_channel_init(struct lapdm_channel *lc, enum lapdm_mode mode)
initialize a LAPDm channel and all its channels
Definition lapdm.c:168
int lapdm_channel_set_mode(struct lapdm_channel *lc, enum lapdm_mode mode)
Set the lapdm_mode of a LAPDm channel.
Definition lapdm.c:1265
int lapdm_phsap_dequeue_prim(struct lapdm_entity *le, struct osmo_phsap_prim *pp)
dequeue a msg that's pending transmission via L1 and wrap it into a osmo_phsap_prim
Definition lapdm.c:292
void lapdm_channel_reset(struct lapdm_channel *lc)
Reset a LAPDm channel with all its entities.
Definition lapdm.c:1307
void lapdm_channel_set_l3(struct lapdm_channel *lc, lapdm_cb_t cb, void *ctx)
Set the L3 callback and context of a LAPDm channel.
Definition lapdm.c:1286
lapdm_mode
LAPDm mode/role.
Definition lapdm.h:13
int lapdm_rslms_recvmsg(struct msgb *msg, struct lapdm_channel *lc)
Receive a RSLms msgb from Layer 3.
Definition lapdm.c:1211
@ DL_SAPI3
SAPI 1.
Definition lapdm.h:41
@ DL_SAPI0
SAPI 0.
Definition lapdm.h:40
@ LAPDM_MODE_MS
behave like a MS (mobile phone)
Definition lapdm.h:14
@ LAPDM_MODE_BTS
behave like a BTS (network)
Definition lapdm.h:15
the two lapdm_entities that form a GSM logical channel (ACCH + DCCH)
Definition lapdm.h:73
struct llist_head list
internal linked list
Definition lapdm.h:74
char * name
human-readable name
Definition lapdm.h:75
struct lapdm_entity lapdm_dcch
Dedicated Control Channel.
Definition lapdm.h:77
struct lapdm_entity lapdm_acch
Associated Control Channel.
Definition lapdm.h:76
a LAPDm Entity
Definition lapdm.h:51
enum lapdm_mode mode
are we in BTS mode or MS mode
Definition lapdm.h:56
void * l3_ctx
context for layer3 instance
Definition lapdm.h:60
struct lapdm_datalink datalink[_NR_DL_SAPI]
the SAPIs of the LAPDm entity
Definition lapdm.h:53
osmo_prim_cb l1_prim_cb
callback for sending prims to L1
Definition lapdm.h:62
int last_tx_dequeue
last entity that was dequeued
Definition lapdm.h:54
struct lapdm_channel * lapdm_ch
pointer to lapdm_channel of which we're part
Definition lapdm.h:66
lapdm_cb_t l3_cb
callback for sending stuff to L3
Definition lapdm.h:63
void * l1_ctx
context for layer1 instance
Definition lapdm.h:59
int tx_pending
currently a pending frame not confirmed by L1
Definition lapdm.h:55
LAPDm message context.
Definition lapdm.h:21
primitive header for PH-SAP primitives
Definition l1sap.h:139