gbproxy_peer: Add rate counters when forwarding packets fail

Change-Id: I7fa972ba843993dac84241c04d66d5b7e2a0b40f
diff --git a/include/osmocom/gbproxy/gb_proxy.h b/include/osmocom/gbproxy/gb_proxy.h
index 0657df7..00309e1 100644
--- a/include/osmocom/gbproxy/gb_proxy.h
+++ b/include/osmocom/gbproxy/gb_proxy.h
@@ -50,6 +50,8 @@
 	GBPROX_PEER_CTR_DROPPED,
 	GBPROX_PEER_CTR_INV_NSEI,
 	GBPROX_PEER_CTR_TX_ERR,
+	GBPROX_PEER_CTR_FWD_FROM_SGSN_ERR,
+	GBPROX_PEER_CTR_FWD_FROM_BSS_ERR,
 	GBPROX_PEER_CTR_LAST,
 };
 
diff --git a/src/gb_proxy.c b/src/gb_proxy.c
index c2b958a..298e132 100644
--- a/src/gb_proxy.c
+++ b/src/gb_proxy.c
@@ -532,6 +532,9 @@
 	}
 	}
 
+	if (rc < 0)
+		rate_ctr_inc(rate_ctr_group_get_ctr(bss_bvc->ctrg, GBPROX_PEER_CTR_FWD_FROM_BSS_ERR));
+
 	return 0;
 }
 
@@ -606,8 +609,12 @@
 	default:
 		break;
 	}
-	return gbprox_relay2peer(msg, bss_bvc, bss_bvc->bvci);
+	rc = gbprox_relay2peer(msg, bss_bvc, bss_bvc->bvci);
 
+	if (rc < 0)
+		rate_ctr_inc(rate_ctr_group_get_ctr(bss_bvc->ctrg, GBPROX_PEER_CTR_FWD_FROM_SGSN_ERR));
+
+	return rc;
 }
 
 /***********************************************************************
diff --git a/src/gb_proxy_peer.c b/src/gb_proxy_peer.c
index 74bde3a..1e300ad 100644
--- a/src/gb_proxy_peer.c
+++ b/src/gb_proxy_peer.c
@@ -39,11 +39,13 @@
 extern void *tall_sgsn_ctx;
 
 static const struct rate_ctr_desc bvc_ctr_description[] = {
-	[GBPROX_PEER_CTR_BLOCKED]	= { "blocked",	   "BVC Block                       " },
-	[GBPROX_PEER_CTR_UNBLOCKED]	= { "unblocked",   "BVC Unblock                     " },
-	[GBPROX_PEER_CTR_DROPPED]	= { "dropped",	   "BVC blocked, dropped packet     " },
-	[GBPROX_PEER_CTR_INV_NSEI]	= { "inv-nsei",	   "NSEI mismatch                   " },
-	[GBPROX_PEER_CTR_TX_ERR]	= { "tx-err",	   "NS Transmission error           " },
+	[GBPROX_PEER_CTR_BLOCKED]	    = { "blocked",	"BVC Block                       " },
+	[GBPROX_PEER_CTR_UNBLOCKED]	    = { "unblocked",	"BVC Unblock                     " },
+	[GBPROX_PEER_CTR_DROPPED]	    = { "dropped",	"BVC blocked, dropped packet     " },
+	[GBPROX_PEER_CTR_INV_NSEI]	    = { "inv-nsei",	"NSEI mismatch                   " },
+	[GBPROX_PEER_CTR_TX_ERR]	    = { "tx-err",	"NS Transmission error           " },
+	[GBPROX_PEER_CTR_FWD_FROM_SGSN_ERR] = { "fwd-sgsn-err",	"Forwarding data from SGSN failed" },
+	[GBPROX_PEER_CTR_FWD_FROM_BSS_ERR]  = { "fwd-bss-err",	"Forwarding data from BSS failed " },
 };
 
 osmo_static_assert(ARRAY_SIZE(bvc_ctr_description) == GBPROX_PEER_CTR_LAST, everything_described);