summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2015-01-15 13:08:28 -0600
committerGregory Nutt <gnutt@nuttx.org>2015-01-15 13:08:28 -0600
commitfe80c662f25081c8d2c9df8797af2dc89ead2f64 (patch)
tree88be6b6663fa39e646698f47bb1d07e800cce60e
parentc16ad40ac4e49dce5846763d2c31f571c978e355 (diff)
downloadpx4-nuttx-fe80c662f25081c8d2c9df8797af2dc89ead2f64.tar.gz
px4-nuttx-fe80c662f25081c8d2c9df8797af2dc89ead2f64.tar.bz2
px4-nuttx-fe80c662f25081c8d2c9df8797af2dc89ead2f64.zip
Networking: More IPv6 detanglement
-rw-r--r--nuttx/include/nuttx/net/netdev.h24
-rw-r--r--nuttx/net/netdev/netdev_ioctl.c36
-rw-r--r--nuttx/net/socket/recvfrom.c9
-rw-r--r--nuttx/net/tcp/tcp_send_buffered.c6
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 */