libosmogsm  1.9.2
Osmocom GSM library
3GPP TS 48.071 BSS LCS Assistance Protocol (BSSLAP).

Files

file  bsslap.h
 
file  gsm_48_071.h
 
file  bsslap.c
 

Data Structures

struct  osmo_bsslap_err
 
struct  bsslap_ta_response
 
struct  bsslap_ta_layer3
 
struct  bsslap_reset
 
struct  bsslap_pdu
 

Macros

#define DEC_ERR(RC, MSG_TYPE, IEI, CAUSE, fmt, args...)
 

Enumerations

enum  bsslap_msgt {
  BSSLAP_MSGT_TA_REQUEST = 0x1,
  BSSLAP_MSGT_TA_RESPONSE = 0x2,
  BSSLAP_MSGT_REJECT = 0xa,
  BSSLAP_MSGT_RESET = 0xb,
  BSSLAP_MSGT_ABORT = 0xc,
  BSSLAP_MSGT_TA_LAYER3 = 0xd,
  BSSLAP_MSGT_MS_POS_CMD = 0xf,
  BSSLAP_MSGT_MS_POS_RESP = 0x10,
  BSSLAP_MSGT_UTDOA_REQ = 0x11,
  BSSLAP_MSGT_UTDOA_RESP = 0x12
}
 
enum  bsslap_cause {
  BSSLAP_CAUSE_CONGESTION = 0x0,
  BSSLAP_CAUSE_CHAN_MODE_NOT_SUPP = 0x1,
  BSSLAP_CAUSE_POS_PROC_NOT_SUPP = 0x2,
  BSSLAP_CAUSE_OTHER_RADIO_EVT_FAIL = 0x3,
  BSSLAP_CAUSE_INTRA_BSS_HO = 0x4,
  BSSLAP_CAUSE_SUPERV_TIMER_EXPIRED = 0x5,
  BSSLAP_CAUSE_INTER_BSS_HO = 0x6,
  BSSLAP_CAUSE_LOSS_SIG_CONN_MS = 0x7,
  BSSLAP_CAUSE_INCORR_SERV_CELL_ID = 0x8,
  BSSLAP_CAUSE_BSSAP_LE_SEGMENT_ERR = 0x9,
  BSSLAP_CAUSE_CONCUR_POS_PROC_NOT_EN = 0xa
}
 
enum  bsslap_iei {
  BSSLAP_IEI_TA = 0x1,
  BSSLAP_IEI_CELL_ID = 0x9,
  BSSLAP_IEI_CHAN_DESC = 0x10,
  BSSLAP_IEI_MEAS_REP = 0x14,
  BSSLAP_IEI_CAUSE = 0x18,
  BSSLAP_IEI_RRLP_FLAG = 0x19,
  BSSLAP_IEI_RRLP = 0x1b,
  BSSLAP_IEI_CELL_ID_LIST = 0x1c,
  BSSLAP_IEI_ENH_MEAS_REP = 0x1d,
  BSSLAP_IEI_LAC = 0x1e,
  BSSLAP_IEI_FREQ_LIST = 0x21,
  BSSLAP_IEI_MS_POWER = 0x22,
  BSSLAP_IEI_DELTA_TIMER = 0x23,
  BSSLAP_IEI_SERVING_CELL_ID = 0x24,
  BSSLAP_IEI_ENCR_KEY = 0x25,
  BSSLAP_IEI_CIPH_MODE_SET = 0x26,
  BSSLAP_IEI_CHAN_MODE = 0x27,
  BSSLAP_IEI_MR_CONFIG = 0x28,
  BSSLAP_IEI_POLLING_REPETITION = 0x29,
  BSSLAP_IEI_PACKET_CHAN_DESC = 0x2a,
  BSSLAP_IEI_TLLI = 0x2b,
  BSSLAP_IEI_TFI = 0x2c,
  BSSLAP_IEI_TBF_START_TIME = 0x2d,
  BSSLAP_IEI_PWRUP_START_TIME = 0x2e,
  BSSLAP_IEI_LONG_ENCR_KEY = 0x2f,
  BSSLAP_IEI_CONCUR_POS_PROC_F = 0x30
}
 

Functions

static const char * osmo_bsslap_msgt_name (enum bsslap_msgt val)
 
static const char * osmo_bsslap_iei_name (enum bsslap_iei val)
 
int osmo_bsslap_enc (struct msgb *msg, const struct bsslap_pdu *pdu)
 Encode BSSLAP PDU and append to msgb (3GPP TS 48.071). More...
 
int osmo_bsslap_dec (struct bsslap_pdu *pdu, struct osmo_bsslap_err **err, void *err_ctx, const uint8_t *data, size_t len)
 Decode BSSLAP PDU (3GPP TS 48.071). More...
 
static void osmo_bsslap_ie_enc_cell_id (struct msgb *msg, uint16_t cell_id)
 
static int osmo_bsslap_ie_dec_cell_id (uint16_t *cell_id, enum bsslap_msgt msgt, enum bsslap_iei iei, struct osmo_bsslap_err **err, void *err_ctx, const uint8_t *data, size_t len)
 
static void osmo_bsslap_ie_enc_ta (struct msgb *msg, uint8_t ta)
 
static int osmo_bsslap_ie_dec_ta (uint8_t *ta, enum bsslap_msgt msgt, enum bsslap_iei iei, struct osmo_bsslap_err **err, void *err_ctx, const uint8_t *data, size_t len)
 
static void osmo_bsslap_ie_enc_cause (struct msgb *msg, enum bsslap_cause cause)
 
static int osmo_bsslap_ie_dec_cause (enum bsslap_cause *cause, enum bsslap_msgt msgt, enum bsslap_iei iei, struct osmo_bsslap_err **err, void *err_ctx, const uint8_t *data, size_t len)
 
static void osmo_bsslap_ie_enc_chan_desc (struct msgb *msg, const struct gsm48_chan_desc *chan_desc)
 
static int osmo_bsslap_ie_dec_chan_desc (struct gsm48_chan_desc *chan_desc, enum bsslap_msgt msgt, enum bsslap_iei iei, struct osmo_bsslap_err **err, void *err_ctx, const uint8_t *data, size_t len)
 

Variables

const struct value_string osmo_bsslap_msgt_names []
 
const struct value_string osmo_bsslap_iei_names []
 
enum bsslap_msgt __attribute__
 
static const struct tlv_definition osmo_bsslap_tlvdef
 
const struct value_string osmo_bsslap_msgt_names []
 
const struct value_string osmo_bsslap_iei_names []
 

Detailed Description

Macro Definition Documentation

◆ DEC_ERR

#define DEC_ERR (   RC,
  MSG_TYPE,
  IEI,
  CAUSE,
  fmt,
  args... 
)
Value:
do { \
if (err && !*err) { \
*err = talloc_zero(err_ctx, struct osmo_bsslap_err); \
**err = (struct osmo_bsslap_err){ \
.rc = (RC), \
.msg_type = (MSG_TYPE), \
.iei = (IEI), \
.cause = (CAUSE), \
.logmsg = talloc_asprintf(*err, "Error decoding BSSLAP%s%s%s%s%s: " fmt, \
(MSG_TYPE) >= 0 ? " " : "", \
(MSG_TYPE) >= 0 ? osmo_bsslap_msgt_name(MSG_TYPE) : "", \
(IEI) >= 0 ? ": " : "", \
(IEI) >= 0 ? osmo_bsslap_iei_name(IEI) : "", \
(IEI) >= 0 ? " IE" : "", \
##args), \
}; \
} \
return RC; \
} while(0)

Enumeration Type Documentation

◆ bsslap_cause

Enumerator
BSSLAP_CAUSE_CONGESTION 
BSSLAP_CAUSE_CHAN_MODE_NOT_SUPP 
BSSLAP_CAUSE_POS_PROC_NOT_SUPP 
BSSLAP_CAUSE_OTHER_RADIO_EVT_FAIL 
BSSLAP_CAUSE_INTRA_BSS_HO 
BSSLAP_CAUSE_SUPERV_TIMER_EXPIRED 
BSSLAP_CAUSE_INTER_BSS_HO 
BSSLAP_CAUSE_LOSS_SIG_CONN_MS 
BSSLAP_CAUSE_INCORR_SERV_CELL_ID 
BSSLAP_CAUSE_BSSAP_LE_SEGMENT_ERR 
BSSLAP_CAUSE_CONCUR_POS_PROC_NOT_EN 

◆ bsslap_iei

enum bsslap_iei
Enumerator
BSSLAP_IEI_TA 
BSSLAP_IEI_CELL_ID 
BSSLAP_IEI_CHAN_DESC 
BSSLAP_IEI_MEAS_REP 
BSSLAP_IEI_CAUSE 
BSSLAP_IEI_RRLP_FLAG 
BSSLAP_IEI_RRLP 
BSSLAP_IEI_CELL_ID_LIST 
BSSLAP_IEI_ENH_MEAS_REP 
BSSLAP_IEI_LAC 
BSSLAP_IEI_FREQ_LIST 
BSSLAP_IEI_MS_POWER 
BSSLAP_IEI_DELTA_TIMER 
BSSLAP_IEI_SERVING_CELL_ID 
BSSLAP_IEI_ENCR_KEY 
BSSLAP_IEI_CIPH_MODE_SET 
BSSLAP_IEI_CHAN_MODE 
BSSLAP_IEI_MR_CONFIG 
BSSLAP_IEI_POLLING_REPETITION 
BSSLAP_IEI_PACKET_CHAN_DESC 
BSSLAP_IEI_TLLI 
BSSLAP_IEI_TFI 
BSSLAP_IEI_TBF_START_TIME 
BSSLAP_IEI_PWRUP_START_TIME 
BSSLAP_IEI_LONG_ENCR_KEY 
BSSLAP_IEI_CONCUR_POS_PROC_F 

◆ bsslap_msgt

Enumerator
BSSLAP_MSGT_TA_REQUEST 
BSSLAP_MSGT_TA_RESPONSE 
BSSLAP_MSGT_REJECT 
BSSLAP_MSGT_RESET 
BSSLAP_MSGT_ABORT 
BSSLAP_MSGT_TA_LAYER3 
BSSLAP_MSGT_MS_POS_CMD 
BSSLAP_MSGT_MS_POS_RESP 
BSSLAP_MSGT_UTDOA_REQ 
BSSLAP_MSGT_UTDOA_RESP 

Function Documentation

◆ osmo_bsslap_dec()

int osmo_bsslap_dec ( struct bsslap_pdu pdu,
struct osmo_bsslap_err **  err,
void *  err_ctx,
const uint8_t *  data,
size_t  len 
)

◆ osmo_bsslap_enc()

◆ osmo_bsslap_ie_dec_cause()

static int osmo_bsslap_ie_dec_cause ( enum bsslap_cause cause,
enum bsslap_msgt  msgt,
enum bsslap_iei  iei,
struct osmo_bsslap_err **  err,
void *  err_ctx,
const uint8_t *  data,
size_t  len 
)
static

References cause, data, DEC_ERR, iei, LCS_CAUSE_UNSPECIFIED, and len.

Referenced by osmo_bsslap_dec().

◆ osmo_bsslap_ie_dec_cell_id()

static int osmo_bsslap_ie_dec_cell_id ( uint16_t *  cell_id,
enum bsslap_msgt  msgt,
enum bsslap_iei  iei,
struct osmo_bsslap_err **  err,
void *  err_ctx,
const uint8_t *  data,
size_t  len 
)
static

References data, DEC_ERR, iei, LCS_CAUSE_UNSPECIFIED, and len.

Referenced by osmo_bsslap_dec().

◆ osmo_bsslap_ie_dec_chan_desc()

static int osmo_bsslap_ie_dec_chan_desc ( struct gsm48_chan_desc chan_desc,
enum bsslap_msgt  msgt,
enum bsslap_iei  iei,
struct osmo_bsslap_err **  err,
void *  err_ctx,
const uint8_t *  data,
size_t  len 
)
static

References chan_desc, data, DEC_ERR, iei, LCS_CAUSE_UNSPECIFIED, and len.

Referenced by osmo_bsslap_dec().

◆ osmo_bsslap_ie_dec_ta()

static int osmo_bsslap_ie_dec_ta ( uint8_t *  ta,
enum bsslap_msgt  msgt,
enum bsslap_iei  iei,
struct osmo_bsslap_err **  err,
void *  err_ctx,
const uint8_t *  data,
size_t  len 
)
static

References data, DEC_ERR, iei, LCS_CAUSE_UNSPECIFIED, len, and ta.

Referenced by osmo_bsslap_dec().

◆ osmo_bsslap_ie_enc_cause()

static void osmo_bsslap_ie_enc_cause ( struct msgb msg,
enum bsslap_cause  cause 
)
static

References BSSLAP_IEI_CAUSE, cause, msg, and msgb_put_u8().

Referenced by osmo_bsslap_enc().

◆ osmo_bsslap_ie_enc_cell_id()

static void osmo_bsslap_ie_enc_cell_id ( struct msgb msg,
uint16_t  cell_id 
)
static

◆ osmo_bsslap_ie_enc_chan_desc()

static void osmo_bsslap_ie_enc_chan_desc ( struct msgb msg,
const struct gsm48_chan_desc chan_desc 
)
static

◆ osmo_bsslap_ie_enc_ta()

static void osmo_bsslap_ie_enc_ta ( struct msgb msg,
uint8_t  ta 
)
static

References BSSLAP_IEI_TA, msg, msgb_put_u8(), and ta.

Referenced by osmo_bsslap_enc().

◆ osmo_bsslap_iei_name()

static const char* osmo_bsslap_iei_name ( enum bsslap_iei  val)
inlinestatic

◆ osmo_bsslap_msgt_name()

static const char* osmo_bsslap_msgt_name ( enum bsslap_msgt  val)
inlinestatic

Variable Documentation

◆ __attribute__

enum bsslap_msgt __attribute__

◆ osmo_bsslap_iei_names [1/2]

const struct value_string osmo_bsslap_iei_names[]

Referenced by osmo_bsslap_iei_name().

◆ osmo_bsslap_iei_names [2/2]

const struct value_string osmo_bsslap_iei_names[]
Initial value:
= {
{ BSSLAP_IEI_TA, "Timing Advance" },
{ BSSLAP_IEI_CELL_ID, "Cell Identity" },
{ BSSLAP_IEI_CHAN_DESC, "Channel Description" },
{ BSSLAP_IEI_MEAS_REP, "Measurement Report" },
{ BSSLAP_IEI_CAUSE, "Cause" },
{ BSSLAP_IEI_RRLP_FLAG, "RRLP Flag" },
{ BSSLAP_IEI_RRLP, "RRLP" },
{ BSSLAP_IEI_CELL_ID_LIST, "Cell Identity List" },
{ BSSLAP_IEI_ENH_MEAS_REP, "Enhanced Measurement Report" },
{ BSSLAP_IEI_LAC, "Location Area Code" },
{ BSSLAP_IEI_FREQ_LIST, "Frequency List" },
{ BSSLAP_IEI_MS_POWER, "MS Power" },
{ BSSLAP_IEI_DELTA_TIMER, "Delta Timer" },
{ BSSLAP_IEI_SERVING_CELL_ID, "Serving Cell Identifier" },
{ BSSLAP_IEI_ENCR_KEY, "Encryption Key" },
{ BSSLAP_IEI_CIPH_MODE_SET, "Cipher Mode Setting" },
{ BSSLAP_IEI_CHAN_MODE, "Channel Mode" },
{ BSSLAP_IEI_MR_CONFIG, "MultiRate Configuration" },
{ BSSLAP_IEI_POLLING_REPETITION, "Polling Repetition" },
{ BSSLAP_IEI_PACKET_CHAN_DESC, "Packet Channel Description" },
{ BSSLAP_IEI_TLLI, "TLLI" },
{ BSSLAP_IEI_TFI, "TFI" },
{ BSSLAP_IEI_TBF_START_TIME, "TBF Starting Time" },
{ BSSLAP_IEI_PWRUP_START_TIME, "Powerup Starting Time" },
{ BSSLAP_IEI_LONG_ENCR_KEY, "Long Encryption Key" },
{ BSSLAP_IEI_CONCUR_POS_PROC_F, "Concurrent Positioning Flag" },
{}
}

Referenced by osmo_bsslap_iei_name().

◆ osmo_bsslap_msgt_names [1/2]

const struct value_string osmo_bsslap_msgt_names[]

Referenced by osmo_bsslap_msgt_name().

◆ osmo_bsslap_msgt_names [2/2]

const struct value_string osmo_bsslap_msgt_names[]
Initial value:
= {
{ BSSLAP_MSGT_TA_REQUEST, "TA Request" },
{ BSSLAP_MSGT_TA_RESPONSE, "TA Response" },
{ BSSLAP_MSGT_REJECT, "Reject" },
{ BSSLAP_MSGT_RESET, "Reset" },
{ BSSLAP_MSGT_ABORT, "Abort" },
{ BSSLAP_MSGT_TA_LAYER3, "TA Layer3" },
{ BSSLAP_MSGT_MS_POS_CMD, "MS Position Command" },
{ BSSLAP_MSGT_MS_POS_RESP, "MS Position Response" },
{ BSSLAP_MSGT_UTDOA_REQ, "U-TDOA Request" },
{ BSSLAP_MSGT_UTDOA_RESP, "U-TDOA Response" },
{}
}

Referenced by osmo_bsslap_msgt_name().

◆ osmo_bsslap_tlvdef

BSSLAP_IEI_ENCR_KEY
@ BSSLAP_IEI_ENCR_KEY
Definition: gsm_48_071.h:70
BSSLAP_IEI_MEAS_REP
@ BSSLAP_IEI_MEAS_REP
Definition: gsm_48_071.h:59
BSSLAP_IEI_LAC
@ BSSLAP_IEI_LAC
Definition: gsm_48_071.h:65
BSSLAP_IEI_PACKET_CHAN_DESC
@ BSSLAP_IEI_PACKET_CHAN_DESC
Definition: gsm_48_071.h:75
BSSLAP_IEI_RRLP
@ BSSLAP_IEI_RRLP
Definition: gsm_48_071.h:62
BSSLAP_IEI_CELL_ID_LIST
@ BSSLAP_IEI_CELL_ID_LIST
Definition: gsm_48_071.h:63
BSSLAP_MSGT_UTDOA_RESP
@ BSSLAP_MSGT_UTDOA_RESP
Definition: gsm_48_071.h:38
BSSLAP_IEI_ENH_MEAS_REP
@ BSSLAP_IEI_ENH_MEAS_REP
Definition: gsm_48_071.h:64
BSSLAP_IEI_CHAN_DESC
@ BSSLAP_IEI_CHAN_DESC
Definition: gsm_48_071.h:58
BSSLAP_MSGT_MS_POS_RESP
@ BSSLAP_MSGT_MS_POS_RESP
Definition: gsm_48_071.h:36
TLV_TYPE_FIXED
@ TLV_TYPE_FIXED
fixed-length value-only
Definition: tlv.h:510
BSSLAP_IEI_CELL_ID
@ BSSLAP_IEI_CELL_ID
Definition: gsm_48_071.h:57
BSSLAP_MSGT_UTDOA_REQ
@ BSSLAP_MSGT_UTDOA_REQ
Definition: gsm_48_071.h:37
BSSLAP_IEI_TBF_START_TIME
@ BSSLAP_IEI_TBF_START_TIME
Definition: gsm_48_071.h:78
BSSLAP_IEI_CHAN_MODE
@ BSSLAP_IEI_CHAN_MODE
Definition: gsm_48_071.h:72
BSSLAP_IEI_MR_CONFIG
@ BSSLAP_IEI_MR_CONFIG
Definition: gsm_48_071.h:73
BSSLAP_IEI_RRLP_FLAG
@ BSSLAP_IEI_RRLP_FLAG
Definition: gsm_48_071.h:61
TLV_TYPE_TLV
@ TLV_TYPE_TLV
tag-length-value
Definition: tlv.h:513
BSSLAP_IEI_PWRUP_START_TIME
@ BSSLAP_IEI_PWRUP_START_TIME
Definition: gsm_48_071.h:79
BSSLAP_IEI_TLLI
@ BSSLAP_IEI_TLLI
Definition: gsm_48_071.h:76
BSSLAP_IEI_SERVING_CELL_ID
@ BSSLAP_IEI_SERVING_CELL_ID
Definition: gsm_48_071.h:69
BSSLAP_IEI_POLLING_REPETITION
@ BSSLAP_IEI_POLLING_REPETITION
Definition: gsm_48_071.h:74
osmo_bsslap_err::cause
enum lcs_cause cause
Definition: bsslap.h:36
BSSLAP_MSGT_MS_POS_CMD
@ BSSLAP_MSGT_MS_POS_CMD
Definition: gsm_48_071.h:35
BSSLAP_MSGT_TA_RESPONSE
@ BSSLAP_MSGT_TA_RESPONSE
Definition: gsm_48_071.h:30
BSSLAP_IEI_CIPH_MODE_SET
@ BSSLAP_IEI_CIPH_MODE_SET
Definition: gsm_48_071.h:71
osmo_bsslap_err
Definition: bsslap.h:32
osmo_bsslap_msgt_name
static const char * osmo_bsslap_msgt_name(enum bsslap_msgt val)
Definition: bsslap.h:41
osmo_bsslap_iei_name
static const char * osmo_bsslap_iei_name(enum bsslap_iei val)
Definition: bsslap.h:45
BSSLAP_MSGT_TA_REQUEST
@ BSSLAP_MSGT_TA_REQUEST
Definition: gsm_48_071.h:29
BSSLAP_IEI_TFI
@ BSSLAP_IEI_TFI
Definition: gsm_48_071.h:77
BSSLAP_MSGT_RESET
@ BSSLAP_MSGT_RESET
Definition: gsm_48_071.h:32
BSSLAP_IEI_LONG_ENCR_KEY
@ BSSLAP_IEI_LONG_ENCR_KEY
Definition: gsm_48_071.h:80
BSSLAP_MSGT_TA_LAYER3
@ BSSLAP_MSGT_TA_LAYER3
Definition: gsm_48_071.h:34
BSSLAP_IEI_CONCUR_POS_PROC_F
@ BSSLAP_IEI_CONCUR_POS_PROC_F
Definition: gsm_48_071.h:81
BSSLAP_MSGT_REJECT
@ BSSLAP_MSGT_REJECT
Definition: gsm_48_071.h:31
BSSLAP_IEI_TA
@ BSSLAP_IEI_TA
Definition: gsm_48_071.h:56
BSSLAP_IEI_DELTA_TIMER
@ BSSLAP_IEI_DELTA_TIMER
Definition: gsm_48_071.h:68
osmo_bsslap_err::msg_type
enum bsslap_msgt msg_type
Definition: bsslap.h:34
BSSLAP_IEI_FREQ_LIST
@ BSSLAP_IEI_FREQ_LIST
Definition: gsm_48_071.h:66
BSSLAP_IEI_CAUSE
@ BSSLAP_IEI_CAUSE
Definition: gsm_48_071.h:60
BSSLAP_MSGT_ABORT
@ BSSLAP_MSGT_ABORT
Definition: gsm_48_071.h:33
TLV_TYPE_TV
@ TLV_TYPE_TV
tag-value (8bit)
Definition: tlv.h:512
BSSLAP_IEI_MS_POWER
@ BSSLAP_IEI_MS_POWER
Definition: gsm_48_071.h:67