diff options
Diffstat (limited to 'include/osmocom/gprs/gprs_bssgp.h')
-rw-r--r-- | include/osmocom/gprs/gprs_bssgp.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/include/osmocom/gprs/gprs_bssgp.h b/include/osmocom/gprs/gprs_bssgp.h index dfbd9b73..70770449 100644 --- a/include/osmocom/gprs/gprs_bssgp.h +++ b/include/osmocom/gprs/gprs_bssgp.h @@ -10,6 +10,7 @@ #include <osmocom/gsm/prim.h> #include <osmocom/gprs/protocol/gsm_08_18.h> +#include <osmocom/gprs/protocol/gsm_24_301.h> /* gprs_bssgp_util.c */ @@ -175,6 +176,37 @@ uint16_t bssgp_parse_cell_id(struct gprs_ra_id *raid, const uint8_t *buf); int bssgp_create_cell_id(uint8_t *buf, const struct gprs_ra_id *raid, uint16_t cid); +enum bssgp_rim_routing_info_discr { + BSSGP_RIM_ROUTING_INFO_GERAN, + BSSGP_RIM_ROUTING_INFO_UTRAN, + BSSGP_RIM_ROUTING_INFO_EUTRAN, +}; + +/*! BSSGP RIM Routing information, see also 3GPP TS 48.018, section 11.3.70 */ +struct bssgp_rim_routing_info { + enum bssgp_rim_routing_info_discr discr; + union { + struct { + struct gprs_ra_id raid; + uint16_t cid; + } geran; + struct { + struct gprs_ra_id raid; + uint16_t rncid; + } utran; + struct { + struct osmo_eutran_tai tai; + /* See also 3GPP TS 36.413 9.2.1.37 and 3GPP TS 36.401 */ + uint8_t global_enb_id[8]; + uint8_t global_enb_id_len; + } eutran; + }; +}; + +int bssgp_parse_rim_ri(struct bssgp_rim_routing_info *ri, const uint8_t *buf, + unsigned int len); +int bssgp_create_rim_ri(uint8_t *buf, const struct bssgp_rim_routing_info *ri); + /* Wrapper around TLV parser to parse BSSGP IEs */ static inline int bssgp_tlv_parse(struct tlv_parsed *tp, const uint8_t *buf, int len) { |