libosmogsm 1.9.0.196-9975
Osmocom GSM library
iuup.c File Reference
#include <errno.h>
#include <inttypes.h>
#include <osmocom/core/crc8gen.h>
#include <osmocom/core/crc16gen.h>
#include <osmocom/core/fsm.h>
#include <osmocom/core/prim.h>
#include <osmocom/core/timer.h>
#include <osmocom/core/logging.h>
#include <osmocom/gsm/prim.h>
#include <osmocom/gsm/protocol/gsm_25_415.h>
#include <osmocom/gsm/iuup.h>

Data Structures

struct  osmo_timer_nt
 
struct  osmo_iuup_instance
 

Macros

#define S(x)   (1 << (x))
 
#define IUUP_TIMER_INIT   1
 
#define IUUP_TIMER_TA   2
 
#define IUUP_TIMER_RC   3
 
#define IUUP_MSGB_SIZE   4096
 
#define PTR_ALIGNMENT_BYTES   8
 
#define IUUP_MSGB_HEADROOM_MIN_REQUIRED   (OSMO_MAX(sizeof(struct osmo_iuup_tnl_prim), sizeof(struct osmo_iuup_rnl_prim)) + (PTR_ALIGNMENT_BYTES - 1))
 

Enumerations

enum  iuup_fsm_state {
  IUUP_FSM_ST_NULL ,
  IUUP_FSM_ST_INIT ,
  IUUP_FSM_ST_TrM_DATA_XFER_READY ,
  IUUP_FSM_ST_SMpSDU_DATA_XFER_READY
}
 
enum  iuup_fsm_event {
  IUUP_FSM_EVT_IUUP_CONFIG_REQ ,
  IUUP_FSM_EVT_IUUP_DATA_REQ ,
  IUUP_FSM_EVT_IUUP_DATA_IND ,
  IUUP_FSM_EVT_IUUP_STATUS_REQ ,
  IUUP_FSM_EVT_IUUP_STATUS_IND ,
  IUUP_FSM_EVT_SSASAR_UNITDATA_REQ ,
  IUUP_FSM_EVT_SSASAR_UNITDATA_IND ,
  IUUP_FSM_EVT_IUUP_UNITDATA_REQ ,
  IUUP_FSM_EVT_IUUP_UNITDATA_IND ,
  IUUP_FSM_EVT_INIT ,
  IUUP_FSM_EVT_LAST_INIT_ACK ,
  IUUP_FSM_EVT_INIT_NACK
}
 

Functions

static int iuup_get_payload_offset (const uint8_t *iuup_pdu)
 
int osmo_iuup_compute_payload_crc (const uint8_t *iuup_pdu, unsigned int pdu_len)
 
int osmo_iuup_compute_header_crc (const uint8_t *iuup_pdu, unsigned int pdu_len)
 
static uint8_t iuup_get_pdu_type (const uint8_t *data)
 
static uint8_t iuup_get_hdr_crc (const uint8_t *data)
 
static struct msgbosmo_iuup_msgb_alloc_c (void *ctx, size_t size)
 
static __attribute__ ((assume_aligned(PTR_ALIGNMENT_BYTES)))
 
struct osmo_iuup_rnl_primosmo_iuup_rnl_prim_alloc (void *ctx, unsigned int primitive, unsigned int operation, unsigned int size)
 
struct osmo_iuup_tnl_primosmo_iuup_tnl_prim_alloc (void *ctx, unsigned int primitive, unsigned int operation, unsigned int size)
 
static struct osmo_iuup_tnl_primitp_ctrl_ack_alloc (struct osmo_iuup_instance *iui, enum iuup_procedure proc_ind, uint8_t fn)
 
static struct osmo_iuup_tnl_primtnp_ctrl_nack_alloc (struct osmo_iuup_instance *iui, enum iuup_procedure proc_ind, enum iuup_error_cause error_cause, uint8_t fn)
 
static struct osmo_iuup_tnl_primtnp_ctrl_init_alloc (struct osmo_iuup_instance *iui)
 
static struct osmo_iuup_rnl_primirp_init_ind_alloc (struct osmo_iuup_instance *iui)
 
static struct osmo_iuup_tnl_primrnl_to_tnl_data (struct osmo_iuup_instance *iui, struct osmo_iuup_rnl_prim *irp)
 
static struct osmo_iuup_rnl_primtnl_to_rnl_data (struct osmo_iuup_tnl_prim *itp)
 
static struct osmo_iuup_rnl_primirp_error_event_alloc_c (void *ctx, enum iuup_error_cause cause, enum iuup_error_distance distance)
 
static struct osmo_iuup_tnl_primitp_copy_c (void *ctx, const struct osmo_iuup_tnl_prim *src_itp)
 
static void retransmit_initialization (struct osmo_iuup_instance *iui)
 
static bool iuup_rx_initialization (struct osmo_iuup_instance *iui, struct osmo_iuup_tnl_prim *itp)
 
static void iuup_fsm_null (struct osmo_fsm_inst *fi, uint32_t event, void *data)
 
static void iuup_fsm_trm_data (struct osmo_fsm_inst *fi, uint32_t event, void *data)
 
static void iuup_fsm_init_on_enter (struct osmo_fsm_inst *fi, uint32_t prev_state)
 
static void iuup_fsm_init (struct osmo_fsm_inst *fi, uint32_t event, void *data)
 
static void iuup_fsm_smpsdu_data (struct osmo_fsm_inst *fi, uint32_t event, void *data)
 
static int iuup_fsm_timer_cb (struct osmo_fsm_inst *fi)
 
static int iuup_verify_pdu (const uint8_t *data, unsigned int len)
 
int osmo_iuup_tnl_prim_up (struct osmo_iuup_instance *inst, struct osmo_iuup_tnl_prim *itp)
 
int osmo_iuup_rnl_prim_down (struct osmo_iuup_instance *inst, struct osmo_iuup_rnl_prim *irp)
 
struct osmo_iuup_instanceosmo_iuup_instance_alloc (void *ctx, const char *id)
 
void osmo_iuup_instance_free (struct osmo_iuup_instance *iui)
 
void osmo_iuup_instance_set_user_prim_cb (struct osmo_iuup_instance *iui, osmo_prim_cb func, void *priv)
 
void osmo_iuup_instance_set_transport_prim_cb (struct osmo_iuup_instance *iui, osmo_prim_cb func, void *priv)
 
static __attribute__ ((constructor))
 

Variables

const struct osmo_crc8gen_code iuup_hdr_crc_code
 
const struct osmo_crc16gen_code iuup_data_crc_code
 
static const struct value_string iuup_fsm_event_names []
 
static const struct osmo_fsm_state iuup_fsm_states []
 
static struct osmo_fsm iuup_fsm
 

Macro Definition Documentation

◆ IUUP_MSGB_HEADROOM_MIN_REQUIRED

#define IUUP_MSGB_HEADROOM_MIN_REQUIRED   (OSMO_MAX(sizeof(struct osmo_iuup_tnl_prim), sizeof(struct osmo_iuup_rnl_prim)) + (PTR_ALIGNMENT_BYTES - 1))

◆ IUUP_MSGB_SIZE

#define IUUP_MSGB_SIZE   4096

◆ IUUP_TIMER_INIT

#define IUUP_TIMER_INIT   1

◆ IUUP_TIMER_RC

#define IUUP_TIMER_RC   3

◆ IUUP_TIMER_TA

#define IUUP_TIMER_TA   2

◆ PTR_ALIGNMENT_BYTES

#define PTR_ALIGNMENT_BYTES   8

◆ S

#define S (   x)    (1 << (x))

Enumeration Type Documentation

◆ iuup_fsm_event

Enumerator
IUUP_FSM_EVT_IUUP_CONFIG_REQ 
IUUP_FSM_EVT_IUUP_DATA_REQ 
IUUP_FSM_EVT_IUUP_DATA_IND 
IUUP_FSM_EVT_IUUP_STATUS_REQ 
IUUP_FSM_EVT_IUUP_STATUS_IND 
IUUP_FSM_EVT_SSASAR_UNITDATA_REQ 
IUUP_FSM_EVT_SSASAR_UNITDATA_IND 
IUUP_FSM_EVT_IUUP_UNITDATA_REQ 
IUUP_FSM_EVT_IUUP_UNITDATA_IND 
IUUP_FSM_EVT_INIT 
IUUP_FSM_EVT_LAST_INIT_ACK 
IUUP_FSM_EVT_INIT_NACK 

◆ iuup_fsm_state

Enumerator
IUUP_FSM_ST_NULL 
IUUP_FSM_ST_INIT 
IUUP_FSM_ST_TrM_DATA_XFER_READY 
IUUP_FSM_ST_SMpSDU_DATA_XFER_READY 

Function Documentation

◆ __attribute__() [1/2]

static __attribute__ ( (assume_aligned(PTR_ALIGNMENT_BYTES))  )
inlinestatic

◆ __attribute__() [2/2]

static __attribute__ ( (constructor)  )
static

◆ irp_error_event_alloc_c()

◆ irp_init_ind_alloc()

◆ itp_copy_c()

static struct osmo_iuup_tnl_prim * itp_copy_c ( void *  ctx,
const struct osmo_iuup_tnl_prim src_itp 
)
static

◆ itp_ctrl_ack_alloc()

◆ iuup_fsm_init()

◆ iuup_fsm_init_on_enter()

◆ iuup_fsm_null()

◆ iuup_fsm_smpsdu_data()

◆ iuup_fsm_timer_cb()

◆ iuup_fsm_trm_data()

◆ iuup_get_hdr_crc()

static uint8_t iuup_get_hdr_crc ( const uint8_t *  data)
inlinestatic

References data.

Referenced by iuup_verify_pdu().

◆ iuup_get_payload_offset()

static int iuup_get_payload_offset ( const uint8_t *  iuup_pdu)
static

References pdu_type.

Referenced by osmo_iuup_compute_payload_crc().

◆ iuup_get_pdu_type()

static uint8_t iuup_get_pdu_type ( const uint8_t *  data)
inlinestatic

◆ iuup_rx_initialization()

◆ iuup_verify_pdu()

◆ osmo_iuup_compute_header_crc()

int osmo_iuup_compute_header_crc ( const uint8_t *  iuup_pdu,
unsigned int  pdu_len 
)

◆ osmo_iuup_compute_payload_crc()

int osmo_iuup_compute_payload_crc ( const uint8_t *  iuup_pdu,
unsigned int  pdu_len 
)

◆ osmo_iuup_instance_alloc()

struct osmo_iuup_instance * osmo_iuup_instance_alloc ( void *  ctx,
const char *  id 
)

◆ osmo_iuup_instance_free()

void osmo_iuup_instance_free ( struct osmo_iuup_instance iui)

◆ osmo_iuup_instance_set_transport_prim_cb()

void osmo_iuup_instance_set_transport_prim_cb ( struct osmo_iuup_instance iui,
osmo_prim_cb  func,
void *  priv 
)

◆ osmo_iuup_instance_set_user_prim_cb()

void osmo_iuup_instance_set_user_prim_cb ( struct osmo_iuup_instance iui,
osmo_prim_cb  func,
void *  priv 
)

◆ osmo_iuup_msgb_alloc_c()

static struct msgb * osmo_iuup_msgb_alloc_c ( void *  ctx,
size_t  size 
)
inlinestatic

◆ osmo_iuup_rnl_prim_alloc()

struct osmo_iuup_rnl_prim * osmo_iuup_rnl_prim_alloc ( void *  ctx,
unsigned int  primitive,
unsigned int  operation,
unsigned int  size 
)

◆ osmo_iuup_rnl_prim_down()

◆ osmo_iuup_tnl_prim_alloc()

struct osmo_iuup_tnl_prim * osmo_iuup_tnl_prim_alloc ( void *  ctx,
unsigned int  primitive,
unsigned int  operation,
unsigned int  size 
)

◆ osmo_iuup_tnl_prim_up()

◆ retransmit_initialization()

◆ rnl_to_tnl_data()

◆ tnl_to_rnl_data()

◆ tnp_ctrl_init_alloc()

◆ tnp_ctrl_nack_alloc()

Variable Documentation

◆ iuup_data_crc_code

const struct osmo_crc16gen_code iuup_data_crc_code
Initial value:
= {
.bits = 10,
.poly = 563,
.init = 0,
.remainder = 0,
}

Referenced by osmo_iuup_compute_payload_crc().

◆ iuup_fsm

struct osmo_fsm iuup_fsm
static
Initial value:
= {
.name = "IuUP",
.states = iuup_fsm_states,
.num_states = ARRAY_SIZE(iuup_fsm_states),
.timer_cb = iuup_fsm_timer_cb,
.log_subsys = DLIUUP,
.event_names = iuup_fsm_event_names,
}
#define DLIUUP
#define ARRAY_SIZE(x)
static const struct value_string iuup_fsm_event_names[]
Definition: iuup.c:162
static const struct osmo_fsm_state iuup_fsm_states[]
Definition: iuup.c:801
static int iuup_fsm_timer_cb(struct osmo_fsm_inst *fi)
Definition: iuup.c:774

Referenced by __attribute__(), and osmo_iuup_instance_alloc().

◆ iuup_fsm_event_names

const struct value_string iuup_fsm_event_names[]
static
Initial value:
= {
{ IUUP_FSM_EVT_IUUP_CONFIG_REQ, "IuUP-CONFIG-req" },
{ IUUP_FSM_EVT_IUUP_DATA_REQ, "IuUP-DATA-req" },
{ IUUP_FSM_EVT_IUUP_DATA_IND, "IuUP-DATA-ind" },
{ IUUP_FSM_EVT_IUUP_STATUS_REQ, "IuUP-STATUS-req" },
{ IUUP_FSM_EVT_IUUP_STATUS_IND, "IuUP-STATUS-ind" },
{ IUUP_FSM_EVT_SSASAR_UNITDATA_REQ, "SSSAR-UNITDATA-req" },
{ IUUP_FSM_EVT_SSASAR_UNITDATA_IND, "SSSAR-UNITDATA-ind" },
{ IUUP_FSM_EVT_IUUP_UNITDATA_REQ, "IuUP-UNITDATA-req" },
{ IUUP_FSM_EVT_IUUP_UNITDATA_IND, "IuUP-UNITDATA-ind" },
{ IUUP_FSM_EVT_INIT, "INIT" },
{ IUUP_FSM_EVT_LAST_INIT_ACK, "LAST_INIT_ACK" },
{ IUUP_FSM_EVT_INIT_NACK, "INIT_NACK" },
{ 0, NULL }
}
@ IUUP_FSM_EVT_IUUP_STATUS_REQ
Definition: iuup.c:151
@ IUUP_FSM_EVT_IUUP_DATA_IND
Definition: iuup.c:150
@ IUUP_FSM_EVT_IUUP_UNITDATA_IND
Definition: iuup.c:156
@ IUUP_FSM_EVT_INIT
Definition: iuup.c:157
@ IUUP_FSM_EVT_IUUP_UNITDATA_REQ
Definition: iuup.c:155
@ IUUP_FSM_EVT_INIT_NACK
Definition: iuup.c:159
@ IUUP_FSM_EVT_LAST_INIT_ACK
Definition: iuup.c:158
@ IUUP_FSM_EVT_SSASAR_UNITDATA_REQ
Definition: iuup.c:153
@ IUUP_FSM_EVT_SSASAR_UNITDATA_IND
Definition: iuup.c:154
@ IUUP_FSM_EVT_IUUP_DATA_REQ
Definition: iuup.c:149
@ IUUP_FSM_EVT_IUUP_CONFIG_REQ
Definition: iuup.c:148
@ IUUP_FSM_EVT_IUUP_STATUS_IND
Definition: iuup.c:152

◆ iuup_fsm_states

const struct osmo_fsm_state iuup_fsm_states[]
static

◆ iuup_hdr_crc_code

const struct osmo_crc8gen_code iuup_hdr_crc_code
Initial value:
= {
.bits = 6,
.poly = 47,
.init = 0,
.remainder = 0,
}

Referenced by osmo_iuup_compute_header_crc().