diff options
Diffstat (limited to 'openbsc/include/openbsc/gprs_gb_parse.h')
-rw-r--r-- | openbsc/include/openbsc/gprs_gb_parse.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/gprs_gb_parse.h b/openbsc/include/openbsc/gprs_gb_parse.h new file mode 100644 index 000000000..e5ef4ef43 --- /dev/null +++ b/openbsc/include/openbsc/gprs_gb_parse.h @@ -0,0 +1,52 @@ +#pragma once + +#include <openbsc/gprs_llc.h> + +#include <sys/types.h> + +struct gprs_gb_parse_context { + /* Pointer to protocol specific parts */ + struct gsm48_hdr *g48_hdr; + struct bssgp_normal_hdr *bgp_hdr; + struct bssgp_ud_hdr *bud_hdr; + uint8_t *bssgp_data; + size_t bssgp_data_len; + uint8_t *llc; + size_t llc_len; + + /* Extracted information */ + struct gprs_llc_hdr_parsed llc_hdr_parsed; + struct tlv_parsed bssgp_tp; + int to_bss; + uint8_t *tlli_enc; + uint8_t *imsi; + size_t imsi_len; + uint8_t *apn_ie; + size_t apn_ie_len; + uint8_t *ptmsi_enc; + uint8_t *new_ptmsi_enc; + uint8_t *raid_enc; + uint8_t *old_raid_enc; + uint8_t *bssgp_raid_enc; + uint8_t *bssgp_ptimsi; + + /* General info */ + const char *llc_msg_name; + int invalidate_tlli; + int need_decryption; + uint32_t tlli; + int pdu_type; + int old_raid_matches; +}; + +int gprs_gb_parse_dtap(uint8_t *data, size_t data_len, + struct gprs_gb_parse_context *parse_ctx) __attribute__((nonnull)); + +int gprs_gb_parse_llc(uint8_t *llc, size_t llc_len, + struct gprs_gb_parse_context *parse_ctx) __attribute__((nonnull)); + +int gprs_gb_parse_bssgp(uint8_t *bssgp, size_t bssgp_len, + struct gprs_gb_parse_context *parse_ctx) __attribute__((nonnull)); + +void gprs_gb_log_parse_context(struct gprs_gb_parse_context *parse_ctx, + const char *default_msg_name) __attribute__((nonnull(1))); |