Networking: IPv4 and IPv6 work together. This fixes a bug necessary to accomplish that as well as cleaning up a couple of other issues
This commit is contained in:
parent
ce4eed1fa5
commit
e5d1ff373b
@ -140,7 +140,7 @@
|
||||
int ipv6_input(FAR struct net_driver_s *dev)
|
||||
{
|
||||
FAR struct ipv6_hdr_s *ipv6 = IPv6BUF;
|
||||
uint16_t iplen;
|
||||
uint16_t pktlen;
|
||||
|
||||
/* This is where the input processing starts. */
|
||||
|
||||
@ -172,13 +172,21 @@ int ipv6_input(FAR struct net_driver_s *dev)
|
||||
*
|
||||
* The length reported in the IPv6 header is the length of the payload
|
||||
* that follows the header. The device interface uses the d_len variable for
|
||||
* holding the size of the entire packet, including the IP header.
|
||||
* holding the size of the entire packet, including the IP and link layer
|
||||
* headers.
|
||||
*/
|
||||
|
||||
iplen = (ipv6->len[0] << 8) + ipv6->len[1] + IPv6_HDRLEN + ETH_HDRLEN;
|
||||
if (iplen <= dev->d_len)
|
||||
#if defined(CONFIG_NET_MULTILINK)
|
||||
pktlen = (ipv6->len[0] << 8) + ipv6->len[1] + IPv6_HDRLEN + dev->d_llhdrlen;
|
||||
#elif defined(CONFIG_NET_ETHERNET)
|
||||
pktlen = (ipv6->len[0] << 8) + ipv6->len[1] + IPv6_HDRLEN + ETH_HDRLEN;
|
||||
#else /* if defined(CONFIG_NET_SLIP) */
|
||||
pktlen = (ipv6->len[0] << 8) + ipv6->len[1] + IPv6_HDRLEN;
|
||||
#endif
|
||||
|
||||
if (pktlen <= dev->d_len)
|
||||
{
|
||||
dev->d_len = iplen;
|
||||
dev->d_len = pktlen;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -212,8 +212,8 @@ void udp_send(FAR struct net_driver_s *dev, FAR struct udp_conn_s *conn)
|
||||
/* Calculate UDP checksum. */
|
||||
|
||||
#ifdef CONFIG_NET_IPv4
|
||||
#ifdef CONFIG_NET_IPv5
|
||||
if (conn->domain = PF_INET)
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
if (conn->domain == PF_INET)
|
||||
#endif
|
||||
{
|
||||
udp->udpchksum = ~udp_ipv4_chksum(dev);
|
||||
|
Loading…
Reference in New Issue
Block a user