Networking: Fix an IPv6 bug: Wrong network byte order in comparison
This commit is contained in:
parent
28aadce3e8
commit
bd3d26ccd7
@ -104,7 +104,7 @@
|
|||||||
|
|
||||||
/* Macros */
|
/* Macros */
|
||||||
|
|
||||||
#define BUF ((FAR struct ipv6_hdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)])
|
#define IPv6BUF ((FAR struct ipv6_hdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)])
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Data
|
* Public Data
|
||||||
@ -139,7 +139,7 @@
|
|||||||
|
|
||||||
int ipv6_input(FAR struct net_driver_s *dev)
|
int ipv6_input(FAR struct net_driver_s *dev)
|
||||||
{
|
{
|
||||||
FAR struct ipv6_hdr_s *pbuf = BUF;
|
FAR struct ipv6_hdr_s *ipv6 = IPv6BUF;
|
||||||
uint16_t iplen;
|
uint16_t iplen;
|
||||||
|
|
||||||
/* This is where the input processing starts. */
|
/* This is where the input processing starts. */
|
||||||
@ -151,7 +151,7 @@ int ipv6_input(FAR struct net_driver_s *dev)
|
|||||||
/* Start of IP input header processing code. */
|
/* Start of IP input header processing code. */
|
||||||
/* Check validity of the IP header. */
|
/* Check validity of the IP header. */
|
||||||
|
|
||||||
if ((pbuf->vtc & 0xf0) != 0x60)
|
if ((ipv6->vtc & 0xf0) != 0x60)
|
||||||
{
|
{
|
||||||
/* IP version and header length. */
|
/* IP version and header length. */
|
||||||
|
|
||||||
@ -159,7 +159,8 @@ int ipv6_input(FAR struct net_driver_s *dev)
|
|||||||
g_netstats.ip.drop++;
|
g_netstats.ip.drop++;
|
||||||
g_netstats.ip.vhlerr++;
|
g_netstats.ip.vhlerr++;
|
||||||
#endif
|
#endif
|
||||||
nlldbg("Invalid IPv6 version: %d\n", pbuf->vtc >> 4);
|
|
||||||
|
nlldbg("Invalid IPv6 version: %d\n", ipv6->vtc >> 4);
|
||||||
goto drop;
|
goto drop;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,7 +178,7 @@ int ipv6_input(FAR struct net_driver_s *dev)
|
|||||||
* the size of the IPv6 header (40 bytes).
|
* the size of the IPv6 header (40 bytes).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
iplen = (pbuf->len[0] << 8) + pbuf->len[1] + IPv6_HDRLEN;
|
iplen = (ipv6->len[0] << 8) + ipv6->len[1] + IPv6_HDRLEN;
|
||||||
if (iplen <= dev->d_len)
|
if (iplen <= dev->d_len)
|
||||||
{
|
{
|
||||||
dev->d_len = iplen;
|
dev->d_len = iplen;
|
||||||
@ -195,8 +196,8 @@ int ipv6_input(FAR struct net_driver_s *dev)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(CONFIG_NET_BROADCAST) && defined(CONFIG_NET_UDP)
|
#if defined(CONFIG_NET_BROADCAST) && defined(CONFIG_NET_UDP)
|
||||||
if (pbuf->proto == IP_PROTO_UDP &&
|
if (ipv6->proto == IP_PROTO_UDP &&
|
||||||
net_ipv6addr_cmp(pbuf->destipaddr, g_ipv6_alloneaddr))
|
net_ipv6addr_cmp(ipv6->destipaddr, g_ipv6_alloneaddr))
|
||||||
{
|
{
|
||||||
return udp_ipv6_input(dev);
|
return udp_ipv6_input(dev);
|
||||||
}
|
}
|
||||||
@ -233,8 +234,8 @@ int ipv6_input(FAR struct net_driver_s *dev)
|
|||||||
* multicast packets that are sent to the ff02::/16 addresses.
|
* multicast packets that are sent to the ff02::/16 addresses.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!net_ipv6addr_cmp(pbuf->destipaddr, dev->d_ipv6addr) &&
|
if (!net_ipv6addr_cmp(ipv6->destipaddr, dev->d_ipv6addr) &&
|
||||||
pbuf->destipaddr[0] != 0xff02)
|
ipv6->destipaddr[0] != HTONS(0xff02))
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_NET_STATISTICS
|
#ifdef CONFIG_NET_STATISTICS
|
||||||
g_netstats.ip.drop++;
|
g_netstats.ip.drop++;
|
||||||
@ -247,7 +248,7 @@ int ipv6_input(FAR struct net_driver_s *dev)
|
|||||||
* according to the protocol.
|
* according to the protocol.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
switch (pbuf->proto)
|
switch (ipv6->proto)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_NET_TCP
|
#ifdef CONFIG_NET_TCP
|
||||||
case IP_PROTO_TCP: /* TCP input */
|
case IP_PROTO_TCP: /* TCP input */
|
||||||
@ -275,7 +276,7 @@ int ipv6_input(FAR struct net_driver_s *dev)
|
|||||||
g_netstats.ip.protoerr++;
|
g_netstats.ip.protoerr++;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nlldbg("Unrecognized IP protocol\n");
|
nlldbg("Unrecognized IP protocol: %04x\n", ipv6->proto);
|
||||||
goto drop;
|
goto drop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user