mirror of
https://github.com/apache/nuttx.git
synced 2026-09-21 21:47:28 +08:00
Networking: More IPv6 detanglement
This commit is contained in:
@@ -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,
|
||||
|
||||
+20
-16
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user