diff options
-rw-r--r-- | include/osmocom/sgsn/gprs_sgsn.h | 6 | ||||
-rw-r--r-- | src/sgsn/gprs_gmm.c | 4 | ||||
-rw-r--r-- | src/sgsn/gprs_llc.c | 27 |
3 files changed, 26 insertions, 11 deletions
diff --git a/include/osmocom/sgsn/gprs_sgsn.h b/include/osmocom/sgsn/gprs_sgsn.h index 0a52a7df5..0886ce7e9 100644 --- a/include/osmocom/sgsn/gprs_sgsn.h +++ b/include/osmocom/sgsn/gprs_sgsn.h @@ -257,15 +257,15 @@ static inline bool sgsn_mm_ctx_is_authenticated(struct sgsn_mm_ctx *ctx) LOGP(DMM, level, "UE(%p){NOTSUPPORTED} " fmt, ue, ## args) #endif -#define LOGGBP(llme, level, fmt, args...) \ - LOGP(DMM, level, "LLME(%08x/%08x){%s} " fmt, (llme)->old_tlli, \ +#define LOGGBP(llme, category, level, fmt, args...) \ + LOGP(category, level, "LLME(%08x/%08x){%s} " fmt, (llme)->old_tlli, \ (llme)->tlli, get_value_string_or_null(gprs_llc_llme_state_names, (llme)->state), ## args); #define LOGGBIUP(llme, msg, level, fmt, args...) \ do { \ struct ranap_ue_conn_ctx * _ue; \ if (llme) { \ - LOGGBP(llme, level, fmt, ## args); \ + LOGGBP(llme, DMM, level, fmt, ## args); \ } else if ((msg) && (_ue = MSG_IU_UE_CTX(msg))) { \ LOGIUP(_ue, level, fmt, ## args); \ } else { OSMO_ASSERT(0); } \ diff --git a/src/sgsn/gprs_gmm.c b/src/sgsn/gprs_gmm.c index 17daa7dcd..7a097608e 100644 --- a/src/sgsn/gprs_gmm.c +++ b/src/sgsn/gprs_gmm.c @@ -1625,7 +1625,7 @@ static int gsm48_rx_gmm_ra_upd_req(struct sgsn_mm_ctx *mmctx, struct msgb *msg, if (llme) { /* send a XID reset to re-set all LLC sequence numbers * in the MS */ - LOGGBP(llme, LOGL_NOTICE, "LLC XID RESET\n"); + LOGGBP(llme, DMM, LOGL_NOTICE, "LLC XID RESET\n"); gprs_llgmm_reset(llme); } /* The MS has to perform GPRS attach */ @@ -1905,7 +1905,7 @@ int gsm0408_rcv_gmm(struct sgsn_mm_ctx *mmctx, struct msgb *msg, if (llme && !mmctx && gh->msg_type != GSM48_MT_GMM_ATTACH_REQ && gh->msg_type != GSM48_MT_GMM_RA_UPD_REQ) { - LOGGBP(llme, LOGL_NOTICE, "Cannot handle GMM for unknown MM CTX\n"); + LOGGBP(llme, DMM, LOGL_NOTICE, "Cannot handle GMM for unknown MM CTX\n"); /* 4.7.10 */ if (gh->msg_type == GSM48_MT_GMM_STATUS) { /* TLLI unassignment */ diff --git a/src/sgsn/gprs_llc.c b/src/sgsn/gprs_llc.c index 2a27da844..244d22c67 100644 --- a/src/sgsn/gprs_llc.c +++ b/src/sgsn/gprs_llc.c @@ -22,6 +22,7 @@ #include <errno.h> #include <stdint.h> #include <stdbool.h> +#include <inttypes.h> #include <osmocom/core/msgb.h> #include <osmocom/core/linuxlist.h> @@ -528,7 +529,7 @@ static struct gprs_llc_lle *lle_for_rx_by_tlli_sapi(const uint32_t tlli, struct gprs_llc_llme *llme; /* FIXME: don't use the TLLI but the 0xFFFF unassigned? */ llme = llme_alloc(tlli); - LOGP(DLLC, LOGL_NOTICE, "LLC RX: unknown TLLI 0x%08x, " + LOGGBP(llme, DLLC, LOGL_NOTICE, "LLC RX: unknown TLLI 0x%08x, " "creating LLME on the fly\n", tlli); lle = &llme->lle[sapi]; return lle; @@ -1047,6 +1048,10 @@ int gprs_llgmm_assign(struct gprs_llc_llme *llme, uint32_t old_tlli, uint32_t new_tlli) { unsigned int i; + bool free = false; + + LOGGBP(llme, DLLC, LOGL_NOTICE, "LLGM Assign pre (%08x => %08x)\n", + old_tlli, new_tlli); if (old_tlli == TLLI_UNASSIGNED && new_tlli != TLLI_UNASSIGNED) { /* TLLI Assignment 8.3.1 */ @@ -1087,10 +1092,16 @@ int gprs_llgmm_assign(struct gprs_llc_llme *llme, struct gprs_llc_lle *l = &llme->lle[i]; l->state = GPRS_LLES_UNASSIGNED; } - llme_free(llme); + free = true; } else return -EINVAL; + LOGGBP(llme, DLLC, LOGL_NOTICE, "LLGM Assign post (%08x => %08x)\n", + old_tlli, new_tlli); + + if (free) + llme_free(llme); + return 0; } @@ -1109,11 +1120,13 @@ int gprs_llgmm_reset(struct gprs_llc_llme *llme) int xid_bytes_len, rc; uint8_t *xid; - LOGP(DLLC, LOGL_NOTICE, "LLGM Reset\n"); + LOGGBP(llme, DLLC, LOGL_NOTICE, "LLGM Reset\n"); rc = osmo_get_rand_id((uint8_t *) &llme->iov_ui, 4); if (rc < 0) { - LOGP(DLLC, LOGL_ERROR, "osmo_get_rand_id() failed for LLC XID reset: %s\n", strerror(-rc)); + LOGGBP(llme, DLLC, LOGL_ERROR, + "osmo_get_rand_id() failed for LLC XID reset: %s\n", + strerror(-rc)); return rc; } @@ -1144,11 +1157,13 @@ int gprs_llgmm_reset_oldmsg(struct msgb* oldmsg, uint8_t sapi, int xid_bytes_len, rc; uint8_t *xid; - LOGP(DLLC, LOGL_NOTICE, "LLGM Reset\n"); + LOGGBP(llme, DLLC, LOGL_NOTICE, "LLGM Reset (SAPI=%" PRIu8 ")\n", sapi); rc = osmo_get_rand_id((uint8_t *) &llme->iov_ui, 4); if (rc < 0) { - LOGP(DLLC, LOGL_ERROR, "osmo_get_rand_id() failed for LLC XID reset: %s\n", strerror(-rc)); + LOGGBP(llme, DLLC, LOGL_ERROR, + "osmo_get_rand_id() failed for LLC XID reset: %s\n", + strerror(-rc)); return rc; } |