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;
}