gbproxy: Introduce new DOBJ log category; log object allocation/release

Related: OS#4472
Change-Id: I43bcbcda8667d193e7a17fd8e8e9109597b01484
diff --git a/include/osmocom/sgsn/debug.h b/include/osmocom/sgsn/debug.h
index 507b70c..da819d5 100644
--- a/include/osmocom/sgsn/debug.h
+++ b/include/osmocom/sgsn/debug.h
@@ -39,6 +39,7 @@
 	DIUCS,
 	DSIGTRAN,
 	DGTP,
+	DOBJ,
 	Debug_LastEntry,
 };
 
diff --git a/include/osmocom/sgsn/gb_proxy.h b/include/osmocom/sgsn/gb_proxy.h
index e61b991..8892cf4 100644
--- a/include/osmocom/sgsn/gb_proxy.h
+++ b/include/osmocom/sgsn/gb_proxy.h
@@ -142,6 +142,11 @@
 #define LOGPBVC(BVC, LEVEL, FMT, ARGS...) \
 	LOGPBVC_CAT(BVC, DGPRS, LEVEL, FMT, ## ARGS)
 
+#define LOGPCELL_CAT(CELL, SUBSYS, LEVEL, FMT, ARGS...) \
+	LOGP(SUBSYS, LEVEL, "CELL(%05u) " FMT, (CELL)->bvci, ## ARGS)
+#define LOGPCELL(CELL, LEVEL, FMT, ARGS...) \
+	LOGPCELL_CAT(CELL, DGPRS, LEVEL, FMT, ## ARGS)
+
 /* gb_proxy_vty .c */
 
 int gbproxy_vty_init(void);
diff --git a/src/gbproxy/gb_proxy_main.c b/src/gbproxy/gb_proxy_main.c
index 318f3dc..7ef9302 100644
--- a/src/gbproxy/gb_proxy_main.c
+++ b/src/gbproxy/gb_proxy_main.c
@@ -209,6 +209,12 @@
 		.description = "GPRS Network Service (NS)",
 		.enabled = 1, .loglevel = LOGL_INFO,
 	},
+	[DOBJ] = {
+		.name = "DOBJ",
+		.description = "GbProxy object allocation/release",
+		.enabled = 1,
+		.color = "\033[38;5;121m"
+	},
 };
 
 static const struct log_info gprs_log_info = {
diff --git a/src/gbproxy/gb_proxy_peer.c b/src/gbproxy/gb_proxy_peer.c
index ed7df32..c38b2f7 100644
--- a/src/gbproxy/gb_proxy_peer.c
+++ b/src/gbproxy/gb_proxy_peer.c
@@ -86,6 +86,11 @@
 
 	hash_add(nse->bvcs, &bvc->list, bvc->bvci);
 
+	LOGPBVC_CAT(bvc, DOBJ, LOGL_INFO, "BVC Created\n");
+
+	/* We leave allocating the bvc->fi to the caller, as the FSM details depend
+	 * on the type of BVC (SIG/PTP) and role (SGSN/BSS) */
+
         return bvc;
 }
 
@@ -96,6 +101,8 @@
 	if (!bvc)
 		return;
 
+	LOGPBVC_CAT(bvc, DOBJ, LOGL_INFO, "BVC Destroying\n");
+
 	hash_del(&bvc->list);
 
 	rate_ctr_group_free(bvc->ctrg);
@@ -167,6 +174,8 @@
 
 	hash_add(cfg->cells, &cell->list, cell->bvci);
 
+	LOGPCELL_CAT(cell, DOBJ, LOGL_INFO, "CELL Created\n");
+
 	return cell;
 }
 
@@ -201,6 +210,8 @@
 	if (!cell)
 		return;
 
+	LOGPCELL_CAT(cell, DOBJ, LOGL_INFO, "CELL Destroying\n");
+
 	/* remove from cfg.cells */
 	hash_del(&cell->list);
 
@@ -225,6 +236,8 @@
 	for (i = 0; i < ARRAY_SIZE(cell->sgsn_bvc); i++) {
 		if (!cell->sgsn_bvc[i]) {
 			cell->sgsn_bvc[i] = bvc;
+			LOGPCELL_CAT(cell, DOBJ, LOGL_DEBUG, "CELL linked to SGSN\n");
+			LOGPBVC_CAT(bvc, DOBJ, LOGL_DEBUG, "BVC linked to CELL\n");
 			return true;
 		}
 	}
@@ -255,6 +268,8 @@
 
 	hash_init(nse->bvcs);
 
+	LOGPNSE_CAT(nse, DOBJ, LOGL_INFO, "NSE Created\n");
+
 	return nse;
 }
 
@@ -267,6 +282,8 @@
 	if (!nse)
 		return;
 
+	LOGPNSE_CAT(nse, DOBJ, LOGL_INFO, "NSE Destroying\n");
+
 	hash_del(&nse->list);
 
 	hash_for_each_safe(nse->bvcs, i, tmp, bvc, list)