[PATCH 3/3] ns: Log when sending fails (Coverity)

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Jacob Erlbeck jerlbeck at sysmocom.de
Tue Apr 7 15:52:45 UTC 2015


Currently the return value of the gprs_ns_tx family of functions is
often ignored. This is not a serious issue, since the successful
delivery of the messages is neither guaranteed nor acknowledged by
the network layer anyway.

Nevertheless this commit adds logging (level INFO) to gprs_ns_tx and
gprs_ns_msgb_alloc. The definition of the latter has been moved from
the header file to gprs_ns.c.

Fixes: Coverity CID 1040678, 1040679, 1040680, 1040681, 1040682,
   1040683, 1040684, 1040686, 1040687, 1040688, 1111545,
   1240203, 1240204
Sponsored-by: On-Waves ehf
---
 include/osmocom/gprs/gprs_ns.h | 10 ++++------
 src/gb/gprs_ns.c               | 19 +++++++++++++++++++
 src/gb/libosmogb.map           |  1 +
 3 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/include/osmocom/gprs/gprs_ns.h b/include/osmocom/gprs/gprs_ns.h
index e77ca42..d5a605d 100644
--- a/include/osmocom/gprs/gprs_ns.h
+++ b/include/osmocom/gprs/gprs_ns.h
@@ -23,6 +23,9 @@
 	"Alive Timer (Tns-alive) timeout\n"			\
 	"Alive Timer (Tns-alive) number of retries\n"
 
+#define NS_ALLOC_SIZE	2048
+#define NS_ALLOC_HEADROOM 20
+
 enum ns_timeout {
 	NS_TOUT_TNS_BLOCK,
 	NS_TOUT_TNS_BLOCK_RETRIES,
@@ -186,12 +189,7 @@ void gprs_ns_ll_copy(struct gprs_nsvc *nsvc, struct gprs_nsvc *other);
 /* Clear the link layer info (will never match a real link then) */
 void gprs_ns_ll_clear(struct gprs_nsvc *nsvc);
 
-#define NS_ALLOC_SIZE	2048
-#define NS_ALLOC_HEADROOM 20
-static inline struct msgb *gprs_ns_msgb_alloc(void)
-{
-	return msgb_alloc_headroom(NS_ALLOC_SIZE, NS_ALLOC_HEADROOM, "GPRS/NS");
-}
+struct msgb *gprs_ns_msgb_alloc(void);
 
 enum signal_ns {
 	S_NS_RESET,
diff --git a/src/gb/gprs_ns.c b/src/gb/gprs_ns.c
index 27968e3..827d09d 100644
--- a/src/gb/gprs_ns.c
+++ b/src/gb/gprs_ns.c
@@ -131,6 +131,17 @@ static const struct rate_ctr_group_desc nsvc_ctrg_desc = {
 			LOGP(DNS, LOGL_ERROR, "TX failed (%d) to peer %s\n",	\
 				rc, gprs_ns_ll_str(nsvc));
 
+struct msgb *gprs_ns_msgb_alloc(void)
+{
+	struct msgb *msg = msgb_alloc_headroom(NS_ALLOC_SIZE, NS_ALLOC_HEADROOM,
+		"GPRS/NS");
+	if (!msg) {
+		LOGP(DNS, LOGL_ERROR, "Failed to allocate NS message of size %d\n",
+			NS_ALLOC_SIZE);
+	}
+	return msg;
+}
+
 
 /*! \brief Lookup struct gprs_nsvc based on NSVCI
  *  \param[in] nsi NS instance in which to search
@@ -298,9 +309,17 @@ static int gprs_ns_tx(struct gprs_nsvc *nsvc, struct msgb *msg)
 	switch (nsvc->ll) {
 	case GPRS_NS_LL_UDP:
 		ret = nsip_sendmsg(nsvc, msg);
+		if (ret < 0)
+			LOGP(DNS, LOGL_INFO,
+				"failed to send NS message via UDP: %s\n",
+				strerror(-ret));
 		break;
 	case GPRS_NS_LL_FR_GRE:
 		ret = gprs_ns_frgre_sendmsg(nsvc, msg);
+		if (ret < 0)
+			LOGP(DNS, LOGL_INFO,
+				"failed to send NS message via FR/GRE: %s\n",
+				strerror(-ret));
 		break;
 	default:
 		LOGP(DNS, LOGL_ERROR, "unsupported NS linklayer %u\n", nsvc->ll);
diff --git a/src/gb/libosmogb.map b/src/gb/libosmogb.map
index a21a7ac..43ebbf8 100644
--- a/src/gb/libosmogb.map
+++ b/src/gb/libosmogb.map
@@ -57,6 +57,7 @@ gprs_ns_vty_init;
 gprs_ns_ll_str;
 gprs_ns_ll_copy;
 gprs_ns_ll_clear;
+gprs_ns_msgb_alloc;
 
 gprs_nsvc_create;
 gprs_nsvc_delete;
-- 
1.9.1




More information about the OpenBSC mailing list