diff options
-rw-r--r-- | openbsc/include/openbsc/gprs_gb_parse.h | 3 | ||||
-rw-r--r-- | openbsc/src/gprs/gprs_gb_parse.c | 30 |
2 files changed, 29 insertions, 4 deletions
diff --git a/openbsc/include/openbsc/gprs_gb_parse.h b/openbsc/include/openbsc/gprs_gb_parse.h index 6ab105922..090672b74 100644 --- a/openbsc/include/openbsc/gprs_gb_parse.h +++ b/openbsc/include/openbsc/gprs_gb_parse.h @@ -51,5 +51,8 @@ int gprs_gb_parse_llc(uint8_t *llc, size_t llc_len, int gprs_gb_parse_bssgp(uint8_t *bssgp, size_t bssgp_len, struct gprs_gb_parse_context *parse_ctx); +const char *gprs_gb_message_name(const struct gprs_gb_parse_context *parse_ctx, + const char *default_msg_name); + void gprs_gb_log_parse_context(struct gprs_gb_parse_context *parse_ctx, const char *default_msg_name); diff --git a/openbsc/src/gprs/gprs_gb_parse.c b/openbsc/src/gprs/gprs_gb_parse.c index 1978bd4bf..17d4b9c19 100644 --- a/openbsc/src/gprs/gprs_gb_parse.c +++ b/openbsc/src/gprs/gprs_gb_parse.c @@ -564,15 +564,15 @@ int gprs_gb_parse_bssgp(uint8_t *bssgp, size_t bssgp_len, data_len = bssgp_len - sizeof(*bgph); } - if (bssgp_tlv_parse(tp, data, data_len) < 0) - return 0; - parse_ctx->pdu_type = pdu_type; parse_ctx->bud_hdr = budh; parse_ctx->bgp_hdr = bgph; parse_ctx->bssgp_data = data; parse_ctx->bssgp_data_len = data_len; + if (bssgp_tlv_parse(tp, data, data_len) < 0) + return 0; + if (budh) parse_ctx->tlli_enc = (uint8_t *)&budh->tlli; @@ -626,7 +626,7 @@ int gprs_gb_parse_bssgp(uint8_t *bssgp, size_t bssgp_len, void gprs_gb_log_parse_context(struct gprs_gb_parse_context *parse_ctx, const char *default_msg_name) { - const char *msg_name = default_msg_name; + const char *msg_name; const char *sep = ""; if (!parse_ctx->tlli_enc && @@ -635,6 +635,8 @@ void gprs_gb_log_parse_context(struct gprs_gb_parse_context *parse_ctx, !parse_ctx->imsi) return; + msg_name = gprs_gb_message_name(parse_ctx, default_msg_name); + if (parse_ctx->llc_msg_name) msg_name = parse_ctx->llc_msg_name; @@ -713,3 +715,23 @@ void gprs_gb_log_parse_context(struct gprs_gb_parse_context *parse_ctx, LOGPC(DGPRS, LOGL_DEBUG, "\n"); } +const char *gprs_gb_message_name(const struct gprs_gb_parse_context *parse_ctx, + const char *default_msg_name) +{ + if (parse_ctx->llc_msg_name) + return parse_ctx->llc_msg_name; + + if (parse_ctx->g48_hdr) + return "GMM"; + + if (parse_ctx->llc) + return "LLC"; + + if (parse_ctx->bud_hdr) + return "BSSGP-UNITDATA"; + + if (parse_ctx->bgp_hdr) + return "BSSGP"; + + return "unknown"; +} |