net: Avoid printing non-error cases when parsing packet

We had various asserts when checking network packet length but
printed also error when there was none. Fix this by checking
do we really have a too short message.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
diff --git a/subsys/net/ip/ipv6.c b/subsys/net/ip/ipv6.c
index af9d6f9..f2d9aa4 100644
--- a/subsys/net/ip/ipv6.c
+++ b/subsys/net/ip/ipv6.c
@@ -1732,7 +1732,6 @@
 		}
 
 		nd_opt_hdr = net_icmpv6_get_nd_opt_hdr(pkt, &ndopthdr);
-		NET_ASSERT_INFO(nd_opt_hdr, "End-of-opt, this is expected.");
 	}
 
 	ifaddr = net_if_ipv6_addr_lookup_by_iface(net_pkt_iface(pkt),
diff --git a/subsys/net/ip/net_pkt.c b/subsys/net/ip/net_pkt.c
index 5149a69..5a7105c 100644
--- a/subsys/net/ip/net_pkt.c
+++ b/subsys/net/ip/net_pkt.c
@@ -1211,7 +1211,6 @@
 					    u16_t offset, u16_t *pos)
 {
 	if (!frag) {
-		NET_ERR("Invalid fragment");
 		return NULL;
 	}
 
@@ -1672,6 +1671,24 @@
 	return frag;
 }
 
+#if defined(CONFIG_NET_DEBUG_NET_PKT)
+static void too_short_msg(struct net_pkt *pkt, u16_t offset, size_t extra_len)
+{
+	size_t total_len = net_buf_frags_len(pkt->frags);
+	size_t hdr_len = net_pkt_ip_hdr_len(pkt) + net_pkt_ipv6_ext_len(pkt);
+
+	if (total_len != (hdr_len + extra_len)) {
+		/* Print info how many bytes past the end we tried to print */
+		NET_ERR("IP hdr %d ext len %d offset %d pos %zd total %zd",
+			net_pkt_ip_hdr_len(pkt),
+			net_pkt_ipv6_ext_len(pkt),
+			offset, hdr_len + extra_len, total_len);
+	}
+}
+#else
+#define too_short_msg(...)
+#endif
+
 struct net_icmp_hdr *net_pkt_icmp_data(struct net_pkt *pkt)
 {
 	struct net_buf *frag;
@@ -1683,11 +1700,7 @@
 				&offset);
 	if (!frag) {
 		/* We tried to read past the end of the data */
-		NET_ASSERT_INFO(frag,
-				"IP hdr %d ext len %d offset %d total %zd",
-				net_pkt_ip_hdr_len(pkt),
-				net_pkt_ipv6_ext_len(pkt),
-				offset, net_buf_frags_len(pkt->frags));
+		too_short_msg(pkt, offset, 0);
 		return NULL;
 	}
 
@@ -1705,15 +1718,7 @@
 				&offset);
 	if (!frag) {
 		/* We tried to read past the end of the data */
-		NET_ASSERT_INFO(frag,
-				"IP hdr %d ext len %d offset %d pos %zd "
-				"total %zd",
-				net_pkt_ip_hdr_len(pkt),
-				net_pkt_ipv6_ext_len(pkt),
-				offset,
-				net_pkt_ip_hdr_len(pkt) +
-				net_pkt_ipv6_ext_len(pkt) + opt_len,
-				net_buf_frags_len(pkt->frags));
+		too_short_msg(pkt, offset, opt_len);
 		return NULL;
 	}
 
@@ -1731,15 +1736,7 @@
 				&offset);
 	if (!frag) {
 		/* We tried to read past the end of the data */
-		NET_ASSERT_INFO(frag,
-				"IP hdr %d ext len %d offset %d pos %d "
-				"total %zd",
-				net_pkt_ip_hdr_len(pkt),
-				net_pkt_ipv6_ext_len(pkt),
-				offset,
-				net_pkt_ip_hdr_len(pkt) +
-				net_pkt_ipv6_ext_len(pkt),
-				net_buf_frags_len(pkt->frags));
+		too_short_msg(pkt, offset, 0);
 		return NULL;
 	}
 
@@ -1757,15 +1754,7 @@
 				&offset);
 	if (!frag) {
 		/* We tried to read past the end of the data */
-		NET_ASSERT_INFO(frag,
-				"IP hdr %d ext len %d offset %d pos %d "
-				"total %zd",
-				net_pkt_ip_hdr_len(pkt),
-				net_pkt_ipv6_ext_len(pkt),
-				offset,
-				net_pkt_ip_hdr_len(pkt) +
-				net_pkt_ipv6_ext_len(pkt),
-				net_buf_frags_len(pkt->frags));
+		too_short_msg(pkt, offset, 0);
 		return NULL;
 	}