ns2: count number of dropped packets / bytes on transmit
Differentiate between successfully transmitted packets/bytes,
and pacets/bytes that were dropped (i.e. overflow of net-device)
OsmoNSdummy# show ns nsvc 1001 stats
NSVCI 01001: UNBLOCKED PERSIST data_weight=1 sig_weight=1 fr)netif: hdlc1 dlci: 1001
NSVC Peer Statistics:
Packets at NS Level ( In): 36 (0/s 8/m 32/h 0/d)
Packets at NS Level (Out): 23344 (170/s 20556/m 13119/h 0/d)
Dropped Packets (Out): 30692 (230/s 27056/m 17221/h 0/d)
Bytes at NS Level ( In): 262 (0/s 24/m 250/h 0/d)
Bytes at NS Level (Out): 32741312 (238680/s 28849400/m 18391024/h 0/d)
Dropped Bytes (Out): 43014628 (322920/s 37986624/m 24101344/h 0/d)
Change-Id: If21906ff5379038f7be10cf48c68d1f756dd7c1e
diff --git a/src/gb/gprs_ns2_message.c b/src/gb/gprs_ns2_message.c
index cd49896..bfb8781 100644
--- a/src/gb/gprs_ns2_message.c
+++ b/src/gb/gprs_ns2_message.c
@@ -168,10 +168,20 @@
static int ns_vc_tx(struct gprs_ns2_vc *nsvc, struct msgb *msg)
{
- rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_PKTS_OUT]);
- rate_ctr_add(&nsvc->ctrg->ctr[NS_CTR_BYTES_OUT], msgb_length(msg));
+ unsigned int bytes = msgb_length(msg);
+ int rc;
- return nsvc->bind->send_vc(nsvc, msg);
+
+ rc = nsvc->bind->send_vc(nsvc, msg);
+ if (rc < 0) {
+ rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_PKTS_OUT_DROP]);
+ rate_ctr_add(&nsvc->ctrg->ctr[NS_CTR_BYTES_OUT_DROP], bytes);
+ } else {
+ rate_ctr_inc(&nsvc->ctrg->ctr[NS_CTR_PKTS_OUT]);
+ rate_ctr_add(&nsvc->ctrg->ctr[NS_CTR_BYTES_OUT], bytes);
+ }
+
+ return rc;
}
/* transmit functions */