diff options
Diffstat (limited to 'include/osmocom/gprs/gprs_bssgp2.h')
-rw-r--r-- | include/osmocom/gprs/gprs_bssgp2.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/include/osmocom/gprs/gprs_bssgp2.h b/include/osmocom/gprs/gprs_bssgp2.h new file mode 100644 index 00000000..53e76e3a --- /dev/null +++ b/include/osmocom/gprs/gprs_bssgp2.h @@ -0,0 +1,72 @@ +#pragma once +#include <stdint.h> + +#include <osmocom/gprs/protocol/gsm_08_18.h> +#include <osmocom/gprs/gprs_ns2.h> + +struct bssgp2_flow_ctrl; +struct gprs_ns2_inst; +struct gprs_ra_id; +struct msgb; + +struct bssgp2_flow_ctrl { + uint8_t tag; + /* maximum bucket size (Bmax) in bytes */ + uint64_t bucket_size_max; + /*! bucket leak rate in _bytes_ per second */ + uint64_t bucket_leak_rate; + /* percentage how full the given bucket is */ + uint8_t bucket_full_ratio; + bool bucket_full_ratio_present; + union { + /*! FC-BVC specifi members */ + struct { + /*! default maximum bucket size per MS in bytes */ + uint64_t bmax_default_ms; + /*! default bucket leak rate (R) for MS flow control bucket */ + uint64_t r_default_ms; + + /*! average milliseconds of queueing delay for a BVC */ + uint32_t measurement; + bool measurement_present; + } bvc; + /*! FC-MS specifi members */ + struct { + /*! TLLI of the MS */ + uint32_t tlli; + } ms; + } u; +}; + + +int bssgp2_nsi_tx_ptp(struct gprs_ns2_inst *nsi, uint16_t nsei, uint16_t bvci, + struct msgb *msg, uint32_t lsp); + +int bssgp2_nsi_tx_sig(struct gprs_ns2_inst *nsi, uint16_t nsei, struct msgb *msg, uint32_t lsp); + +struct msgb *bssgp2_enc_bvc_block(uint16_t bvci, enum gprs_bssgp_cause cause); + +struct msgb *bssgp2_enc_bvc_block_ack(uint16_t bvci); + +struct msgb *bssgp2_enc_bvc_unblock(uint16_t bvci); + +struct msgb *bssgp2_enc_bvc_unblock_ack(uint16_t bvci); + +struct msgb *bssgp2_enc_bvc_reset(uint16_t bvci, enum gprs_bssgp_cause cause, + const struct gprs_ra_id *ra_id, uint16_t cell_id, + const uint8_t *feat_bm, const uint8_t *ext_feat_bm); + +struct msgb *bssgp2_enc_bvc_reset_ack(uint16_t bvci, const struct gprs_ra_id *ra_id, uint16_t cell_id, + const uint8_t *feat_bm, const uint8_t *ext_feat_bm); + +struct msgb *bssgp2_enc_flush_ll(uint32_t tlli, uint16_t old_bvci, + const uint16_t *new_bvci, const uint16_t *nsei); +struct msgb *bssgp2_enc_status(uint8_t cause, const uint16_t *bvci, const struct msgb *orig_msg, uint16_t max_pdu_len); + + +int bssgp2_dec_fc_bvc(struct bssgp2_flow_ctrl *fc, const struct tlv_parsed *tp); +struct msgb *bssgp2_enc_fc_bvc(const struct bssgp2_flow_ctrl *fc, enum bssgp_fc_granularity *gran); +struct msgb *bssgp2_enc_fc_bvc_ack(uint8_t tag); +int bssgp2_dec_fc_ms(struct bssgp2_flow_ctrl *fc, struct tlv_parsed *tp); +struct msgb *bssgp2_enc_fc_ms(const struct bssgp2_flow_ctrl *fc, enum bssgp_fc_granularity *gran); +struct msgb *bssgp2_enc_fc_ms_ack(uint32_t tlli, uint8_t tag); |