You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by bt...@apache.org on 2021/01/31 00:04:52 UTC
[incubator-nuttx] 01/02: net/ip: do not drop the udp packet from IP
layer
This is an automated email from the ASF dual-hosted git repository.
btashton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit ab148bc69fe9fb66a849043612dc7aa89515295c
Author: chao.an <an...@xiaomi.com>
AuthorDate: Mon Jan 18 16:43:52 2021 +0800
net/ip: do not drop the udp packet from IP layer
this change to support receive the udp data from the specified
port without obtaining the address.
e.g: disable the Bootstrap flag on dhcpc handshake
Reference:
RFC1542: Clarifications and Extensions for the Bootstrap Protocol.
Signed-off-by: chao.an <an...@xiaomi.com>
---
net/devif/ipv4_input.c | 20 ++++++++++----------
net/devif/ipv6_input.c | 29 +++++++++++++----------------
2 files changed, 23 insertions(+), 26 deletions(-)
diff --git a/net/devif/ipv4_input.c b/net/devif/ipv4_input.c
index e88c3b2..8e35497 100644
--- a/net/devif/ipv4_input.c
+++ b/net/devif/ipv4_input.c
@@ -237,16 +237,6 @@ int ipv4_input(FAR struct net_driver_s *dev)
}
else
#endif
-#ifdef CONFIG_NET_ICMP
- /* In other cases, the device must be assigned a non-zero IP address. */
-
- if (net_ipv4addr_cmp(dev->d_ipaddr, INADDR_ANY))
- {
- nwarn("WARNING: No IP address assigned\n");
- goto drop;
- }
- else
-#endif
#if defined(CONFIG_NET_BROADCAST) && defined(NET_UDP_HAVE_STACK)
/* The address is not the broadcast address and we have been assigned a
* address. So there is also the possibility that the destination address
@@ -307,6 +297,7 @@ int ipv4_input(FAR struct net_driver_s *dev)
}
else
#endif
+ if (ipv4->proto != IP_PROTO_UDP)
{
/* Not destined for us and not forwardable... Drop the
* packet.
@@ -322,6 +313,15 @@ int ipv4_input(FAR struct net_driver_s *dev)
}
}
}
+#ifdef CONFIG_NET_ICMP
+ /* In other cases, the device must be assigned a non-zero IP address. */
+
+ else if (net_ipv4addr_cmp(dev->d_ipaddr, INADDR_ANY))
+ {
+ nwarn("WARNING: No IP address assigned\n");
+ goto drop;
+ }
+#endif
if (ipv4_chksum(dev) != 0xffff)
{
diff --git a/net/devif/ipv6_input.c b/net/devif/ipv6_input.c
index 95d75cc..5d56d83 100644
--- a/net/devif/ipv6_input.c
+++ b/net/devif/ipv6_input.c
@@ -409,22 +409,6 @@ int ipv6_input(FAR struct net_driver_s *dev)
* address by its IPv6 nexthdr field.
*/
}
-
- /* In other cases, the device must be assigned a non-zero IP address
- * (the all zero address is the "unspecified" address.
- */
-
- else
-#endif
-#ifdef CONFIG_NET_ICMPv6
- if (net_ipv6addr_cmp(dev->d_ipv6addr, g_ipv6_unspecaddr))
- {
- nwarn("WARNING: No IP address assigned\n");
- goto drop;
- }
-
- /* Check if the packet is destined for out IP address */
-
else
#endif
{
@@ -449,6 +433,7 @@ int ipv6_input(FAR struct net_driver_s *dev)
}
else
#endif
+ if (nxthdr != IP_PROTO_UDP)
{
/* Not destined for us and not forwardable... drop the packet. */
@@ -457,6 +442,18 @@ int ipv6_input(FAR struct net_driver_s *dev)
}
}
}
+#ifdef CONFIG_NET_ICMPv6
+
+ /* In other cases, the device must be assigned a non-zero IP address
+ * (the all zero address is the "unspecified" address.
+ */
+
+ if (net_ipv6addr_cmp(dev->d_ipv6addr, g_ipv6_unspecaddr))
+ {
+ nwarn("WARNING: No IP address assigned\n");
+ goto drop;
+ }
+#endif
/* Now process the incoming packet according to the protocol specified in
* the next header IPv6 field.