libosmogsm  0.9.6.315-40e62
Osmocom GSM library
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
RSL

GSM Radio Signalling Link messages on the A-bis interface. More...

Files

file  rsl.h
 
file  rsl.c
 

Macros

#define rsl_tlv_parse(dec, buf, len)   tlv_parse(dec, &rsl_att_tlvdef, buf, len, 0, 0)
 Parse RSL TLV structure using tlv_parse. More...
 
#define rsl_ipac_eie_tlv_parse(dec, buf, len)   tlv_parse(dec, &rsl_ipac_eie_tlvdef, buf, len, 0, 0)
 Parse RSL IPAC EIE TLV structure using tlv_parse. More...
 
#define RSL_ALLOC_SIZE   200
 Size for RSL msgb_alloc. More...
 
#define RSL_ALLOC_HEADROOM   56
 Headroom size for RSL msgb_alloc. More...
 

Functions

void rsl_init_rll_hdr (struct abis_rsl_rll_hdr *dh, uint8_t msg_type)
 Initialize a RSL RLL header. More...
 
void rsl_init_cchan_hdr (struct abis_rsl_cchan_hdr *ch, uint8_t msg_type)
 Initialize a RSL Common Channel header. More...
 
uint8_t rsl_enc_chan_nr (uint8_t type, uint8_t subch, uint8_t timeslot)
 Encode channel number as per Section 9.3.1. More...
 
int rsl_dec_chan_nr (uint8_t chan_nr, uint8_t *type, uint8_t *subch, uint8_t *timeslot)
 Decode RSL channel number. More...
 
const char * rsl_chan_nr_str (uint8_t chan_nr)
 Get human-readable string for RSL channel number. More...
 
const char * rsl_err_name (uint8_t err)
 Get human-readable name for RSL Error. More...
 
const char * rsl_rlm_cause_name (uint8_t err)
 Get human-readable string for RLM cause. More...
 
const char * rsl_msg_name (uint8_t msg_type)
 Get human-readable string for RSL Message Type. More...
 
const char * rsl_ipac_msg_name (uint8_t msg_type)
 Get human-readable name of ip.access RSL msg type. More...
 
const char * rsl_or_ipac_msg_name (uint8_t msg_type)
 Get human-readable name of standard or ip.access RSL msg type. More...
 
int rsl_ccch_conf_to_bs_cc_chans (int ccch_conf)
 
void rsl_rll_push_hdr (struct msgb *msg, uint8_t msg_type, uint8_t chan_nr, uint8_t link_id, int transparent)
 Push a RSL RLL header onto an existing msgb. More...
 
void rsl_rll_push_l3 (struct msgb *msg, uint8_t msg_type, uint8_t chan_nr, uint8_t link_id, int transparent)
 Wrap msgb in L3 Info IE and push a RSL RLL header. More...
 
struct msgb * rsl_rll_simple (uint8_t msg_type, uint8_t chan_nr, uint8_t link_id, int transparent)
 Create msgb with RSL RLL header. More...
 
static const char * rsl_act_type_name (uint8_t act_type)
 Return a human readable name for GSM 08.58 RSL_ACT_* constants. More...
 
int rsl_ccch_conf_to_bs_ccch_sdcch_comb (int ccch_conf)
 

Variables

const struct tlv_definition rsl_att_tlvdef
 
const struct tlv_definition rsl_ipac_eie_tlvdef
 TLV parser definitions for IPA embedded IEs. More...
 
const struct value_string rsl_act_type_names []
 String names of RSL Channel Activation Types. More...
 
const struct tlv_definition rsl_att_tlvdef
 
static const struct value_string rsl_err_vals []
 
static const struct value_string rsl_msgt_names []
 
static const struct value_string rsl_ipac_msgt_names []
 ip.access specific More...
 
static const struct value_string rsl_rlm_cause_strs []
 
const struct tlv_definition rsl_ipac_eie_tlvdef
 TLV parser definitions for IPA embedded IEs. More...
 
const struct value_string rsl_act_type_names []
 String names of RSL Channel Activation Types. More...
 

Detailed Description

GSM Radio Signalling Link messages on the A-bis interface.

3GPP TS 08.58 version 8.6.0 Release 1999 / ETSI TS 100 596 V8.6.0.

Macro Definition Documentation

#define RSL_ALLOC_HEADROOM   56

Headroom size for RSL msgb_alloc.

Referenced by rsl_rll_simple().

#define RSL_ALLOC_SIZE   200

Size for RSL msgb_alloc.

Referenced by rsl_rll_simple().

#define rsl_ipac_eie_tlv_parse (   dec,
  buf,
  len 
)    tlv_parse(dec, &rsl_ipac_eie_tlvdef, buf, len, 0, 0)

Parse RSL IPAC EIE TLV structure using tlv_parse.

#define rsl_tlv_parse (   dec,
  buf,
  len 
)    tlv_parse(dec, &rsl_att_tlvdef, buf, len, 0, 0)

Function Documentation

static const char* rsl_act_type_name ( uint8_t  act_type)
inlinestatic

Return a human readable name for GSM 08.58 RSL_ACT_* constants.

References rsl_act_type_names.

int rsl_ccch_conf_to_bs_cc_chans ( int  ccch_conf)
int rsl_ccch_conf_to_bs_ccch_sdcch_comb ( int  ccch_conf)
const char * rsl_chan_nr_str ( uint8_t  chan_nr)

Get human-readable string for RSL channel number.

int rsl_dec_chan_nr ( uint8_t  chan_nr,
uint8_t *  type,
uint8_t *  subch,
uint8_t *  timeslot 
)

Decode RSL channel number.

Parameters
[in]chan_nrChannel Number
[out]typeChannel Type
[out]subchSub-channel Number
[out]timeslotTimeslot
uint8_t rsl_enc_chan_nr ( uint8_t  type,
uint8_t  subch,
uint8_t  timeslot 
)

Encode channel number as per Section 9.3.1.

Parameters
[in]ChannelType (RSL_CHAN_...)
[in]subchSub-Channel within Channel
[in]timeslotAir interface timeslot
Returns
RSL Channel Number (TS 08.58 9.3.1)
const char * rsl_err_name ( uint8_t  err)

Get human-readable name for RSL Error.

References rsl_err_vals.

void rsl_init_cchan_hdr ( struct abis_rsl_cchan_hdr *  ch,
uint8_t  msg_type 
)

Initialize a RSL Common Channel header.

Parameters
[out]chCaller-allocated RSL Common Channel Header
[in]msg_typeMessage Type

Referenced by l2_ph_chan_conf(), and l2_ph_rach_ind().

void rsl_init_rll_hdr ( struct abis_rsl_rll_hdr *  dh,
uint8_t  msg_type 
)

Initialize a RSL RLL header.

Parameters
[out]dhCaller-allocated RSL RLL header
[in]msg_typeMessage Type

Referenced by rsl_rll_push_hdr(), and rsl_rll_simple().

const char * rsl_ipac_msg_name ( uint8_t  msg_type)

Get human-readable name of ip.access RSL msg type.

References rsl_ipac_msgt_names.

Referenced by rsl_or_ipac_msg_name().

const char * rsl_msg_name ( uint8_t  err)

Get human-readable string for RSL Message Type.

References rsl_msgt_names.

Referenced by rslms_rx_rll().

const char * rsl_or_ipac_msg_name ( uint8_t  msg_type)

Get human-readable name of standard or ip.access RSL msg type.

If msg_type is a standard RSL message type, return its human-readable name. Otherwise return rsl_ipac_msg_name(msg_type).

References rsl_ipac_msg_name(), and rsl_msgt_names.

void rsl_rll_push_hdr ( struct msgb *  msg,
uint8_t  msg_type,
uint8_t  chan_nr,
uint8_t  link_id,
int  transparent 
)

Push a RSL RLL header onto an existing msgb.

Parameters
msgMessage Buffer to which RLL header shall be pushed
[in]msg_typeRSL Message Type
[in]chan_nrRSL Channel Number
[in]link_idRSL Link Identifier
[in]transparentTransparent to BTS (1) or not (0)

References rsl_init_rll_hdr().

Referenced by rsl_rll_push_l3(), and send_rslms_rll_l3_ui().

void rsl_rll_push_l3 ( struct msgb *  msg,
uint8_t  msg_type,
uint8_t  chan_nr,
uint8_t  link_id,
int  transparent 
)

Wrap msgb in L3 Info IE and push a RSL RLL header.

Parameters
[in]msgMessage Buffer to which L3 Header shall be appended
[in]msg_typeRSL Message Type
[in]chan_hrRSL Channel Number
[in]link_idLink Identififer
[in]transparentTransparent to BTS (1) or not (0)

References msgb_tv16_push(), and rsl_rll_push_hdr().

Referenced by send_rslms_rll_l3().

struct msgb * rsl_rll_simple ( uint8_t  msg_type,
uint8_t  chan_nr,
uint8_t  link_id,
int  transparent 
)

Create msgb with RSL RLL header.

Parameters
[in]msg_typeRSL Message Type
[in]chan_nrRSL Channel Number
[in]link_idRSL Link Identifier
[in]transparentTransparent to BTS (1) or not (0)
Returns
callee-allocated msgb; NULL on error

References RSL_ALLOC_HEADROOM, RSL_ALLOC_SIZE, and rsl_init_rll_hdr().

Referenced by rsl_rll_error(), and send_rll_simple().

const char * rsl_rlm_cause_name ( uint8_t  err)

Get human-readable string for RLM cause.

References rsl_rlm_cause_strs.

Variable Documentation

const struct value_string rsl_act_type_names[]

String names of RSL Channel Activation Types.

Referenced by rsl_act_type_name().

const struct value_string rsl_act_type_names[]
Initial value:
= {
{ RSL_ACT_TYPE_INITIAL, "INITIAL" },
{ RSL_ACT_TYPE_REACT, "REACT" },
{ RSL_ACT_INTRA_IMM_ASS, "INTRA_IMM_ASS" },
{ RSL_ACT_INTRA_NORM_ASS, "INTRA_NORM_ASS" },
{ RSL_ACT_INTER_ASYNC, "INTER_ASYNC" },
{ RSL_ACT_INTER_SYNC, "INTER_SYNC" },
{ RSL_ACT_SECOND_ADD, "SECOND_ADD" },
{ RSL_ACT_SECOND_MULTI, "SECOND_MULTI" },
{ RSL_ACT_OSMO_PDCH, "OSMO_PDCH" },
{ 0, NULL }
}

String names of RSL Channel Activation Types.

Referenced by rsl_act_type_name().

const struct tlv_definition rsl_att_tlvdef
const struct tlv_definition rsl_att_tlvdef
const struct value_string rsl_err_vals[]
static

Referenced by rsl_err_name().

const struct tlv_definition rsl_ipac_eie_tlvdef

TLV parser definitions for IPA embedded IEs.

const struct tlv_definition rsl_ipac_eie_tlvdef
Initial value:
= {
.def = {
[RSL_IPAC_EIE_RXLEV] = { TLV_TYPE_TV },
[RSL_IPAC_EIE_RXQUAL] = { TLV_TYPE_TV },
[RSL_IPAC_EIE_FREQ_ERR] = { TLV_TYPE_FIXED, 2 },
[RSL_IPAC_EIE_TIMING_ERR] = { TLV_TYPE_TV },
[RSL_IPAC_EIE_MEAS_AVG_CFG] = { TLV_TYPE_TLV },
[RSL_IPAC_EIE_BS_PWR_CTL] = { TLV_TYPE_FIXED, 3 },
[RSL_IPAC_EIE_MS_PWR_CTL] = { TLV_TYPE_FIXED, 3 },
[RSL_IPAC_EIE_HANDO_THRESH] = { TLV_TYPE_FIXED, 6 },
[RSL_IPAC_EIE_NCELL_DEFAULTS] = { TLV_TYPE_FIXED, 3 },
[RSL_IPAC_EIE_NCELL_LIST] = { TLV_TYPE_TLV },
[RSL_IPAC_EIE_PC_THRESH_COMP] = { TLV_TYPE_FIXED, 10 },
[RSL_IPAC_EIE_HO_THRESH_COMP] = { TLV_TYPE_FIXED, 10 },
[RSL_IPAC_EIE_HO_CAUSE] = { TLV_TYPE_TLV },
[RSL_IPAC_EIE_HO_CANDIDATES] = { TLV_TYPE_TLV },
[RSL_IPAC_EIE_NCELL_BA_CHG_LIST]= { TLV_TYPE_TLV },
[RSL_IPAC_EIE_NUM_OF_MS] = { TLV_TYPE_TV },
[RSL_IPAC_EIE_HO_CAND_EXT] = { TLV_TYPE_TLV },
[RSL_IPAC_EIE_NCELL_DEF_EXT] = { TLV_TYPE_TLV },
[RSL_IPAC_EIE_NCELL_LIST_EXT] = { TLV_TYPE_TLV },
[RSL_IPAC_EIE_MASTER_KEY] = { TLV_TYPE_TLV },
[RSL_IPAC_EIE_MASTER_SALT] = { TLV_TYPE_TLV },
},
}
tag-value (8bit)
Definition: tlv.h:374
tag-length-value
Definition: tlv.h:375
fixed-length value-only
Definition: tlv.h:372

TLV parser definitions for IPA embedded IEs.

const struct value_string rsl_ipac_msgt_names[]
static
Initial value:
= {
{ RSL_MT_IPAC_PDCH_ACT, "IPAC_PDCH_ACT" },
{ RSL_MT_IPAC_PDCH_ACT_ACK, "IPAC_PDCH_ACT_ACK" },
{ RSL_MT_IPAC_PDCH_ACT_NACK, "IPAC_PDCH_ACT_NACK" },
{ RSL_MT_IPAC_PDCH_DEACT, "IPAC_PDCH_DEACT" },
{ RSL_MT_IPAC_PDCH_DEACT_ACK, "IPAC_PDCH_DEACT_ACK" },
{ RSL_MT_IPAC_PDCH_DEACT_NACK, "IPAC_PDCH_DEACT_NACK" },
{ RSL_MT_IPAC_CONNECT_MUX, "IPAC_CONNECT_MUX" },
{ RSL_MT_IPAC_CONNECT_MUX_ACK, "IPAC_CONNECT_MUX_ACK" },
{ RSL_MT_IPAC_CONNECT_MUX_NACK, "IPAC_CONNECT_MUX_NACK" },
{ RSL_MT_IPAC_BIND_MUX, "IPAC_BIND_MUX" },
{ RSL_MT_IPAC_BIND_MUX_ACK, "IPAC_BIND_MUX_ACK" },
{ RSL_MT_IPAC_BIND_MUX_NACK, "IPAC_BIND_MUX_NACK" },
{ RSL_MT_IPAC_DISC_MUX, "IPAC_DISC_MUX" },
{ RSL_MT_IPAC_DISC_MUX_ACK, "IPAC_DISC_MUX_ACK" },
{ RSL_MT_IPAC_DISC_MUX_NACK, "IPAC_DISC_MUX_NACK" },
{ RSL_MT_IPAC_CRCX, "IPAC_CRCX" },
{ RSL_MT_IPAC_CRCX_ACK, "IPAC_CRCX_ACK" },
{ RSL_MT_IPAC_CRCX_NACK, "IPAC_CRCX_NACK" },
{ RSL_MT_IPAC_MDCX, "IPAC_MDCX" },
{ RSL_MT_IPAC_MDCX_ACK, "IPAC_MDCX_ACK" },
{ RSL_MT_IPAC_MDCX_NACK, "IPAC_MDCX_NACK" },
{ RSL_MT_IPAC_DLCX_IND, "IPAC_DLCX_IND" },
{ RSL_MT_IPAC_DLCX, "IPAC_DLCX" },
{ RSL_MT_IPAC_DLCX_ACK, "IPAC_DLCX_ACK" },
{ RSL_MT_IPAC_DLCX_NACK, "IPAC_DLCX_NACK" },
{ 0, NULL }
}

ip.access specific

Referenced by rsl_ipac_msg_name().

const struct value_string rsl_msgt_names[]
static
const struct value_string rsl_rlm_cause_strs[]
static
Initial value:
= {
{ RLL_CAUSE_T200_EXPIRED, "Timer T200 expired (N200+1) times" },
{ RLL_CAUSE_REEST_REQ, "Re-establishment request" },
{ RLL_CAUSE_UNSOL_UA_RESP, "Unsolicited UA response" },
{ RLL_CAUSE_UNSOL_DM_RESP, "Unsolicited DM response" },
{ RLL_CAUSE_UNSOL_DM_RESP_MF, "Unsolicited DM response, multiple frame" },
{ RLL_CAUSE_UNSOL_SPRV_RESP, "Unsolicited supervisory response" },
{ RLL_CAUSE_SEQ_ERR, "Sequence Error" },
{ RLL_CAUSE_UFRM_INC_PARAM, "U-Frame with incorrect parameters" },
{ RLL_CAUSE_SFRM_INC_PARAM, "S-Frame with incorrect parameters" },
{ RLL_CAUSE_IFRM_INC_MBITS, "I-Frame with incorrect use of M bit" },
{ RLL_CAUSE_IFRM_INC_LEN, "I-Frame with incorrect length" },
{ RLL_CAUSE_FRM_UNIMPL, "Frame not implemented" },
{ RLL_CAUSE_SABM_MF, "SABM command, multiple frame established state" },
{ RLL_CAUSE_SABM_INFO_NOTALL, "SABM frame with information not allowed in this state" },
{ 0, NULL },
}

Referenced by rsl_rlm_cause_name().