libosmogsm 1.10.0.57-8972
Osmocom GSM library
|
GSM LAPDm (TS 04.06) implementation. More...
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
#include <string.h>
#include <errno.h>
#include <osmocom/core/logging.h>
#include <osmocom/core/timer.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/utils.h>
#include <osmocom/gsm/tlv.h>
#include <osmocom/gsm/rsl.h>
#include <osmocom/gsm/prim.h>
#include <osmocom/gsm/gsm_utils.h>
#include <osmocom/gsm/lapdm.h>
#include <osmocom/gsm/protocol/gsm_04_08.h>
#include <osmocom/gsm/protocol/gsm_08_58.h>
Macros | |
#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 |
Enumerations | |
enum | lapdm_format { LAPDm_FMT_A , LAPDm_FMT_B , LAPDm_FMT_Bbis , LAPDm_FMT_Bter , LAPDm_FMT_B4 } |
Functions | |
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) |
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... | |
static int | get_n200_dcch (enum gsm_chan_t chan_t) |
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) |
struct lapdm_datalink * | lapdm_datalink_for_sapi (struct lapdm_entity *le, uint8_t sapi) |
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 int | tx_ph_data_enqueue_ui (struct lapdm_datalink *dl, struct msgb *msg, uint8_t chan_nr, uint8_t link_id, uint8_t pad) |
static struct msgb * | tx_dequeue_msgb (struct lapdm_datalink *dl, uint32_t fn) |
static struct msgb * | tx_dequeue_dcch_msgb (struct lapdm_entity *le, uint32_t fn) |
static struct msgb * | tx_dequeue_acch_msgb (struct lapdm_entity *le, uint32_t fn) |
int | lapdm_phsap_dequeue_prim_fn (struct lapdm_entity *le, struct osmo_phsap_prim *pp, uint32_t fn) |
dequeue a msg that's pending transmission via L1 and wrap it into a osmo_phsap_prim More... | |
static void | lapdm_t200_fn_dl (struct lapdm_datalink *dl, uint32_t fn) |
void | lapdm_t200_fn (struct lapdm_entity *le, uint32_t fn) |
Get receive frame number from L1. 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 | 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) |
int | lapdm_phsap_up (struct osmo_prim_hdr *oph, struct lapdm_entity *le) |
Receive a PH-SAP primitive from L1. More... | |
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) |
int | lapdm_rslms_recvmsg (struct msgb *msg, struct lapdm_channel *lc) |
Receive a RSLms Message buffers from Layer 3. 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_channel_set_l1 (struct lapdm_channel *lc, osmo_prim_cb cb, void *ctx) |
Set the L1 callback and context of a LAPDm channel. 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_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... | |
void | lapdm_entity_set_t200_fn (struct lapdm_entity *le, const uint32_t *t200_fn) |
Set the T200 FN timer of a LAPDm entity. More... | |
void | lapdm_channel_set_t200_fn (struct lapdm_channel *lc, const uint32_t *t200_fn_dcch, const uint32_t *t200_fn_acch) |
Set the T200 FN timer of all LAPDm entities in a LAPDm channel. More... | |
Variables | |
const struct value_string | osmo_ph_prim_names [] |
void * | tall_lapd_ctx |
GSM LAPDm (TS 04.06) implementation.