libosmogb 1.9.0.196-9975
Osmocom Gb library
gprs_bssgp_util.c File Reference

GPRS BSSGP protocol implementation as per 3GPP TS 08.18. More...

#include <errno.h>
#include <stdint.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/byteswap.h>
#include <osmocom/gsm/tlv.h>
#include <osmocom/core/talloc.h>
#include <osmocom/gprs/gprs_bssgp.h>
#include <osmocom/gprs/gprs_ns.h>
#include "gprs_bssgp_internal.h"

Macros

#define DL   BSSGP_PDUF_DL
 
#define UL   BSSGP_PDUF_UL
 
#define SIG   BSSGP_PDUF_SIG
 
#define PTP   BSSGP_PDUF_PTP
 
#define PTM   BSSGP_PDUF_PTM
 

Functions

const char * bssgp_cause_str (enum gprs_bssgp_cause cause)
 
const char * bssgp_pdu_str (enum bssgp_pdu_type pdu)
 
struct msgbbssgp_msgb_alloc (void)
 
struct msgbbssgp_msgb_copy (const struct msgb *msg, const char *name)
 
int bssgp_tx_simple_bvci (uint8_t pdu_type, uint16_t nsei, uint16_t bvci, uint16_t ns_bvci)
 
int bssgp_tx_status (uint8_t cause, uint16_t *bvci, struct msgb *orig_msg)
 

Variables

struct gprs_ns_instbssgp_nsi
 
static const struct value_string bssgp_cause_strings []
 
static const struct value_string bssgp_pdu_strings []
 
static const uint8_t dl_ud_ies [] = { BSSGP_IE_PDU_LIFETIME }
 
static const uint8_t ul_ud_ies [] = { BSSGP_IE_CELL_ID }
 
static const uint8_t ra_cap_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_MS_RADIO_ACCESS_CAP }
 
static const uint8_t dl_mb_ud_ies [] = { BSSGP_IE_PDU_LIFETIME, BSSGP_IE_TMGI, BSSGP_IE_LLC_PDU }
 
static const uint8_t ul_mb_ud_ies [] = { BSSGP_IE_PDU_LIFETIME, BSSGP_IE_TMGI, BSSGP_IE_LLC_PDU }
 
static const uint8_t pag_ps_ies [] = { BSSGP_IE_IMSI, BSSGP_IE_QOS_PROFILE }
 
static const uint8_t pag_cs_ies [] = { BSSGP_IE_IMSI, BSSGP_IE_DRX_PARAMS }
 
static const uint8_t ra_cap_upd_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_TAG }
 
static const uint8_t ra_cap_upd_ack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_TAG, BSSGP_IE_RA_CAP_UPD_CAUSE }
 
static const uint8_t rad_sts_ies [] = { BSSGP_IE_RADIO_CAUSE }
 
static const uint8_t suspend_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_ROUTEING_AREA }
 
static const uint8_t suspend_ack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_ROUTEING_AREA, BSSGP_IE_SUSPEND_REF_NR }
 
static const uint8_t suspend_nack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_ROUTEING_AREA }
 
static const uint8_t resume_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_ROUTEING_AREA, BSSGP_IE_SUSPEND_REF_NR }
 
static const uint8_t resume_ack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_ROUTEING_AREA }
 
static const uint8_t resume_nack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_ROUTEING_AREA }
 
static const uint8_t d_pag_ps_ies [] = { BSSGP_IE_IMSI }
 
static const uint8_t d_pag_ps_resp_ies [] = { BSSGP_IE_IMSI, BSSGP_IE_T_UNTIL_NEXT_PAGING }
 
static const uint8_t d_pag_ps_rej_ies [] = { BSSGP_IE_IMSI, BSSGP_IE_T_UNTIL_NEXT_PAGING }
 
static const uint8_t ms_reg_enq_ies [] = { BSSGP_IE_IMSI }
 
static const uint8_t ms_reg_enq_res_ies [] = { BSSGP_IE_IMSI }
 
static const uint8_t flush_ll_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_BVCI }
 
static const uint8_t flush_ll_ack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_FLUSH_ACTION }
 
static const uint8_t llc_disc_ies []
 
static const uint8_t fc_bvc_ies []
 
static const uint8_t fc_bvc_ack_ies [] = { BSSGP_IE_TAG }
 
static const uint8_t fc_ms_ies []
 
static const uint8_t fc_ms_ack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_TAG }
 
static const uint8_t block_ies [] = { BSSGP_IE_BVCI, BSSGP_IE_CAUSE }
 
static const uint8_t block_ack_ies [] = { BSSGP_IE_BVCI }
 
static const uint8_t unblock_ies [] = { BSSGP_IE_BVCI }
 
static const uint8_t unblock_ack_ies [] = { BSSGP_IE_BVCI }
 
static const uint8_t reset_ies [] = { BSSGP_IE_BVCI, BSSGP_IE_CAUSE }
 
static const uint8_t reset_ack_ies [] = { BSSGP_IE_BVCI }
 
static const uint8_t status_ies [] = { BSSGP_IE_CAUSE }
 
static const uint8_t inv_trc_ies [] = { BSSGP_IE_TRACE_TYPE, BSSGP_IE_TRACE_REFERENC }
 
static const uint8_t dl_bss_pfc_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_PACKET_FLOW_ID }
 
static const uint8_t crt_bss_pfc_ies []
 
static const uint8_t crt_bss_pfc_ack_ies []
 
static const uint8_t crt_bss_pfc_nack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_PACKET_FLOW_ID, BSSGP_IE_CAUSE }
 
static const uint8_t mod_bss_pfc_ies []
 
static const uint8_t mod_bss_pfc_ack_ies []
 
static const uint8_t del_bss_pfc_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_PACKET_FLOW_ID }
 
static const uint8_t del_bss_pfc_ack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_PACKET_FLOW_ID }
 
static const uint8_t fc_pfc_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_TAG, BSSGP_IE_PFC_FLOW_CTRL_PARAMS }
 
static const uint8_t fc_pfc_ack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_TAG }
 
static const uint8_t del_bss_pfc_req_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_PACKET_FLOW_ID, BSSGP_IE_CAUSE }
 
static const uint8_t ps_ho_required_ies []
 
static const uint8_t ps_ho_required_ack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_LIST_OF_SETUP_PFC }
 
static const uint8_t ps_ho_required_nack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_CAUSE }
 
static const uint8_t ps_ho_request_ies []
 
static const uint8_t ps_ho_request_ack_ies []
 
static const uint8_t ps_ho_request_nack_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_CAUSE }
 
static const uint8_t ps_ho_compl_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_IMSI }
 
static const uint8_t ps_ho_cancel_ies [] = { BSSGP_IE_TLLI, BSSGP_IE_CAUSE, BSSGP_IE_CELL_ID }
 
static const uint8_t ps_ho_compl_ack_ies [] = { BSSGP_IE_TLLI }
 
static const uint8_t overload_ies [] = { BSSGP_IE_PRIO_CLASS_IND }
 
static const uint8_t rinfo_ies [] = { BSSGP_IE_RIM_ROUTING_INFO, BSSGP_IE_RI_RIM_CONTAINER }
 
static const uint8_t rinfo_req_ies [] = { BSSGP_IE_RIM_ROUTING_INFO, BSSGP_IE_RI_REQ_RIM_CONTAINER }
 
static const uint8_t rinfo_ack_ies [] = { BSSGP_IE_RIM_ROUTING_INFO, BSSGP_IE_RI_ACK_RIM_CONTAINER }
 
static const uint8_t rinfo_err_ies [] = { BSSGP_IE_RIM_ROUTING_INFO, BSSGP_IE_RI_ERROR_RIM_COINTAINER }
 
static const uint8_t rinfo_aerr_ies [] = { BSSGP_IE_RIM_ROUTING_INFO, BSSGP_IE_RI_APP_ERROR_RIM_CONT }
 
const struct osmo_tlv_prot_def osmo_pdef_bssgp
 

Detailed Description

GPRS BSSGP protocol implementation as per 3GPP TS 08.18.

Macro Definition Documentation

◆ DL

#define DL   BSSGP_PDUF_DL

◆ PTM

#define PTM   BSSGP_PDUF_PTM

◆ PTP

#define PTP   BSSGP_PDUF_PTP

◆ SIG

#define SIG   BSSGP_PDUF_SIG

◆ UL

#define UL   BSSGP_PDUF_UL

Function Documentation

◆ bssgp_cause_str()

◆ bssgp_msgb_alloc()

◆ bssgp_msgb_copy()

◆ bssgp_pdu_str()

◆ bssgp_tx_simple_bvci()

int bssgp_tx_simple_bvci ( uint8_t  pdu_type,
uint16_t  nsei,
uint16_t  bvci,
uint16_t  ns_bvci 
)

◆ bssgp_tx_status()

Variable Documentation

◆ block_ack_ies

const uint8_t block_ack_ies[] = { BSSGP_IE_BVCI }
static

◆ block_ies

const uint8_t block_ies[] = { BSSGP_IE_BVCI, BSSGP_IE_CAUSE }
static

◆ bssgp_cause_strings

const struct value_string bssgp_cause_strings[]
static

Referenced by bssgp_cause_str().

◆ bssgp_nsi

struct gprs_ns_inst* bssgp_nsi

Referenced by _gprs_ns_sendmsg().

◆ bssgp_pdu_strings

const struct value_string bssgp_pdu_strings[]
static

Referenced by bssgp_pdu_str().

◆ crt_bss_pfc_ack_ies

const uint8_t crt_bss_pfc_ack_ies[]
static
Initial value:
@ BSSGP_IE_AGG_BSS_QOS_PROFILE
Definition: gsm_08_18.h:160
@ BSSGP_IE_PACKET_FLOW_ID
Definition: gsm_08_18.h:158
@ BSSGP_IE_TLLI
Definition: gsm_08_18.h:149

◆ crt_bss_pfc_ies

const uint8_t crt_bss_pfc_ies[]
static
Initial value:

◆ crt_bss_pfc_nack_ies

const uint8_t crt_bss_pfc_nack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_PACKET_FLOW_ID, BSSGP_IE_CAUSE }
static

◆ d_pag_ps_ies

const uint8_t d_pag_ps_ies[] = { BSSGP_IE_IMSI }
static

◆ d_pag_ps_rej_ies

const uint8_t d_pag_ps_rej_ies[] = { BSSGP_IE_IMSI, BSSGP_IE_T_UNTIL_NEXT_PAGING }
static

◆ d_pag_ps_resp_ies

const uint8_t d_pag_ps_resp_ies[] = { BSSGP_IE_IMSI, BSSGP_IE_T_UNTIL_NEXT_PAGING }
static

◆ del_bss_pfc_ack_ies

const uint8_t del_bss_pfc_ack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_PACKET_FLOW_ID }
static

◆ del_bss_pfc_ies

const uint8_t del_bss_pfc_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_PACKET_FLOW_ID }
static

◆ del_bss_pfc_req_ies

const uint8_t del_bss_pfc_req_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_PACKET_FLOW_ID, BSSGP_IE_CAUSE }
static

◆ dl_bss_pfc_ies

const uint8_t dl_bss_pfc_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_PACKET_FLOW_ID }
static

◆ dl_mb_ud_ies

const uint8_t dl_mb_ud_ies[] = { BSSGP_IE_PDU_LIFETIME, BSSGP_IE_TMGI, BSSGP_IE_LLC_PDU }
static

◆ dl_ud_ies

const uint8_t dl_ud_ies[] = { BSSGP_IE_PDU_LIFETIME }
static

◆ fc_bvc_ack_ies

const uint8_t fc_bvc_ack_ies[] = { BSSGP_IE_TAG }
static

◆ fc_bvc_ies

const uint8_t fc_bvc_ies[]
static
Initial value:
@ BSSGP_IE_TAG
Definition: gsm_08_18.h:148
@ BSSGP_IE_R_DEFAULT_MS
Definition: gsm_08_18.h:146
@ BSSGP_IE_BUCKET_LEAK_RATE
Definition: gsm_08_18.h:121
@ BSSGP_IE_BMAX_DEFAULT_MS
Definition: gsm_08_18.h:119
@ BSSGP_IE_BVC_BUCKET_SIZE
Definition: gsm_08_18.h:123

◆ fc_ms_ack_ies

const uint8_t fc_ms_ack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_TAG }
static

◆ fc_ms_ies

const uint8_t fc_ms_ies[]
static
Initial value:
@ BSSGP_IE_MS_BUCKET_SIZE
Definition: gsm_08_18.h:136

◆ fc_pfc_ack_ies

const uint8_t fc_pfc_ack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_TAG }
static

◆ fc_pfc_ies

const uint8_t fc_pfc_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_TAG, BSSGP_IE_PFC_FLOW_CTRL_PARAMS }
static

◆ flush_ll_ack_ies

const uint8_t flush_ll_ack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_FLUSH_ACTION }
static

◆ flush_ll_ies

const uint8_t flush_ll_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_BVCI }
static

◆ inv_trc_ies

const uint8_t inv_trc_ies[] = { BSSGP_IE_TRACE_TYPE, BSSGP_IE_TRACE_REFERENC }
static

◆ llc_disc_ies

const uint8_t llc_disc_ies[]
static
Initial value:
@ BSSGP_IE_NUM_OCT_AFF
Definition: gsm_08_18.h:155
@ BSSGP_IE_LLC_FRAMES_DISCARDED
Definition: gsm_08_18.h:133
@ BSSGP_IE_BVCI
Definition: gsm_08_18.h:122

◆ mod_bss_pfc_ack_ies

const uint8_t mod_bss_pfc_ack_ies[]
static

◆ mod_bss_pfc_ies

const uint8_t mod_bss_pfc_ies[]
static

◆ ms_reg_enq_ies

const uint8_t ms_reg_enq_ies[] = { BSSGP_IE_IMSI }
static

◆ ms_reg_enq_res_ies

const uint8_t ms_reg_enq_res_ies[] = { BSSGP_IE_IMSI }
static

◆ osmo_pdef_bssgp

const struct osmo_tlv_prot_def osmo_pdef_bssgp

◆ overload_ies

const uint8_t overload_ies[] = { BSSGP_IE_PRIO_CLASS_IND }
static

◆ pag_cs_ies

const uint8_t pag_cs_ies[] = { BSSGP_IE_IMSI, BSSGP_IE_DRX_PARAMS }
static

◆ pag_ps_ies

const uint8_t pag_ps_ies[] = { BSSGP_IE_IMSI, BSSGP_IE_QOS_PROFILE }
static

◆ ps_ho_cancel_ies

const uint8_t ps_ho_cancel_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_CAUSE, BSSGP_IE_CELL_ID }
static

◆ ps_ho_compl_ack_ies

const uint8_t ps_ho_compl_ack_ies[] = { BSSGP_IE_TLLI }
static

◆ ps_ho_compl_ies

const uint8_t ps_ho_compl_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_IMSI }
static

◆ ps_ho_request_ack_ies

const uint8_t ps_ho_request_ack_ies[]
static
Initial value:
@ BSSGP_IE_TBSS_TO_SBSS_TR_CONT
Definition: gsm_08_18.h:201
@ BSSGP_IE_LIST_OF_SETUP_PFC
Definition: gsm_08_18.h:204

◆ ps_ho_request_ies

const uint8_t ps_ho_request_ies[]
static
Initial value:
@ BSSGP_IE_PFC_TO_BE_SETUP_LIST
Definition: gsm_08_18.h:203
@ BSSGP_IE_IMSI
Definition: gsm_08_18.h:131
@ BSSGP_IE_CAUSE
Definition: gsm_08_18.h:125
@ BSSGP_IE_CELL_ID
Definition: gsm_08_18.h:126
@ BSSGP_IE_SBSS_TO_TBSS_TR_CONT
Definition: gsm_08_18.h:200

◆ ps_ho_request_nack_ies

const uint8_t ps_ho_request_nack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_CAUSE }
static

◆ ps_ho_required_ack_ies

const uint8_t ps_ho_required_ack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_LIST_OF_SETUP_PFC }
static

◆ ps_ho_required_ies

const uint8_t ps_ho_required_ies[]
static
Initial value:
@ BSSGP_IE_ACTIVE_PFC_LIST
Definition: gsm_08_18.h:219

◆ ps_ho_required_nack_ies

const uint8_t ps_ho_required_nack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_CAUSE }
static

◆ ra_cap_ies

const uint8_t ra_cap_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_MS_RADIO_ACCESS_CAP }
static

◆ ra_cap_upd_ack_ies

const uint8_t ra_cap_upd_ack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_TAG, BSSGP_IE_RA_CAP_UPD_CAUSE }
static

◆ ra_cap_upd_ies

const uint8_t ra_cap_upd_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_TAG }
static

◆ rad_sts_ies

const uint8_t rad_sts_ies[] = { BSSGP_IE_RADIO_CAUSE }
static

◆ reset_ack_ies

const uint8_t reset_ack_ies[] = { BSSGP_IE_BVCI }
static

◆ reset_ies

const uint8_t reset_ies[] = { BSSGP_IE_BVCI, BSSGP_IE_CAUSE }
static

◆ resume_ack_ies

const uint8_t resume_ack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_ROUTEING_AREA }
static

◆ resume_ies

const uint8_t resume_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_ROUTEING_AREA, BSSGP_IE_SUSPEND_REF_NR }
static

◆ resume_nack_ies

const uint8_t resume_nack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_ROUTEING_AREA }
static

◆ rinfo_ack_ies

const uint8_t rinfo_ack_ies[] = { BSSGP_IE_RIM_ROUTING_INFO, BSSGP_IE_RI_ACK_RIM_CONTAINER }
static

◆ rinfo_aerr_ies

const uint8_t rinfo_aerr_ies[] = { BSSGP_IE_RIM_ROUTING_INFO, BSSGP_IE_RI_APP_ERROR_RIM_CONT }
static

◆ rinfo_err_ies

const uint8_t rinfo_err_ies[] = { BSSGP_IE_RIM_ROUTING_INFO, BSSGP_IE_RI_ERROR_RIM_COINTAINER }
static

◆ rinfo_ies

const uint8_t rinfo_ies[] = { BSSGP_IE_RIM_ROUTING_INFO, BSSGP_IE_RI_RIM_CONTAINER }
static

◆ rinfo_req_ies

const uint8_t rinfo_req_ies[] = { BSSGP_IE_RIM_ROUTING_INFO, BSSGP_IE_RI_REQ_RIM_CONTAINER }
static

◆ status_ies

const uint8_t status_ies[] = { BSSGP_IE_CAUSE }
static

◆ suspend_ack_ies

const uint8_t suspend_ack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_ROUTEING_AREA, BSSGP_IE_SUSPEND_REF_NR }
static

◆ suspend_ies

const uint8_t suspend_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_ROUTEING_AREA }
static

◆ suspend_nack_ies

const uint8_t suspend_nack_ies[] = { BSSGP_IE_TLLI, BSSGP_IE_ROUTEING_AREA }
static

◆ ul_mb_ud_ies

const uint8_t ul_mb_ud_ies[] = { BSSGP_IE_PDU_LIFETIME, BSSGP_IE_TMGI, BSSGP_IE_LLC_PDU }
static

◆ ul_ud_ies

const uint8_t ul_ud_ies[] = { BSSGP_IE_CELL_ID }
static

◆ unblock_ack_ies

const uint8_t unblock_ack_ies[] = { BSSGP_IE_BVCI }
static

◆ unblock_ies

const uint8_t unblock_ies[] = { BSSGP_IE_BVCI }
static