libosmogb 1.11.0.2-4150.202502212026
Osmocom Gb library
|
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/core/rate_ctr.h>
#include <osmocom/gsm/tlv.h>
#include <osmocom/core/talloc.h>
#include <osmocom/gprs/gprs_bssgp.h>
#include <osmocom/gprs/gprs_bssgp_bss.h>
#include <osmocom/gprs/gprs_ns.h>
#include "gprs_bssgp_internal.h"
Macros | |
#define | GSM_IMSI_LENGTH 17 |
GPRS BSSGP protocol implementation as per 3GPP TS 08.18.
#define GSM_IMSI_LENGTH 17 |
References BSSGP_IE_ROUTEING_AREA, gsm48_encode_ra(), msg, and ra_id.
Referenced by bssgp_tx_paging(), bssgp_tx_resume(), bssgp_tx_resume_ack(), bssgp_tx_resume_nack(), bssgp_tx_suspend(), bssgp_tx_suspend_ack(), and bssgp_tx_suspend_nack().
References BSSGP_IE_TLLI, msg, osmo_htonl, and tlli.
Referenced by bssgp_tx_fc_ms(), bssgp_tx_flush_ll_ack(), bssgp_tx_llc_discarded(), bssgp_tx_ra_capa_upd(), bssgp_tx_radio_status_tlli(), bssgp_tx_resume(), bssgp_tx_resume_ack(), bssgp_tx_resume_nack(), bssgp_tx_suspend(), bssgp_tx_suspend_ack(), and bssgp_tx_suspend_nack().
int bssgp_rx_paging | ( | struct bssgp_paging_info * | pinfo, |
struct msgb * | msg | ||
) |
References BSSGP_IE_BSS_AREA_ID, BSSGP_IE_BVCI, BSSGP_IE_DRX_PARAMS, BSSGP_IE_IMSI, BSSGP_IE_LOCATION_AREA, BSSGP_IE_QOS_PROFILE, BSSGP_IE_ROUTEING_AREA, BSSGP_IE_TMSI, BSSGP_PAGING_BSS_AREA, BSSGP_PAGING_BVCI, BSSGP_PAGING_CS, BSSGP_PAGING_LOCATION_AREA, BSSGP_PAGING_PS, BSSGP_PAGING_ROUTEING_AREA, BSSGP_PDUT_PAGING_CS, BSSGP_PDUT_PAGING_PS, bssgp_tlv_parse(), bssgp_paging_info::bvci, bssgp_normal_hdr::data, bssgp_paging_info::drx_params, gsm48_mi_to_string(), gsm48_parse_ra(), GSM_IMSI_LENGTH, bssgp_paging_info::imsi, bssgp_paging_info::mode, msg, msgb_bssgp_len, msgb_bssgph, bssgp_normal_hdr::pdu_type, bssgp_paging_info::ptmsi, bssgp_paging_info::qos, bssgp_paging_info::raid, bssgp_paging_info::scope, TLVP_LEN, TLVP_PRES_LEN, TLVP_PRESENT, and TLVP_VAL.
int bssgp_tx_bvc_block | ( | struct bssgp_bvc_ctx * | bctx, |
uint8_t | cause | ||
) |
Transmit a BVC-BLOCK message (Chapter 10.4.8)
References bssgp_cause_str(), BSSGP_IE_BVCI, BSSGP_IE_CAUSE, bssgp_msgb_alloc(), bssgp_ns_send, bssgp_ns_send_data, BSSGP_PDUT_BVC_BLOCK, bssgp_bvc_ctx::bvci, cause, DLBSSGP, LOGL_NOTICE, LOGP, msg, msgb_bvci, msgb_nsei, bssgp_bvc_ctx::nsei, osmo_htons, and bssgp_normal_hdr::pdu_type.
int bssgp_tx_bvc_reset | ( | struct bssgp_bvc_ctx * | bctx, |
uint16_t | bvci, | ||
uint8_t | cause | ||
) |
References bssgp_tx_bvc_reset2(), bvci, BVCI_PTM, BVCI_SIGNALLING, and cause.
Referenced by bssgp_tx_bvc_ptp_reset(), and DEFUN().
int bssgp_tx_bvc_reset2 | ( | struct bssgp_bvc_ctx * | bctx, |
uint16_t | bvci, | ||
uint8_t | cause, | ||
bool | add_cell_id | ||
) |
Transmit a BVC-RESET message (Chapter 10.4.12)
References bssgp_tx_bvc_reset_nsei_bvci(), bvci, cause, bssgp_bvc_ctx::cell_id, bssgp_bvc_ctx::nsei, and bssgp_bvc_ctx::ra_id.
Referenced by bssgp_tx_bvc_reset().
int bssgp_tx_bvc_unblock | ( | struct bssgp_bvc_ctx * | bctx | ) |
Transmit a BVC-UNBLOCK message (Chapter 10.4.10)
References BSSGP_IE_BVCI, bssgp_msgb_alloc(), bssgp_ns_send, bssgp_ns_send_data, BSSGP_PDUT_BVC_UNBLOCK, bssgp_bvc_ctx::bvci, DLBSSGP, LOGL_NOTICE, LOGP, msg, msgb_bvci, msgb_nsei, bssgp_bvc_ctx::nsei, osmo_htons, and bssgp_normal_hdr::pdu_type.
int bssgp_tx_fc_bvc | ( | struct bssgp_bvc_ctx * | bctx, |
uint8_t | tag, | ||
uint32_t | bucket_size, | ||
uint32_t | bucket_leak_rate, | ||
uint32_t | bmax_default_ms, | ||
uint32_t | r_default_ms, | ||
uint8_t * | bucket_full_ratio, | ||
uint32_t * | queue_delay_ms | ||
) |
Transmit a FLOW_CONTROL-BVC (Chapter 10.4.4)
[in] | bctx | BVC Context |
[in] | tag | Additional tag to identify acknowledge |
[in] | bucket_size | Maximum bucket size in octets |
[in] | bucket_leak_rate | Bucket leak rate in octets/sec |
[in] | bmax_default_ms | Maximum bucket size default for MS |
[in] | r_default_ms | Bucket leak rate default for MS in octets/sec |
[in] | bucket_full_ratio | Ratio (in percent) of queue filling |
[in] | queue_delay_ms | Average queuing delay in milliseconds |
References BSSGP_IE_BMAX_DEFAULT_MS, BSSGP_IE_BUCKET_FULL_RATIO, BSSGP_IE_BUCKET_LEAK_RATE, BSSGP_IE_BVC_BUCKET_SIZE, BSSGP_IE_BVC_MEASUREMENT, BSSGP_IE_R_DEFAULT_MS, BSSGP_IE_TAG, bssgp_msgb_alloc(), bssgp_ns_send, bssgp_ns_send_data, BSSGP_PDUT_FLOW_CONTROL_BVC, bssgp_bvc_ctx::bvci, msg, msgb_bvci, msgb_nsei, bssgp_bvc_ctx::nsei, osmo_htons, and bssgp_normal_hdr::pdu_type.
int bssgp_tx_fc_ms | ( | struct bssgp_bvc_ctx * | bctx, |
uint32_t | tlli, | ||
uint8_t | tag, | ||
uint32_t | ms_bucket_size, | ||
uint32_t | bucket_leak_rate, | ||
uint8_t * | bucket_full_ratio | ||
) |
Transmit a FLOW_CONTROL-MS (Chapter 10.4.6)
[in] | bctx | BVC Context |
[in] | tlli | TLLI to identify MS |
[in] | tag | Additional tag to identify acknowledge |
[in] | ms_bucket_size | Maximum bucket size in octets |
[in] | bucket_leak_rate | Bucket leak rate in octets/sec |
[in] | bucket_full_ratio | Ratio (in percent) of queue filling |
References BSSGP_IE_BUCKET_FULL_RATIO, BSSGP_IE_BUCKET_LEAK_RATE, BSSGP_IE_MS_BUCKET_SIZE, BSSGP_IE_TAG, bssgp_msgb_alloc(), bssgp_msgb_tlli_put(), bssgp_ns_send, bssgp_ns_send_data, BSSGP_PDUT_FLOW_CONTROL_MS, bssgp_bvc_ctx::bvci, msg, msgb_bvci, msgb_nsei, bssgp_bvc_ctx::nsei, bssgp_normal_hdr::pdu_type, and tlli.
int bssgp_tx_flush_ll_ack | ( | struct bssgp_bvc_ctx * | bctx, |
uint32_t | tlli, | ||
uint8_t | action, | ||
uint16_t | bvci_new, | ||
uint32_t | num_octets | ||
) |
Transmit FLUSH-LL-ACK (Chapter 10.4.2)
References BSSGP_IE_BVCI, BSSGP_IE_FLUSH_ACTION, BSSGP_IE_NUM_OCT_AFF, bssgp_msgb_alloc(), bssgp_msgb_tlli_put(), bssgp_ns_send, bssgp_ns_send_data, BSSGP_PDUT_FLUSH_LL_ACK, msg, msgb_bvci, msgb_nsei, bssgp_bvc_ctx::nsei, osmo_htonl, osmo_htons, bssgp_normal_hdr::pdu_type, and tlli.
int bssgp_tx_llc_discarded | ( | struct bssgp_bvc_ctx * | bctx, |
uint32_t | tlli, | ||
uint8_t | num_frames, | ||
uint32_t | num_octets | ||
) |
Transmit LLC-DISCARDED (Chapter 10.4.3)
References BSSGP_IE_BVCI, BSSGP_IE_LLC_FRAMES_DISCARDED, BSSGP_IE_NUM_OCT_AFF, bssgp_msgb_alloc(), bssgp_msgb_tlli_put(), bssgp_ns_send, bssgp_ns_send_data, BSSGP_PDUT_LLC_DISCARD, bssgp_bvc_ctx::bvci, DLBSSGP, LOGL_NOTICE, LOGP, msg, msgb_bvci, msgb_nsei, bssgp_bvc_ctx::nsei, osmo_htonl, osmo_htons, bssgp_normal_hdr::pdu_type, and tlli.
int bssgp_tx_ra_capa_upd | ( | struct bssgp_bvc_ctx * | bctx, |
uint32_t | tlli, | ||
uint8_t | tag | ||
) |
Transmit RA-CAPABILITY-UPDATE (10.3.3)
References BSSGP_IE_TAG, bssgp_msgb_alloc(), bssgp_msgb_tlli_put(), bssgp_ns_send, bssgp_ns_send_data, BSSGP_PDUT_RA_CAPA_UDPATE, bssgp_bvc_ctx::bvci, DLBSSGP, LOGL_NOTICE, LOGP, msg, msgb_bvci, msgb_nsei, bssgp_bvc_ctx::nsei, bssgp_normal_hdr::pdu_type, and tlli.
Transmit RADIO-STATUS for IMSI (10.3.5)
References BSSGP_IE_IMSI, cause, common_tx_radio_status(), common_tx_radio_status2(), DLBSSGP, gsm48_generate_mid_from_imsi(), GSM48_MID_MAX_SIZE, LOGL_NOTICE, LOGPC, mi, msg, and OSMO_ASSERT.
int bssgp_tx_radio_status_tlli | ( | struct bssgp_bvc_ctx * | bctx, |
uint8_t | cause, | ||
uint32_t | tlli | ||
) |
Transmit RADIO-STATUS for TLLI (10.3.5)
References bssgp_msgb_tlli_put(), cause, common_tx_radio_status(), common_tx_radio_status2(), DLBSSGP, LOGL_NOTICE, LOGPC, msg, and tlli.
int bssgp_tx_radio_status_tmsi | ( | struct bssgp_bvc_ctx * | bctx, |
uint8_t | cause, | ||
uint32_t | tmsi | ||
) |
Transmit RADIO-STATUS for TMSI (10.3.5)
References BSSGP_IE_TMSI, cause, common_tx_radio_status(), common_tx_radio_status2(), DLBSSGP, LOGL_NOTICE, LOGPC, msg, and osmo_htonl.
int bssgp_tx_resume | ( | uint16_t | nsei, |
uint32_t | tlli, | ||
const struct gprs_ra_id * | ra_id, | ||
uint8_t | suspend_ref | ||
) |
GMM-RESUME.req (Chapter 10.3.9)
References BSSGP_IE_SUSPEND_REF_NR, bssgp_msgb_alloc(), bssgp_msgb_ra_put(), bssgp_msgb_tlli_put(), bssgp_ns_send, bssgp_ns_send_data, BSSGP_PDUT_RESUME, DLBSSGP, LOGL_NOTICE, LOGP, msg, msgb_bvci, msgb_nsei, nsei, bssgp_normal_hdr::pdu_type, ra_id, and tlli.
GMM-SUSPEND.req (Chapter 10.3.6)
References bssgp_msgb_alloc(), bssgp_msgb_ra_put(), bssgp_msgb_tlli_put(), bssgp_ns_send, bssgp_ns_send_data, BSSGP_PDUT_SUSPEND, DLBSSGP, LOGL_NOTICE, LOGP, msg, msgb_bvci, msgb_nsei, nsei, bssgp_normal_hdr::pdu_type, ra_id, and tlli.
int bssgp_tx_ul_ud | ( | struct bssgp_bvc_ctx * | bctx, |
uint32_t | tlli, | ||
const uint8_t * | qos_profile, | ||
struct msgb * | llc_pdu | ||
) |
RL-UL-UNITDATA.req (Chapter 10.2.2)
[in] | bctx | BVC Context |
[in] | tlli | TLLI to identify MS |
[in] | qos_profile | Pointer to three octests of QoS profile |
[in] | llc_pdu | msgb pointer containing UL Unitdata IE payload |
References bssgp_create_cell_id(), BSSGP_CTR_BYTES_OUT, BSSGP_CTR_PKTS_OUT, BSSGP_IE_ALIGNMENT, BSSGP_IE_CELL_ID, bssgp_ns_send, bssgp_ns_send_data, BSSGP_PDUT_UL_UNITDATA, bssgp_bvc_ctx::bvci, bssgp_bvc_ctx::cell_id, bssgp_bvc_ctx::ctrg, msg, msgb_bvci, msgb_nsei, bssgp_bvc_ctx::nsei, osmo_htonl, bssgp_ud_hdr::pdu_type, qos_profile, bssgp_ud_hdr::qos_profile, bssgp_bvc_ctx::ra_id, rate_ctr_add(), rate_ctr_group_get_ctr(), and bssgp_ud_hdr::tlli.
|
static |
References bssgp_msgb_alloc(), BSSGP_PDUT_RADIO_STATUS, bssgp_bvc_ctx::bvci, DLBSSGP, LOGL_NOTICE, LOGP, msg, msgb_bvci, msgb_nsei, bssgp_bvc_ctx::nsei, and bssgp_normal_hdr::pdu_type.
Referenced by bssgp_tx_radio_status_imsi(), bssgp_tx_radio_status_tlli(), and bssgp_tx_radio_status_tmsi().
References bssgp_cause_str(), BSSGP_IE_CAUSE, bssgp_ns_send, bssgp_ns_send_data, cause, DLBSSGP, LOGL_NOTICE, LOGPC, and msg.
Referenced by bssgp_tx_radio_status_imsi(), bssgp_tx_radio_status_tlli(), and bssgp_tx_radio_status_tmsi().