libosmogsm 1.11.0.4-1b755
Osmocom GSM library
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
3GPP TS 48.071 BSS LCS Assistance Protocol (BSSLAP).

Files

file  bsslap.h
 Message encoding and decoding for 3GPP TS 48.071 BSS LCS Assistance Protocol (BSSLAP).
 
file  gsm_48_071.h
 
file  bsslap.c
 Message encoding and decoding for 3GPP TS 48.071 BSSLAP protocol.
 

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 []
 
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)
static const char * osmo_bsslap_msgt_name(enum bsslap_msgt val)
Definition: bsslap.h:41
static const char * osmo_bsslap_iei_name(enum bsslap_iei val)
Definition: bsslap.h:45
Definition: bsslap.h:32
enum bsslap_msgt msg_type
Definition: bsslap.h:34
enum lcs_cause cause
Definition: bsslap.h:36

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

◆ osmo_bsslap_iei_names [1/2]

const struct value_string osmo_bsslap_iei_names[]
extern

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" },
{}
}
@ BSSLAP_IEI_TLLI
Definition: gsm_48_071.h:76
@ BSSLAP_IEI_MEAS_REP
Definition: gsm_48_071.h:59
@ BSSLAP_IEI_MR_CONFIG
Definition: gsm_48_071.h:73
@ BSSLAP_IEI_SERVING_CELL_ID
Definition: gsm_48_071.h:69
@ BSSLAP_IEI_TBF_START_TIME
Definition: gsm_48_071.h:78
@ BSSLAP_IEI_DELTA_TIMER
Definition: gsm_48_071.h:68
@ BSSLAP_IEI_PWRUP_START_TIME
Definition: gsm_48_071.h:79
@ BSSLAP_IEI_TFI
Definition: gsm_48_071.h:77
@ BSSLAP_IEI_ENCR_KEY
Definition: gsm_48_071.h:70
@ BSSLAP_IEI_PACKET_CHAN_DESC
Definition: gsm_48_071.h:75
@ BSSLAP_IEI_CELL_ID
Definition: gsm_48_071.h:57
@ BSSLAP_IEI_POLLING_REPETITION
Definition: gsm_48_071.h:74
@ BSSLAP_IEI_CHAN_MODE
Definition: gsm_48_071.h:72
@ BSSLAP_IEI_RRLP
Definition: gsm_48_071.h:62
@ BSSLAP_IEI_LONG_ENCR_KEY
Definition: gsm_48_071.h:80
@ BSSLAP_IEI_CAUSE
Definition: gsm_48_071.h:60
@ BSSLAP_IEI_TA
Definition: gsm_48_071.h:56
@ BSSLAP_IEI_CELL_ID_LIST
Definition: gsm_48_071.h:63
@ BSSLAP_IEI_MS_POWER
Definition: gsm_48_071.h:67
@ BSSLAP_IEI_RRLP_FLAG
Definition: gsm_48_071.h:61
@ BSSLAP_IEI_LAC
Definition: gsm_48_071.h:65
@ BSSLAP_IEI_ENH_MEAS_REP
Definition: gsm_48_071.h:64
@ BSSLAP_IEI_FREQ_LIST
Definition: gsm_48_071.h:66
@ BSSLAP_IEI_CIPH_MODE_SET
Definition: gsm_48_071.h:71
@ BSSLAP_IEI_CHAN_DESC
Definition: gsm_48_071.h:58
@ BSSLAP_IEI_CONCUR_POS_PROC_F
Definition: gsm_48_071.h:81

Referenced by osmo_bsslap_iei_name().

◆ osmo_bsslap_msgt_names [1/2]

const struct value_string osmo_bsslap_msgt_names[]
extern

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" },
{}
}
@ BSSLAP_MSGT_TA_LAYER3
Definition: gsm_48_071.h:34
@ BSSLAP_MSGT_MS_POS_RESP
Definition: gsm_48_071.h:36
@ BSSLAP_MSGT_RESET
Definition: gsm_48_071.h:32
@ BSSLAP_MSGT_TA_RESPONSE
Definition: gsm_48_071.h:30
@ BSSLAP_MSGT_ABORT
Definition: gsm_48_071.h:33
@ BSSLAP_MSGT_TA_REQUEST
Definition: gsm_48_071.h:29
@ BSSLAP_MSGT_MS_POS_CMD
Definition: gsm_48_071.h:35
@ BSSLAP_MSGT_UTDOA_RESP
Definition: gsm_48_071.h:38
@ BSSLAP_MSGT_UTDOA_REQ
Definition: gsm_48_071.h:37
@ BSSLAP_MSGT_REJECT
Definition: gsm_48_071.h:31

Referenced by osmo_bsslap_msgt_name().

◆ osmo_bsslap_tlvdef