aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openbsc/include/openbsc/gprs_gb_parse.h3
-rw-r--r--openbsc/src/gprs/gprs_gb_parse.c30
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";
+}