diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2015-01-15 13:08:28 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2015-01-15 13:08:28 -0600 |
commit | fe80c662f25081c8d2c9df8797af2dc89ead2f64 (patch) | |
tree | 88be6b6663fa39e646698f47bb1d07e800cce60e /nuttx | |
parent | c16ad40ac4e49dce5846763d2c31f571c978e355 (diff) | |
download | px4-nuttx-fe80c662f25081c8d2c9df8797af2dc89ead2f64.tar.gz px4-nuttx-fe80c662f25081c8d2c9df8797af2dc89ead2f64.tar.bz2 px4-nuttx-fe80c662f25081c8d2c9df8797af2dc89ead2f64.zip |
Networking: More IPv6 detanglement
Diffstat (limited to 'nuttx')
-rw-r--r-- | nuttx/include/nuttx/net/netdev.h | 24 | ||||
-rw-r--r-- | nuttx/net/netdev/netdev_ioctl.c | 36 | ||||
-rw-r--r-- | nuttx/net/socket/recvfrom.c | 9 | ||||
-rw-r--r-- | nuttx/net/tcp/tcp_send_buffered.c | 6 |
4 files changed, 48 insertions, 27 deletions
diff --git a/nuttx/include/nuttx/net/netdev.h b/nuttx/include/nuttx/net/netdev.h index 7d2f31250..e66c378d5 100644 --- a/nuttx/include/nuttx/net/netdev.h +++ b/nuttx/include/nuttx/net/netdev.h @@ -99,25 +99,33 @@ struct net_driver_s #ifdef CONFIG_NET_MULTILINK /* Multi network devices using multiple data links protocols are selected */ - uint8_t d_lltype; /* See enum net_datalink_e */ - uint8_t d_llhdrlen; /* Link layer header size */ - uint16_t d_mtu; /* Maximum packet size */ + uint8_t d_lltype; /* See enum net_datalink_e */ + uint8_t d_llhdrlen; /* Link layer header size */ + uint16_t d_mtu; /* Maximum packet size */ #ifdef CONFIG_NET_TCP - uint16_t d_recvwndo; /* TCP receive window size */ + uint16_t d_recvwndo; /* TCP receive window size */ #endif #endif #ifdef CONFIG_NET_ETHERNET /* Ethernet device identity */ - struct ether_addr d_mac; /* Device MAC address */ + struct ether_addr d_mac; /* Device MAC address */ #endif /* Network identity */ - net_ipaddr_t d_ipaddr; /* Host IP address assigned to the network interface */ - net_ipaddr_t d_draddr; /* Default router IP address */ - net_ipaddr_t d_netmask; /* Network subnet mask */ +#ifdef CONFIG_NET_IPv4 + in_addr_t d_ipaddr; /* Host IPv4 address assigned to the network interface */ + in_addr_t d_draddr; /* Default router IP address */ + in_addr_t d_netmask; /* Network subnet mask */ +#endif + +#ifdef CONFIG_NET_IPv6 + net_ipv6addr_t d_ipv6addr; /* Host IPv6 address assigned to the network interface */ + net_ipv6addr_t d_ipv6draddr; /* Default router IPv6 address */ + net_ipv6addr_t d_ipv6netmask; /* Network IPv6 subnet mask */ +#endif /* The d_buf array is used to hold incoming and outgoing packets. The device * driver should place incoming data into this buffer. When sending data, diff --git a/nuttx/net/netdev/netdev_ioctl.c b/nuttx/net/netdev/netdev_ioctl.c index bd8d6ede9..93bae2f18 100644 --- a/nuttx/net/netdev/netdev_ioctl.c +++ b/nuttx/net/netdev/netdev_ioctl.c @@ -95,13 +95,12 @@ ****************************************************************************/ #ifdef CONFIG_NET_IPv4 -static void ioctl_getipv4addr(FAR struct sockaddr *outaddr, - FAR const net_ipaddr_t *inaddr) +static void ioctl_getipv4addr(FAR struct sockaddr *outaddr, in_addr_t inaddr) { FAR struct sockaddr_in *dest = (FAR struct sockaddr_in *)outaddr; dest->sin_family = AF_INET; dest->sin_port = 0; - dest->sin_addr.s_addr = *inaddr; + dest->sin_addr.s_addr = inaddr; } #endif @@ -119,7 +118,7 @@ static void ioctl_getipv4addr(FAR struct sockaddr *outaddr, #ifdef CONFIG_NET_IPv6 static void ioctl_getipv6addr(FAR struct sockaddr_storage *outaddr, - FAR const net_ipaddr_t *inaddr) + FAR const net_ipv6addr_t inaddr) { FAR struct sockaddr_in6 *dest = (FAR struct sockaddr_in6 *)outaddr; dest->sin_family = AF_INET6; @@ -142,7 +141,7 @@ static void ioctl_getipv6addr(FAR struct sockaddr_storage *outaddr, ****************************************************************************/ #ifdef CONFIG_NET_IPv4 -static void ioctl_setipv4addr(FAR net_ipaddr_t *outaddr, +static void ioctl_setipv4addr(FAR in_addr_t *outaddr, FAR const struct sockaddr *inaddr) { FAR const struct sockaddr_in *src = (FAR const struct sockaddr_in *)inaddr; @@ -164,7 +163,7 @@ static void ioctl_setipv4addr(FAR net_ipaddr_t *outaddr, ****************************************************************************/ #ifdef CONFIG_NET_IPv6 -static void ioctl_setipv6addr(FAR net_ipaddr_t *outaddr, +static void ioctl_setipv6addr(FAR net_ipv6addr_t outaddr, FAR const struct sockaddr_storage *inaddr) { FAR const struct sockaddr_in6 *src = (FAR const struct sockaddr_in6 *)inaddr; @@ -288,7 +287,7 @@ static int netdev_ifrioctl(FAR struct socket *psock, int cmd, dev = netdev_ifrdev(req); if (dev) { - ioctl_getipv4addr(&req->ifr_addr, &dev->d_ipaddr); + ioctl_getipv4addr(&req->ifr_addr, dev->d_ipaddr); ret = OK; } } @@ -317,7 +316,7 @@ static int netdev_ifrioctl(FAR struct socket *psock, int cmd, dev = netdev_ifrdev(req); if (dev) { - ioctl_getipv4addr(&req->ifr_dstaddr, &dev->d_draddr); + ioctl_getipv4addr(&req->ifr_dstaddr, dev->d_draddr); ret = OK; } } @@ -352,7 +351,7 @@ static int netdev_ifrioctl(FAR struct socket *psock, int cmd, dev = netdev_ifrdev(req); if (dev) { - ioctl_getipv4addr(&req->ifr_addr, &dev->d_netmask); + ioctl_getipv4addr(&req->ifr_addr, dev->d_netmask); ret = OK; } } @@ -380,7 +379,7 @@ static int netdev_ifrioctl(FAR struct socket *psock, int cmd, { FAR struct lifreq *lreq = (FAR struct lifreq *)req; - ioctl_getipv6addr(&lreq->lifr_addr, &dev->d_ipaddr); + ioctl_getipv6addr(&lreq->lifr_addr, dev->d_ipv6addr); ret = OK; } } @@ -396,7 +395,7 @@ static int netdev_ifrioctl(FAR struct socket *psock, int cmd, FAR struct lifreq *lreq = (FAR struct lifreq *)req; ioctl_ifdown(dev); - ioctl_setipv6addr(&dev->d_ipaddr, &lreq->lifr_addr); + ioctl_setipv6addr(dev->d_ipv6addr, &lreq->lifr_addr); ioctl_ifup(dev); ret = OK; } @@ -412,7 +411,7 @@ static int netdev_ifrioctl(FAR struct socket *psock, int cmd, { FAR struct lifreq *lreq = (FAR struct lifreq *)req; - ioctl_getipv6addr(&lreq->lifr_dstaddr, &dev->d_draddr); + ioctl_getipv6addr(&lreq->lifr_dstaddr, dev->d_ipv6draddr); ret = OK; } } @@ -427,7 +426,7 @@ static int netdev_ifrioctl(FAR struct socket *psock, int cmd, { FAR struct lifreq *lreq = (FAR struct lifreq *)req; - ioctl_setipv6addr(&dev->d_draddr, &lreq->lifr_dstaddr); + ioctl_setipv6addr(dev->d_ipv6draddr, &lreq->lifr_dstaddr); ret = OK; } } @@ -451,7 +450,7 @@ static int netdev_ifrioctl(FAR struct socket *psock, int cmd, { FAR struct lifreq *lreq = (FAR struct lifreq *)req; - ioctl_getipv6addr(&lreq->lifr_addr, &dev->d_netmask); + ioctl_getipv6addr(&lreq->lifr_addr, dev->d_ipv6netmask); ret = OK; } } @@ -465,7 +464,7 @@ static int netdev_ifrioctl(FAR struct socket *psock, int cmd, if (dev) { FAR struct lifreq *lreq = (FAR struct lifreq *)req; - ioctl_setipv6addr(&dev->d_netmask, &lreq->lifr_addr); + ioctl_setipv6addr(dev->d_ipv6netmask, &lreq->lifr_addr); ret = OK; } } @@ -560,7 +559,12 @@ static int netdev_ifrioctl(FAR struct socket *psock, int cmd, if (dev) { ioctl_ifdown(dev); - memset(&dev->d_ipaddr, 0, sizeof(net_ipaddr_t)); +#ifdef CONFIG_NET_IPv4 + dev->d_ipaddr = 0; +#endif +#ifdef CONFIG_NET_IPv6 + memset(&dev->d_ipv6addr, 0, sizeof(net_ipv6addr_t)); +#endif ret = OK; } } diff --git a/nuttx/net/socket/recvfrom.c b/nuttx/net/socket/recvfrom.c index 160246715..a16f23c2b 100644 --- a/nuttx/net/socket/recvfrom.c +++ b/nuttx/net/socket/recvfrom.c @@ -74,8 +74,13 @@ * Pre-processor Definitions ****************************************************************************/ -#define UDPBUF ((struct udp_iphdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) -#define TCPBUF ((struct tcp_iphdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) +#if defined(CONFIG_NET_IPv4) +# define UDPBUF ((struct udp_iphdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) +# define TCPBUF ((struct tcp_iphdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) +#elif defined(CONFIG_NET_IPv6) +# define UDPBUF ((struct udp_ipv6hdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) +# define TCPBUF ((struct tcp_ipv6hdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) +#endif /**************************************************************************** * Private Types diff --git a/nuttx/net/tcp/tcp_send_buffered.c b/nuttx/net/tcp/tcp_send_buffered.c index c50b81040..ed0632ccd 100644 --- a/nuttx/net/tcp/tcp_send_buffered.c +++ b/nuttx/net/tcp/tcp_send_buffered.c @@ -79,7 +79,11 @@ * Pre-processor Definitions ****************************************************************************/ -#define TCPBUF ((struct tcp_iphdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) +#if defined(CONFIG_NET_IPv4) +# define TCPBUF ((struct tcp_iphdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) +#elif defined(CONFIG_NET_IPv6) +# define TCPBUF ((struct tcp_ipv6hdr_s *)&dev->d_buf[NET_LL_HDRLEN(dev)]) +#endif /* Debug */ |