diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c index d3c1e6990..0f65d37e7 100644 --- a/src/gb/gprs_ns2.c +++ b/src/gb/gprs_ns2.c @@ -162,8 +162,10 @@ const struct value_string gprs_ns2_cause_strs[] = { static const struct rate_ctr_desc nsvc_ctr_description[] = { [NS_CTR_PKTS_IN] = { "packets:in", "Packets at NS Level ( In)" }, [NS_CTR_PKTS_OUT] = { "packets:out", "Packets at NS Level (Out)" }, + [NS_CTR_PKTS_OUT_DROP] = { "packets:out:drop", "Dropped Packets (Out)" }, [NS_CTR_BYTES_IN] = { "bytes:in", "Bytes at NS Level ( In)" }, [NS_CTR_BYTES_OUT] = { "bytes:out", "Bytes at NS Level (Out)" }, + [NS_CTR_BYTES_OUT_DROP] = { "bytes:out:drop", "Dropped Bytes (Out)" }, [NS_CTR_BLOCKED] = { "blocked", "NS-VC Block count " }, [NS_CTR_DEAD] = { "dead", "NS-VC gone dead count " }, [NS_CTR_REPLACED] = { "replaced", "NS-VC replaced other count" }, diff --git a/src/gb/gprs_ns2_internal.h b/src/gb/gprs_ns2_internal.h index 68f28dbaa..98b3f2941 100644 --- a/src/gb/gprs_ns2_internal.h +++ b/src/gb/gprs_ns2_internal.h @@ -88,8 +88,10 @@ enum ns2_cs { enum ns_ctr { NS_CTR_PKTS_IN, NS_CTR_PKTS_OUT, + NS_CTR_PKTS_OUT_DROP, NS_CTR_BYTES_IN, NS_CTR_BYTES_OUT, + NS_CTR_BYTES_OUT_DROP, NS_CTR_BLOCKED, NS_CTR_DEAD, NS_CTR_REPLACED, diff --git a/src/gb/gprs_ns2_message.c b/src/gb/gprs_ns2_message.c index cd498969b..bfb8781d6 100644 --- a/src/gb/gprs_ns2_message.c +++ b/src/gb/gprs_ns2_message.c @@ -168,10 +168,20 @@ int ns2_validate(struct gprs_ns2_vc *nsvc, 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 */