libosmogsm  1.9.2
Osmocom GSM library
LAPDm implementation according to GSM TS 04.06

Files

file  lapdm.h
 
file  lapdm.c
 

Data Structures

struct  lapdm_msg_ctx
 LAPDm message context. More...
 
struct  lapdm_datalink
 LAPDm datalink like TS 04.06 / Section 3.5.2. More...
 
struct  lapdm_entity
 a LAPDm Entity More...
 
struct  lapdm_channel
 the two lapdm_entities that form a GSM logical channel (ACCH + DCCH) More...
 

Macros

#define LAPDM_ENT_F_EMPTY_FRAME   0x0001
 
#define LAPDM_ENT_F_POLLING_ONLY   0x0002
 
#define LAPD_U_SABM   0x7
 
#define LAPDm_LPD_NORMAL   0
 
#define LAPDm_LPD_SMSCB   1
 
#define LAPDm_SAPI_NORMAL   0
 
#define LAPDm_SAPI_SMS   3
 
#define LAPDm_ADDR(lpd, sapi, cr)   ((((lpd) & 0x3) << 5) | (((sapi) & 0x7) << 2) | (((cr) & 0x1) << 1) | 0x1)
 
#define LAPDm_ADDR_LPD(addr)   (((addr) >> 5) & 0x3)
 
#define LAPDm_ADDR_SAPI(addr)   (((addr) >> 2) & 0x7)
 
#define LAPDm_ADDR_CR(addr)   (((addr) >> 1) & 0x1)
 
#define LAPDm_ADDR_EA(addr)   ((addr) & 0x1)
 
#define LAPDm_ADDR_SHORT_L2(addr)   ((addr) & 0x3)
 
#define LAPDm_CTRL_I(nr, ns, p)   ((((nr) & 0x7) << 5) | (((p) & 0x1) << 4) | (((ns) & 0x7) << 1))
 
#define LAPDm_CTRL_S(nr, s, p)   ((((nr) & 0x7) << 5) | (((p) & 0x1) << 4) | (((s) & 0x3) << 2) | 0x1)
 
#define LAPDm_CTRL_U(u, p)   ((((u) & 0x1c) << (5-2)) | (((p) & 0x1) << 4) | (((u) & 0x3) << 2) | 0x3)
 
#define LAPDm_CTRL_is_I(ctrl)   (((ctrl) & 0x1) == 0)
 
#define LAPDm_CTRL_is_S(ctrl)   (((ctrl) & 0x3) == 1)
 
#define LAPDm_CTRL_is_U(ctrl)   (((ctrl) & 0x3) == 3)
 
#define LAPDm_CTRL_U_BITS(ctrl)   ((((ctrl) & 0xC) >> 2) | ((ctrl) & 0xE0) >> 3)
 
#define LAPDm_CTRL_PF_BIT(ctrl)   (((ctrl) >> 4) & 0x1)
 
#define LAPDm_CTRL_S_BITS(ctrl)   (((ctrl) & 0xC) >> 2)
 
#define LAPDm_CTRL_I_Ns(ctrl)   (((ctrl) & 0xE) >> 1)
 
#define LAPDm_CTRL_Nr(ctrl)   (((ctrl) & 0xE0) >> 5)
 
#define LAPDm_LEN(len)   ((len << 2) | 0x1)
 
#define LAPDm_MORE   0x2
 
#define LAPDm_EL   0x1
 
#define LAPDm_U_UI   0x0
 
#define N201_AB_SACCH   18
 
#define N201_AB_SDCCH   20
 
#define N201_AB_FACCH   20
 
#define N201_Bbis   23
 
#define N201_Bter_SACCH   21
 
#define N201_Bter_SDCCH   23
 
#define N201_Bter_FACCH   23
 
#define N201_B4   19
 
#define N200_EST_REL   5
 
#define N200_TR_SACCH   5
 
#define N200_TR_SDCCH   23
 
#define N200_TR_FACCH_FR   34
 
#define N200_TR_EFACCH_FR   48
 
#define N200_TR_FACCH_HR   29
 
#define N200   N200_TR_SDCCH
 

Typedefs

typedef int(* lapdm_cb_t) (struct msgb *msg, struct lapdm_entity *le, void *ctx)
 

Enumerations

enum  lapdm_mode {
  LAPDM_MODE_MS,
  LAPDM_MODE_BTS
}
 LAPDm mode/role. More...
 
enum  lapdm_dl_sapi {
  DL_SAPI0 = 0,
  DL_SAPI3 = 1,
  _NR_DL_SAPI
}
 LAPDm datalink SAPIs. More...
 
enum  lapdm_format {
  LAPDm_FMT_A,
  LAPDm_FMT_B,
  LAPDm_FMT_Bbis,
  LAPDm_FMT_Bter,
  LAPDm_FMT_B4
}
 

Functions

const char * get_rsl_name (int value)
 
struct lapdm_datalinklapdm_datalink_for_sapi (struct lapdm_entity *le, uint8_t sapi)
 
void lapdm_entity_init (struct lapdm_entity *le, enum lapdm_mode mode, int t200)
 initialize a LAPDm entity and all datalinks inside More...
 
void lapdm_entity_init2 (struct lapdm_entity *le, enum lapdm_mode mode, const int *t200_ms, int n200)
 initialize a LAPDm entity and all datalinks inside More...
 
void lapdm_entity_init3 (struct lapdm_entity *le, enum lapdm_mode mode, const int *t200_ms, int n200, const char *name_pfx)
 initialize a LAPDm entity and all datalinks inside More...
 
void lapdm_channel_init (struct lapdm_channel *lc, enum lapdm_mode mode)
 initialize a LAPDm channel and all its channels More...
 
int lapdm_channel_init2 (struct lapdm_channel *lc, enum lapdm_mode mode, const int *t200_ms_dcch, const int *t200_ms_acch, enum gsm_chan_t chan_t)
 initialize a LAPDm channel and all its channels More...
 
int lapdm_channel_init3 (struct lapdm_channel *lc, enum lapdm_mode mode, const int *t200_ms_dcch, const int *t200_ms_acch, enum gsm_chan_t chan_t, const char *name_pfx)
 initialize a LAPDm channel and all its channels More...
 
void lapdm_entity_exit (struct lapdm_entity *le)
 flush and release all resoures in LAPDm entity More...
 
void lapdm_channel_exit (struct lapdm_channel *lc)
 
int lapdm_phsap_up (struct osmo_prim_hdr *oph, struct lapdm_entity *le)
 Receive a PH-SAP primitive from L1. More...
 
int lapdm_rslms_recvmsg (struct msgb *msg, struct lapdm_channel *lc)
 Receive a RSLms Message buffers from Layer 3. More...
 
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. More...
 
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. More...
 
int lapdm_entity_set_mode (struct lapdm_entity *le, enum lapdm_mode mode)
 Set the lapdm_mode of a LAPDm entity. More...
 
int lapdm_channel_set_mode (struct lapdm_channel *lc, enum lapdm_mode mode)
 Set the lapdm_mode of a LAPDm channel. More...
 
void lapdm_entity_reset (struct lapdm_entity *le)
 Reset an entire LAPDm entity and all its datalinks. More...
 
void lapdm_channel_reset (struct lapdm_channel *lc)
 Reset a LAPDm channel with all its entities. More...
 
void lapdm_entity_set_flags (struct lapdm_entity *le, unsigned int flags)
 Set the flags of a LAPDm entity. More...
 
void lapdm_channel_set_flags (struct lapdm_channel *lc, unsigned int flags)
 Set the flags of all LAPDm entities in a LAPDm channel. More...
 
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 More...
 
static int lapdm_send_ph_data_req (struct lapd_msg_ctx *lctx, struct msgb *msg)
 
static int send_rslms_dlsap (struct osmo_dlsap_prim *dp, struct lapd_msg_ctx *lctx)
 
static int update_pending_frames (struct lapd_msg_ctx *lctx)
 
static void lapdm_dl_init (struct lapdm_datalink *dl, struct lapdm_entity *entity, int t200_ms, uint32_t n200, const char *name)
 
static int get_n200_dcch (enum gsm_chan_t chan_t)
 
static void lapdm_pad_msgb (struct msgb *msg, uint8_t n201)
 
static int rslms_sendmsg (struct msgb *msg, struct lapdm_entity *le)
 
static int tx_ph_data_enqueue (struct lapdm_datalink *dl, struct msgb *msg, uint8_t chan_nr, uint8_t link_id, uint8_t pad)
 
static struct msgbtx_dequeue_dcch_msgb (struct lapdm_entity *le)
 
static struct msgbtx_dequeue_acch_msgb (struct lapdm_entity *le)
 
static int l2_ph_data_conf (struct msgb *msg, struct lapdm_entity *le)
 
static int rsl_is_transparent (uint8_t msg_type)
 
static int send_rslms_rll_l3 (uint8_t msg_type, struct lapdm_msg_ctx *mctx, struct msgb *msg)
 
static int send_rslms_rll_l3_ui (struct lapdm_msg_ctx *mctx, struct msgb *msg)
 
static int send_rll_simple (uint8_t msg_type, struct lapdm_msg_ctx *mctx)
 
static int rsl_rll_error (uint8_t cause, struct lapdm_msg_ctx *mctx)
 
static int lapdm_rx_not_permitted (const struct lapdm_entity *le, const struct lapd_msg_ctx *lctx)
 
static int l2_ph_data_ind (struct msgb *msg, struct lapdm_entity *le, uint8_t chan_nr, uint8_t link_id, uint32_t fn)
 
static int l2_ph_rach_ind (struct lapdm_entity *le, uint8_t ra, uint32_t fn, uint8_t acc_delay)
 
static int l2_ph_chan_conf (struct msgb *msg, struct lapdm_entity *le, uint32_t frame_nr)
 
static int set_lapdm_context (struct lapdm_datalink *dl, uint8_t chan_nr, uint8_t link_id, int n201, uint8_t sapi)
 
static int rslms_rx_rll_est_req (struct msgb *msg, struct lapdm_datalink *dl)
 
static int rslms_rx_rll_udata_req (struct msgb *msg, struct lapdm_datalink *dl)
 
static int rslms_rx_rll_data_req (struct msgb *msg, struct lapdm_datalink *dl)
 
static int rslms_rx_rll_susp_req (struct msgb *msg, struct lapdm_datalink *dl)
 
static int rslms_rx_rll_res_req (struct msgb *msg, struct lapdm_datalink *dl)
 
static int rslms_rx_rll_rel_req (struct msgb *msg, struct lapdm_datalink *dl)
 
static int rslms_rx_chan_rqd (struct lapdm_channel *lc, struct msgb *msg)
 
static int rslms_rx_rll (struct msgb *msg, struct lapdm_channel *lc)
 
static int rslms_rx_com_chan (struct msgb *msg, struct lapdm_channel *lc)
 

Variables

const char * lapdm_state_names []
 
const struct value_string osmo_ph_prim_names []
 
void * tall_lapd_ctx
 

Detailed Description

Macro Definition Documentation

◆ LAPD_U_SABM

#define LAPD_U_SABM   0x7

◆ LAPDm_ADDR

#define LAPDm_ADDR (   lpd,
  sapi,
  cr 
)    ((((lpd) & 0x3) << 5) | (((sapi) & 0x7) << 2) | (((cr) & 0x1) << 1) | 0x1)

◆ LAPDm_ADDR_CR

#define LAPDm_ADDR_CR (   addr)    (((addr) >> 1) & 0x1)

◆ LAPDm_ADDR_EA

#define LAPDm_ADDR_EA (   addr)    ((addr) & 0x1)

◆ LAPDm_ADDR_LPD

#define LAPDm_ADDR_LPD (   addr)    (((addr) >> 5) & 0x3)

◆ LAPDm_ADDR_SAPI

#define LAPDm_ADDR_SAPI (   addr)    (((addr) >> 2) & 0x7)

◆ LAPDm_ADDR_SHORT_L2

#define LAPDm_ADDR_SHORT_L2 (   addr)    ((addr) & 0x3)

◆ LAPDm_CTRL_I

#define LAPDm_CTRL_I (   nr,
  ns,
 
)    ((((nr) & 0x7) << 5) | (((p) & 0x1) << 4) | (((ns) & 0x7) << 1))

◆ LAPDm_CTRL_I_Ns

#define LAPDm_CTRL_I_Ns (   ctrl)    (((ctrl) & 0xE) >> 1)

◆ LAPDm_CTRL_is_I

#define LAPDm_CTRL_is_I (   ctrl)    (((ctrl) & 0x1) == 0)

◆ LAPDm_CTRL_is_S

#define LAPDm_CTRL_is_S (   ctrl)    (((ctrl) & 0x3) == 1)

◆ LAPDm_CTRL_is_U

#define LAPDm_CTRL_is_U (   ctrl)    (((ctrl) & 0x3) == 3)

◆ LAPDm_CTRL_Nr

#define LAPDm_CTRL_Nr (   ctrl)    (((ctrl) & 0xE0) >> 5)

◆ LAPDm_CTRL_PF_BIT

#define LAPDm_CTRL_PF_BIT (   ctrl)    (((ctrl) >> 4) & 0x1)

◆ LAPDm_CTRL_S

#define LAPDm_CTRL_S (   nr,
  s,
 
)    ((((nr) & 0x7) << 5) | (((p) & 0x1) << 4) | (((s) & 0x3) << 2) | 0x1)

◆ LAPDm_CTRL_S_BITS

#define LAPDm_CTRL_S_BITS (   ctrl)    (((ctrl) & 0xC) >> 2)

◆ LAPDm_CTRL_U

#define LAPDm_CTRL_U (   u,
 
)    ((((u) & 0x1c) << (5-2)) | (((p) & 0x1) << 4) | (((u) & 0x3) << 2) | 0x3)

◆ LAPDm_CTRL_U_BITS

#define LAPDm_CTRL_U_BITS (   ctrl)    ((((ctrl) & 0xC) >> 2) | ((ctrl) & 0xE0) >> 3)

◆ LAPDm_EL

#define LAPDm_EL   0x1

◆ LAPDM_ENT_F_EMPTY_FRAME

#define LAPDM_ENT_F_EMPTY_FRAME   0x0001

◆ LAPDM_ENT_F_POLLING_ONLY

#define LAPDM_ENT_F_POLLING_ONLY   0x0002

◆ LAPDm_LEN

#define LAPDm_LEN (   len)    ((len << 2) | 0x1)

◆ LAPDm_LPD_NORMAL

#define LAPDm_LPD_NORMAL   0

◆ LAPDm_LPD_SMSCB

#define LAPDm_LPD_SMSCB   1

◆ LAPDm_MORE

#define LAPDm_MORE   0x2

◆ LAPDm_SAPI_NORMAL

#define LAPDm_SAPI_NORMAL   0

◆ LAPDm_SAPI_SMS

#define LAPDm_SAPI_SMS   3

◆ LAPDm_U_UI

#define LAPDm_U_UI   0x0

◆ N200

#define N200   N200_TR_SDCCH

◆ N200_EST_REL

#define N200_EST_REL   5

◆ N200_TR_EFACCH_FR

#define N200_TR_EFACCH_FR   48

◆ N200_TR_FACCH_FR

#define N200_TR_FACCH_FR   34

◆ N200_TR_FACCH_HR

#define N200_TR_FACCH_HR   29

◆ N200_TR_SACCH

#define N200_TR_SACCH   5

◆ N200_TR_SDCCH

#define N200_TR_SDCCH   23

◆ N201_AB_FACCH

#define N201_AB_FACCH   20

◆ N201_AB_SACCH

#define N201_AB_SACCH   18

◆ N201_AB_SDCCH

#define N201_AB_SDCCH   20

◆ N201_B4

#define N201_B4   19

◆ N201_Bbis

#define N201_Bbis   23

◆ N201_Bter_FACCH

#define N201_Bter_FACCH   23

◆ N201_Bter_SACCH

#define N201_Bter_SACCH   21

◆ N201_Bter_SDCCH

#define N201_Bter_SDCCH   23

Typedef Documentation

◆ lapdm_cb_t

typedef int(* lapdm_cb_t) (struct msgb *msg, struct lapdm_entity *le, void *ctx)

Enumeration Type Documentation

◆ lapdm_dl_sapi

LAPDm datalink SAPIs.

Enumerator
DL_SAPI0 

SAPI 0.

DL_SAPI3 

SAPI 1.

_NR_DL_SAPI 

◆ lapdm_format

Enumerator
LAPDm_FMT_A 
LAPDm_FMT_B 
LAPDm_FMT_Bbis 
LAPDm_FMT_Bter 
LAPDm_FMT_B4 

◆ lapdm_mode

enum lapdm_mode

LAPDm mode/role.

Enumerator
LAPDM_MODE_MS 

behave like a MS (mobile phone)

LAPDM_MODE_BTS 

behave like a BTS (network)

Function Documentation

◆ get_n200_dcch()

static int get_n200_dcch ( enum gsm_chan_t  chan_t)
static

◆ get_rsl_name()

const char* get_rsl_name ( int  value)

◆ l2_ph_chan_conf()

◆ l2_ph_data_conf()

◆ l2_ph_data_ind()

◆ l2_ph_rach_ind()

◆ lapdm_channel_exit()

void lapdm_channel_exit ( struct lapdm_channel lc)

◆ lapdm_channel_init()

void lapdm_channel_init ( struct lapdm_channel lc,
enum lapdm_mode  mode 
)

initialize a LAPDm channel and all its channels

Parameters
[in]lclapdm_channel to be initialized
[in]modelapdm_mode (BTS/MS)

Don't use this function; It doesn't support different T200 values per API and doesn't set the correct N200 counter, both of which are required by GSM specs and supported by lapdm_channel_init2().

References _NR_DL_SAPI, GSM_LCHAN_SDCCH, lapdm_channel_init3(), and mode.

◆ lapdm_channel_init2()

int lapdm_channel_init2 ( struct lapdm_channel lc,
enum lapdm_mode  mode,
const int *  t200_ms_dcch,
const int *  t200_ms_acch,
enum gsm_chan_t  chan_t 
)

initialize a LAPDm channel and all its channels

Parameters
[in]lclapdm_channel to be initialized
[in]modelapdm_mode (BTS/MS)
[in]t200_ms_dcchper-SAPI array of T200 in milli-seconds for DCCH
[in]t200_ms_acchper-SAPI array of T200 in milli-seconds for SACCH
[in]chan_tGSM channel type (to correctly set N200)

References lapdm_channel_init3(), and mode.

◆ lapdm_channel_init3()

int lapdm_channel_init3 ( struct lapdm_channel lc,
enum lapdm_mode  mode,
const int *  t200_ms_dcch,
const int *  t200_ms_acch,
enum gsm_chan_t  chan_t,
const char *  name_pfx 
)

initialize a LAPDm channel and all its channels

Parameters
[in]lclapdm_channel to be initialized
[in]modelapdm_mode (BTS/MS)
[in]t200_ms_dcchper-SAPI array of T200 in milli-seconds for DCCH
[in]t200_ms_acchper-SAPI array of T200 in milli-seconds for SACCH
[in]chan_tGSM channel type (to correctly set N200)
[in]name_pfxhuman-readable name (copied by function + extended with ACCH/DCCH)

References get_n200_dcch(), lapdm_channel::lapdm_acch, lapdm_entity::lapdm_ch, lapdm_channel::lapdm_dcch, lapdm_entity_init3(), mode, N200_TR_SACCH, name, lapdm_channel::name, namebuf, osmo_talloc_replace_string(), and tall_lapd_ctx.

Referenced by lapdm_channel_init(), and lapdm_channel_init2().

◆ lapdm_channel_reset()

void lapdm_channel_reset ( struct lapdm_channel lc)

Reset a LAPDm channel with all its entities.

References lapdm_channel::lapdm_acch, lapdm_channel::lapdm_dcch, and lapdm_entity_reset().

◆ lapdm_channel_set_flags()

void lapdm_channel_set_flags ( struct lapdm_channel lc,
unsigned int  flags 
)

Set the flags of all LAPDm entities in a LAPDm channel.

References flags, lapdm_channel::lapdm_acch, lapdm_channel::lapdm_dcch, and lapdm_entity_set_flags().

◆ lapdm_channel_set_l1()

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.

References lapdm_entity::l1_ctx, lapdm_entity::l1_prim_cb, lapdm_channel::lapdm_acch, and lapdm_channel::lapdm_dcch.

◆ lapdm_channel_set_l3()

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.

References lapdm_entity::l3_cb, lapdm_entity::l3_ctx, lapdm_channel::lapdm_acch, and lapdm_channel::lapdm_dcch.

◆ lapdm_channel_set_mode()

int lapdm_channel_set_mode ( struct lapdm_channel lc,
enum lapdm_mode  mode 
)

◆ lapdm_datalink_for_sapi()

struct lapdm_datalink * lapdm_datalink_for_sapi ( struct lapdm_entity le,
uint8_t  sapi 
)

◆ lapdm_dl_init()

◆ lapdm_entity_exit()

void lapdm_entity_exit ( struct lapdm_entity le)

flush and release all resoures in LAPDm entity

References ARRAY_SIZE, lapdm_entity::datalink, lapdm_datalink::dl, and lapd_dl_exit().

Referenced by lapdm_channel_exit().

◆ lapdm_entity_init()

void lapdm_entity_init ( struct lapdm_entity le,
enum lapdm_mode  mode,
int  t200 
)

initialize a LAPDm entity and all datalinks inside

Parameters
[in]leLAPDm entity
[in]modelapdm_mode (BTS/MS)
[in]t200T200 re-transmission timer for all SAPIs in seconds

Don't use this function; It doesn't support different T200 values per API and doesn't permit the caller to specify the N200 counter, both of which are required by GSM specs and supported by lapdm_entity_init2().

References _NR_DL_SAPI, ARRAY_SIZE, lapdm_entity_init3(), mode, and N200.

◆ lapdm_entity_init2()

void lapdm_entity_init2 ( struct lapdm_entity le,
enum lapdm_mode  mode,
const int *  t200_ms,
int  n200 
)

initialize a LAPDm entity and all datalinks inside

Parameters
[in]leLAPDm entity
[in]modelapdm_mode (BTS/MS)
[in]t200_msper-SAPI array of T200 re-transmission timer in milli-seconds
[in]n200N200 re-transmisison count

References lapdm_entity_init3(), and mode.

◆ lapdm_entity_init3()

void lapdm_entity_init3 ( struct lapdm_entity le,
enum lapdm_mode  mode,
const int *  t200_ms,
int  n200,
const char *  name_pfx 
)

initialize a LAPDm entity and all datalinks inside

Parameters
[in]leLAPDm entity
[in]modelapdm_mode (BTS/MS)
[in]t200_msper-SAPI array of T200 re-transmission timer in milli-seconds
[in]n200N200 re-transmisison count
[in]namehuman-readable name (will be copied internally + extended with SAPI)

References ARRAY_SIZE, lapdm_entity::datalink, lapdm_dl_init(), lapdm_entity_set_mode(), mode, and name.

Referenced by lapdm_channel_init3(), lapdm_entity_init(), and lapdm_entity_init2().

◆ lapdm_entity_reset()

void lapdm_entity_reset ( struct lapdm_entity le)

Reset an entire LAPDm entity and all its datalinks.

References ARRAY_SIZE, lapdm_entity::datalink, lapdm_datalink::dl, and lapd_dl_reset().

Referenced by lapdm_channel_reset().

◆ lapdm_entity_set_flags()

void lapdm_entity_set_flags ( struct lapdm_entity le,
unsigned int  flags 
)

Set the flags of a LAPDm entity.

References flags, and lapdm_entity::flags.

Referenced by lapdm_channel_set_flags().

◆ lapdm_entity_set_mode()

◆ lapdm_pad_msgb()

static void lapdm_pad_msgb ( struct msgb msg,
uint8_t  n201 
)
static

◆ lapdm_phsap_dequeue_prim()

◆ lapdm_phsap_up()

◆ lapdm_rslms_recvmsg()

int lapdm_rslms_recvmsg ( struct msgb msg,
struct lapdm_channel lc 
)

Receive a RSLms Message buffers from Layer 3.

'msg' ownership is transferred, i.e. caller must not free it

References ABIS_RSL_MDISC_COM_CHAN, ABIS_RSL_MDISC_RLL, DLLAPD, LOGL_ERROR, LOGP, msg, abis_rsl_common_hdr::msg_discr, msgb_free(), msgb_l2, msgb_l2len(), rslms_rx_com_chan(), and rslms_rx_rll().

◆ lapdm_rx_not_permitted()

◆ lapdm_send_ph_data_req()

◆ rsl_is_transparent()

static int rsl_is_transparent ( uint8_t  msg_type)
static

◆ rsl_rll_error()

◆ rslms_rx_chan_rqd()

◆ rslms_rx_com_chan()

static int rslms_rx_com_chan ( struct msgb msg,
struct lapdm_channel lc 
)
static

◆ rslms_rx_rll()

◆ rslms_rx_rll_data_req()

◆ rslms_rx_rll_est_req()

◆ rslms_rx_rll_rel_req()

◆ rslms_rx_rll_res_req()

◆ rslms_rx_rll_susp_req()

◆ rslms_rx_rll_udata_req()

◆ rslms_sendmsg()

static int rslms_sendmsg ( struct msgb msg,
struct lapdm_entity le 
)
static

◆ send_rll_simple()

◆ send_rslms_dlsap()

◆ send_rslms_rll_l3()

static int send_rslms_rll_l3 ( uint8_t  msg_type,
struct lapdm_msg_ctx mctx,
struct msgb msg 
)
static

◆ send_rslms_rll_l3_ui()

◆ set_lapdm_context()

static int set_lapdm_context ( struct lapdm_datalink dl,
uint8_t  chan_nr,
uint8_t  link_id,
int  n201,
uint8_t  sapi 
)
static

◆ tx_dequeue_acch_msgb()

static struct msgb* tx_dequeue_acch_msgb ( struct lapdm_entity le)
static

◆ tx_dequeue_dcch_msgb()

static struct msgb* tx_dequeue_dcch_msgb ( struct lapdm_entity le)
static

◆ tx_ph_data_enqueue()

◆ update_pending_frames()

Variable Documentation

◆ lapdm_state_names

const char* lapdm_state_names[]

◆ osmo_ph_prim_names

const struct value_string osmo_ph_prim_names[]
Initial value:
= {
{ PRIM_PH_DATA, "PH-DATA" },
{ PRIM_PH_RACH, "PH-RANDOM_ACCESS" },
{ PRIM_PH_CONN, "PH-CONNECT" },
{ PRIM_PH_EMPTY_FRAME, "PH-EMPTY_FRAME" },
{ PRIM_PH_RTS, "PH-RTS" },
{ PRIM_MPH_INFO, "MPH-INFO" },
{ PRIM_TCH, "TCH" },
{ PRIM_TCH_RTS, "TCH-RTS" },
{ 0, NULL }
}

◆ tall_lapd_ctx

void* tall_lapd_ctx

Referenced by lapdm_channel_init3().

PRIM_PH_RACH
@ PRIM_PH_RACH
PH-RANDOM_ACCESS.
Definition: l1sap.h:10
PRIM_MPH_INFO
@ PRIM_MPH_INFO
MPH-INFO.
Definition: l1sap.h:14
PRIM_PH_RTS
@ PRIM_PH_RTS
PH-RTS.
Definition: l1sap.h:13
PRIM_PH_EMPTY_FRAME
@ PRIM_PH_EMPTY_FRAME
PH-EMPTY_FRAME.
Definition: l1sap.h:12
PRIM_PH_CONN
@ PRIM_PH_CONN
PH-CONNECT.
Definition: l1sap.h:11
PRIM_TCH
@ PRIM_TCH
TCH.
Definition: l1sap.h:15
PRIM_TCH_RTS
@ PRIM_TCH_RTS
TCH.
Definition: l1sap.h:16
PRIM_PH_DATA
@ PRIM_PH_DATA
PH-DATA.
Definition: l1sap.h:9