summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorgeniusgogo <[email protected]>2023-12-05 23:09:19 +0800
committerGitHub <[email protected]>2023-12-05 23:09:19 +0800
commit3bc29c76735487c1bfadedd409901fe0091164a9 (patch)
tree6dc41dde8d962bc0203c7411a70d9748553d4e15 /components
parent474a55ea36c46e95b0f57610c289be64d7d054f1 (diff)
sync update net. (#8333)
Diffstat (limited to 'components')
-rw-r--r--components/net/lwip/Kconfig4
-rw-r--r--components/net/lwip/lwip-1.4.1/src/include/lwip/netif.h40
-rw-r--r--components/net/lwip/lwip-2.0.3/src/include/lwip/netif.h10
-rw-r--r--components/net/lwip/lwip-2.1.2/src/include/lwip/netif.h6
-rw-r--r--components/net/lwip/port/ethernetif.c39
-rw-r--r--components/net/lwip/port/lwipopts.h10
-rw-r--r--components/net/netdev/include/netdev.h2
-rw-r--r--components/net/netdev/src/netdev.c50
-rw-r--r--components/net/sal/Kconfig5
-rw-r--r--components/net/sal/include/sal_socket.h31
-rw-r--r--components/net/sal/src/sal_socket.c6
11 files changed, 139 insertions, 64 deletions
diff --git a/components/net/lwip/Kconfig b/components/net/lwip/Kconfig
index 3ead4c43fd..0609a497e1 100644
--- a/components/net/lwip/Kconfig
+++ b/components/net/lwip/Kconfig
@@ -210,6 +210,10 @@ if RT_USING_LWIP
int "Enable netif link status callback"
default 1
+ config RT_LWIP_NETIF_NAMESIZE
+ int "netif name length"
+ default 6
+
config SO_REUSE
int "Enable SO_REUSEADDR option"
default 1
diff --git a/components/net/lwip/lwip-1.4.1/src/include/lwip/netif.h b/components/net/lwip/lwip-1.4.1/src/include/lwip/netif.h
index f7e4937453..4ee46cb97b 100644
--- a/components/net/lwip/lwip-1.4.1/src/include/lwip/netif.h
+++ b/components/net/lwip/lwip-1.4.1/src/include/lwip/netif.h
@@ -1,8 +1,8 @@
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
@@ -11,21 +11,21 @@
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
+ * derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* This file is part of the lwIP TCP/IP stack.
- *
+ *
* Author: Adam Dunkels <[email protected]>
*
*/
@@ -60,6 +60,14 @@ extern "C" {
across all types of interfaces in use */
#define NETIF_MAX_HWADDR_LEN 6U
+/** The size of a fully constructed netif name which the
+ * netif can be identified by in APIs. Composed of
+ * 2 chars, 3 (max) digits, and 1 \0
+ */
+#ifndef NETIF_NAMESIZE
+#define NETIF_NAMESIZE 6
+#endif
+
/** Whether the network interface is 'up'. This is
* a software flag used to control whether this network
* interface is enabled and processes traffic.
@@ -191,7 +199,7 @@ struct netif {
/** flags (see NETIF_FLAG_ above) */
u8_t flags;
/** descriptive abbreviation */
- char name[2];
+ char name[NETIF_NAMESIZE];
/** number of this interface */
u8_t num;
#if LWIP_SNMP
@@ -290,7 +298,7 @@ void netif_set_remove_callback(struct netif *netif, netif_status_callback_fn rem
void netif_set_link_up(struct netif *netif);
void netif_set_link_down(struct netif *netif);
-/** Ask if a link is up */
+/** Ask if a link is up */
#define netif_is_link_up(netif) (((netif)->flags & NETIF_FLAG_LINK_UP) ? (u8_t)1 : (u8_t)0)
#if LWIP_NETIF_LINK_CALLBACK
diff --git a/components/net/lwip/lwip-2.0.3/src/include/lwip/netif.h b/components/net/lwip/lwip-2.0.3/src/include/lwip/netif.h
index 67a2d24de8..59af91653e 100644
--- a/components/net/lwip/lwip-2.0.3/src/include/lwip/netif.h
+++ b/components/net/lwip/lwip-2.0.3/src/include/lwip/netif.h
@@ -63,6 +63,14 @@ extern "C" {
#define NETIF_MAX_HWADDR_LEN 6U
#endif
+/** The size of a fully constructed netif name which the
+ * netif can be identified by in APIs. Composed of
+ * 2 chars, 3 (max) digits, and 1 \0
+ */
+#ifndef NETIF_NAMESIZE
+#define NETIF_NAMESIZE 6
+#endif
+
/**
* @defgroup netif_flags Flags
* @ingroup netif
@@ -304,7 +312,7 @@ struct netif {
/** flags (@see @ref netif_flags) */
u8_t flags;
/** descriptive abbreviation */
- char name[2];
+ char name[NETIF_NAMESIZE];
/** number of this interface */
u8_t num;
#if MIB2_STATS
diff --git a/components/net/lwip/lwip-2.1.2/src/include/lwip/netif.h b/components/net/lwip/lwip-2.1.2/src/include/lwip/netif.h
index 911196ab3d..dd2b484c09 100644
--- a/components/net/lwip/lwip-2.1.2/src/include/lwip/netif.h
+++ b/components/net/lwip/lwip-2.1.2/src/include/lwip/netif.h
@@ -67,7 +67,9 @@ extern "C" {
* netif can be identified by in APIs. Composed of
* 2 chars, 3 (max) digits, and 1 \0
*/
+#ifndef NETIF_NAMESIZE
#define NETIF_NAMESIZE 6
+#endif
/**
* @defgroup netif_flags Flags
@@ -344,8 +346,8 @@ struct netif {
/** flags (@see @ref netif_flags) */
u8_t flags;
/** descriptive abbreviation */
- char name[2];
- /** number of this interface. Used for @ref if_api and @ref netifapi_netif,
+ char name[NETIF_NAMESIZE];
+ /** number of this interface. Used for @ref if_api and @ref netifapi_netif,
* as well as for IPv6 zones */
u8_t num;
#if LWIP_IPV6_AUTOCONFIG
diff --git a/components/net/lwip/port/ethernetif.c b/components/net/lwip/port/ethernetif.c
index b60d40e53a..c88337cdc6 100644
--- a/components/net/lwip/port/ethernetif.c
+++ b/components/net/lwip/port/ethernetif.c
@@ -72,6 +72,10 @@
#include "lwip/ethip6.h"
#endif /* LWIP_IPV6 */
+#if LWIP_NETIF_HOSTNAME
+#define LWIP_HOSTNAME_LEN 16
+#endif
+
#define netifapi_netif_set_link_up(n) netifapi_netif_common(n, netif_set_link_up, NULL)
#define netifapi_netif_set_link_down(n) netifapi_netif_common(n, netif_set_link_down, NULL)
@@ -202,7 +206,7 @@ extern int lwip_ping_recv(int s, int *ttl);
extern err_t lwip_ping_send(int s, ip_addr_t *addr, int size);
int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len,
- uint32_t timeout, struct netdev_ping_resp *ping_resp)
+ uint32_t timeout, struct netdev_ping_resp *ping_resp, rt_bool_t isbind)
{
int s, ttl, recv_len, result = 0;
int elapsed_time;
@@ -251,7 +255,9 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len,
#else
local.sin_addr.s_addr = (netif->ip_addr.u_addr.ip4.addr);
#endif
- lwip_bind(s, (struct sockaddr *)&local, sizeof(struct sockaddr_in));
+ if (isbind) {
+ lwip_bind(s, (struct sockaddr *)&local, sizeof(struct sockaddr_in));
+ }
lwip_setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &recv_timeout, sizeof(recv_timeout));
@@ -385,10 +391,9 @@ static int netdev_flags_sync(struct netif *lwip_netif)
static int netdev_add(struct netif *lwip_netif)
{
-#define LWIP_NETIF_NAME_LEN 2
int result = 0;
struct netdev *netdev = RT_NULL;
- char name[LWIP_NETIF_NAME_LEN + 1] = {0};
+ char name[NETIF_NAMESIZE] = {0};
RT_ASSERT(lwip_netif);
@@ -404,7 +409,7 @@ static int netdev_add(struct netif *lwip_netif)
sal_lwip_netdev_set_pf_info(netdev);
#endif /* SAL_USING_LWIP */
- rt_strncpy(name, lwip_netif->name, LWIP_NETIF_NAME_LEN);
+ rt_strncpy(name, lwip_netif->name, NETIF_NAMESIZE);
result = netdev_register(netdev, name, (void *)lwip_netif);
/* Update netdev info after registered */
@@ -421,12 +426,12 @@ static int netdev_add(struct netif *lwip_netif)
static void netdev_del(struct netif *lwip_netif)
{
- char name[LWIP_NETIF_NAME_LEN + 1];
+ char name[NETIF_NAMESIZE];
struct netdev *netdev;
RT_ASSERT(lwip_netif);
- rt_strncpy(name, lwip_netif->name, LWIP_NETIF_NAME_LEN);
+ rt_strncpy(name, lwip_netif->name, NETIF_NAMESIZE);
netdev = netdev_get_by_name(name);
netdev_unregister(netdev);
rt_free(netdev);
@@ -520,20 +525,20 @@ static err_t eth_netif_device_init(struct netif *netif)
/* set default netif */
if (netif_default == RT_NULL)
- netif_set_default(ethif->netif);
+ netif_set_default(netif);
/* set interface up */
- netif_set_up(ethif->netif);
+ netif_set_up(netif);
#if LWIP_DHCP
/* if this interface uses DHCP, start the DHCP client */
- dhcp_start(ethif->netif);
+ dhcp_start(netif);
#endif
if (ethif->flags & ETHIF_LINK_PHYUP)
{
/* set link_up for this netif */
- netif_set_link_up(ethif->netif);
+ netif_set_link_up(netif);
}
#ifdef RT_USING_NETDEV
@@ -552,7 +557,6 @@ rt_err_t eth_device_init_with_flag(struct eth_device *dev, const char *name, rt_
{
struct netif* netif;
#if LWIP_NETIF_HOSTNAME
-#define LWIP_HOSTNAME_LEN 16
char *hostname = RT_NULL;
netif = (struct netif*) rt_calloc (1, sizeof(struct netif) + LWIP_HOSTNAME_LEN);
#else
@@ -577,8 +581,7 @@ rt_err_t eth_device_init_with_flag(struct eth_device *dev, const char *name, rt_
rt_device_register(&(dev->parent), name, RT_DEVICE_FLAG_RDWR);
/* set name */
- netif->name[0] = name[0];
- netif->name[1] = name[1];
+ rt_strncpy(netif->name, name, NETIF_NAMESIZE);
/* set hw address to 6 */
netif->hwaddr_len = 6;
@@ -710,16 +713,15 @@ static err_t af_unix_eth_netif_device_init(struct netif *netif)
/* set default netif */
if (netif_default == RT_NULL)
- netif_set_default(ethif->netif);
+ netif_set_default(netif);
/* set interface up */
- netif_set_up(ethif->netif);
-
+ netif_set_up(netif);
if (ethif->flags & ETHIF_LINK_PHYUP)
{
/* set link_up for this netif */
- netif_set_link_up(ethif->netif);
+ netif_set_link_up(netif);
}
#ifdef RT_USING_NETDEV
@@ -738,7 +740,6 @@ rt_err_t af_unix_eth_device_init_with_flag(struct eth_device *dev, const char *n
{
struct netif* netif;
#if LWIP_NETIF_HOSTNAME
-#define LWIP_HOSTNAME_LEN 16
char *hostname = RT_NULL;
netif = (struct netif*) rt_calloc (1, sizeof(struct netif) + LWIP_HOSTNAME_LEN);
#else
diff --git a/components/net/lwip/port/lwipopts.h b/components/net/lwip/port/lwipopts.h
index 054b408c95..dede720731 100644
--- a/components/net/lwip/port/lwipopts.h
+++ b/components/net/lwip/port/lwipopts.h
@@ -578,6 +578,16 @@
#endif
/**
+ * RT_LWIP_NETIF_NAMESIZE support netif name length(in netif.c)
+ */
+#ifdef RT_LWIP_NETIF_NAMESIZE
+#if (RT_LWIP_NETIF_NAMESIZE < 2)
+#warning NETIF_NAMESIZE too small, the value must be greater than or equal to 6.
+#define NETIF_NAMESIZE RT_LWIP_NETIF_NAMESIZE
+#endif
+#endif /* RT_LWIP_NETIF_NAMESIZE */
+
+/**
* LWIP_NETIF_API==1: Support netif api (in netifapi.c)
*/
#ifndef LWIP_NETIF_API
diff --git a/components/net/netdev/include/netdev.h b/components/net/netdev/include/netdev.h
index 5ee7635cd8..5dc68bf216 100644
--- a/components/net/netdev/include/netdev.h
+++ b/components/net/netdev/include/netdev.h
@@ -137,7 +137,7 @@ struct netdev_ops
#ifdef RT_USING_FINSH
/* set network interface device common network interface device operations */
- int (*ping)(struct netdev *netdev, const char *host, size_t data_len, uint32_t timeout, struct netdev_ping_resp *ping_resp);
+ int (*ping)(struct netdev *netdev, const char *host, size_t data_len, uint32_t timeout, struct netdev_ping_resp *ping_resp, rt_bool_t isbind);
void (*netstat)(struct netdev *netdev);
#endif
diff --git a/components/net/netdev/src/netdev.c b/components/net/netdev/src/netdev.c
index 50f2d4bc8d..0afcfc6a2f 100644
--- a/components/net/netdev/src/netdev.c
+++ b/components/net/netdev/src/netdev.c
@@ -27,6 +27,10 @@
#define DBG_LVL DBG_INFO
#include <rtdbg.h>
+#if defined(SAL_USING_AF_NETLINK)
+#include <route_netlink.h>
+#endif
+
/* The list of network interface device */
struct netdev *netdev_list = RT_NULL;
/* The default network interface device */
@@ -124,6 +128,10 @@ int netdev_register(struct netdev *netdev, const char *name, void *user_data)
g_netdev_register_callback(netdev, NETDEV_CB_REGISTER);
}
+#if defined(SAL_USING_AF_NETLINK)
+ rtnl_ip_notify(netdev, RTM_NEWLINK);
+#endif
+
return RT_EOK;
}
@@ -174,6 +182,10 @@ int netdev_unregister(struct netdev *netdev)
}
rt_spin_unlock_irqrestore(&_spinlock, level);
+#if defined(SAL_USING_AF_NETLINK)
+ rtnl_ip_notify(netdev, RTM_DELLINK);
+#endif
+
if (netdev_default == RT_NULL)
{
netdev_set_default(netdev_list);
@@ -301,7 +313,7 @@ struct netdev *netdev_get_by_name(const char *name)
for (node = &(netdev_list->list); node; node = rt_slist_next(node))
{
netdev = rt_slist_entry(node, struct netdev, list);
- if (netdev && (rt_strncmp(netdev->name, name, rt_strlen(netdev->name) < RT_NAME_MAX ? rt_strlen(netdev->name) : RT_NAME_MAX) == 0))
+ if (netdev && (rt_strncmp(netdev->name, name, rt_strlen(name) < RT_NAME_MAX ? rt_strlen(name) : RT_NAME_MAX) == 0))
{
rt_spin_unlock_irqrestore(&_spinlock, level);
return netdev;
@@ -427,6 +439,8 @@ void netdev_set_default_change_callback(netdev_callback_fn register_callback)
*/
int netdev_set_up(struct netdev *netdev)
{
+ int err = 0;
+
RT_ASSERT(netdev);
if (!netdev->ops || !netdev->ops->set_up)
@@ -442,7 +456,14 @@ int netdev_set_up(struct netdev *netdev)
}
/* execute enable network interface device operations by network interface device driver */
- return netdev->ops->set_up(netdev);
+ err = netdev->ops->set_up(netdev);
+
+#if defined(SAL_USING_AF_NETLINK)
+ if (err)
+ rtnl_ip_notify(netdev, RTM_NEWLINK);
+#endif
+
+ return err;
}
/**
* This function will disable network interface device.
@@ -454,6 +475,8 @@ int netdev_set_up(struct netdev *netdev)
*/
int netdev_set_down(struct netdev *netdev)
{
+ int err;
+
RT_ASSERT(netdev);
if (!netdev->ops || !netdev->ops->set_down)
@@ -469,7 +492,13 @@ int netdev_set_down(struct netdev *netdev)
}
/* execute disable network interface device operations by network interface driver */
- return netdev->ops->set_down(netdev);
+ err = netdev->ops->set_down(netdev);
+#if defined(SAL_USING_AF_NETLINK)
+ if (err)
+ rtnl_ip_notify(netdev, RTM_NEWLINK);
+#endif
+
+ return err;
}
/**
@@ -512,6 +541,7 @@ int netdev_dhcp_enabled(struct netdev *netdev, rt_bool_t is_enabled)
*/
int netdev_set_ipaddr(struct netdev *netdev, const ip_addr_t *ip_addr)
{
+ int err;
RT_ASSERT(netdev);
RT_ASSERT(ip_addr);
@@ -528,7 +558,15 @@ int netdev_set_ipaddr(struct netdev *netdev, const ip_addr_t *ip_addr)
}
/* execute network interface device set IP address operations */
- return netdev->ops->set_addr_info(netdev, (ip_addr_t *)ip_addr, RT_NULL, RT_NULL);
+ err = netdev->ops->set_addr_info(netdev, (ip_addr_t *)ip_addr, RT_NULL, RT_NULL);
+
+#if defined(SAL_USING_AF_NETLINK)
+ if (err == 0)
+ rtnl_ip_notify(netdev, RTM_SETLINK);
+#endif
+
+
+ return err;
}
/**
@@ -1172,6 +1210,7 @@ int netdev_cmd_ping(char* target_name, char *netdev_name, rt_uint32_t times, rt_
struct netdev_ping_resp ping_resp;
rt_uint32_t index;
int ret = 0;
+ rt_bool_t isbind = RT_FALSE;
if (size == 0)
{
@@ -1181,6 +1220,7 @@ int netdev_cmd_ping(char* target_name, char *netdev_name, rt_uint32_t times, rt_
if (netdev_name != RT_NULL)
{
netdev = netdev_get_by_name(netdev_name);
+ isbind = RT_TRUE;
}
if (netdev == RT_NULL)
@@ -1217,7 +1257,7 @@ int netdev_cmd_ping(char* target_name, char *netdev_name, rt_uint32_t times, rt_
rt_memset(&ping_resp, 0x00, sizeof(struct netdev_ping_resp));
start_tick = rt_tick_get();
- ret = netdev->ops->ping(netdev, (const char *)target_name, size, NETDEV_PING_RECV_TIMEO, &ping_resp);
+ ret = netdev->ops->ping(netdev, (const char *)target_name, size, NETDEV_PING_RECV_TIMEO, &ping_resp, isbind);
if (ret == -RT_ETIMEOUT)
{
rt_kprintf("ping: from %s icmp_seq=%d timeout\n",
diff --git a/components/net/sal/Kconfig b/components/net/sal/Kconfig
index fc9dc94101..8028868ddb 100644
--- a/components/net/sal/Kconfig
+++ b/components/net/sal/Kconfig
@@ -34,11 +34,6 @@ if RT_USING_SAL
Enable BSD socket operated by file system API
Let BSD socket operated by file system API, such as read/write and involveed in select/poll POSIX APIs.
- config SAL_USING_AF_UNIX
- bool "Enable support AF_UNIX socket"
- default n
- default y if RT_USING_SMART
-
config SAL_SOCKETS_NUM
int "the maximum number of sockets"
depends on !SAL_USING_POSIX
diff --git a/components/net/sal/include/sal_socket.h b/components/net/sal/include/sal_socket.h
index c5d4cc85ff..bd795a8a32 100644
--- a/components/net/sal/include/sal_socket.h
+++ b/components/net/sal/include/sal_socket.h
@@ -48,17 +48,17 @@ typedef uint16_t in_port_t;
#define SO_KEEPALIVE 0x0008 /* keep connections alive */
#define SO_BROADCAST 0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */
-#define SO_PASSCRED 16
-#define SO_PEERCRED 17
+#define SO_PASSCRED 16
+#define SO_PEERCRED 17
-#define SO_BINDTODEVICE 25
-#define SO_ATTACH_FILTER 26
-#define SO_DETACH_FILTER 27
+#define SO_BINDTODEVICE 25
+#define SO_ATTACH_FILTER 26
+#define SO_DETACH_FILTER 27
-#define SO_SNDBUFFORCE 32
-#define SO_RCVBUFFORCE 33
-#define SO_PROTOCOL 38
-#define SO_DOMAIN 39
+#define SO_SNDBUFFORCE 32
+#define SO_RCVBUFFORCE 33
+#define SO_PROTOCOL 38
+#define SO_DOMAIN 39
/* Additional options, not kept in so_options */
#define SO_DEBUG 0x0001 /* Unimplemented: turn on debugging info recording */
@@ -81,18 +81,21 @@ typedef uint16_t in_port_t;
#define SO_NO_CHECK 0x100a /* don't create UDP checksum */
/* Level number for (get/set)sockopt() to apply to socket itself */
-#define SOL_SOCKET 0xfff /* options for socket level */
+#define SOL_SOCKET 0xfff /* options for socket level */
+#define SOL_NETLINK 270
#define AF_UNSPEC 0
#define AF_UNIX 1
#define AF_INET 2
#define AF_INET6 10
+#define AF_NETLINK 16
#define AF_CAN 29 /* Controller Area Network */
#define AF_AT 45 /* AT socket */
#define AF_WIZ 46 /* WIZnet socket */
#define PF_UNIX AF_UNIX
#define PF_INET AF_INET
#define PF_INET6 AF_INET6
+#define PF_NETLINK AF_NETLINK
#define PF_UNSPEC AF_UNSPEC
#define PF_CAN AF_CAN
#define PF_AT AF_AT
@@ -165,9 +168,9 @@ typedef struct ip_mreq
#define IPTOS_PREC_PRIORITY 0x20
#define IPTOS_PREC_ROUTINE 0x00
-#define SCM_RIGHTS 0x01 /* rw: access rights (array of int) */
-#define SCM_CREDENTIALS 0x02 /* rw: struct ucred */
-#define SCM_SECURITY 0x03 /* rw: security label */
+#define SCM_RIGHTS 0x01 /* rw: access rights (array of int) */
+#define SCM_CREDENTIALS 0x02 /* rw: struct ucred */
+#define SCM_SECURITY 0x03 /* rw: security label */
/* Options for shatdown type */
#ifndef SHUT_RD
@@ -283,7 +286,7 @@ static inline struct cmsghdr *cmsg_nxthdr(struct msghdr *_msg, struct cmsghdr *_
return __cmsg_nxthdr(_msg->msg_control, _msg->msg_controllen, _cmsg);
}
-#define IFNAMSIZ 16
+#define IFNAMSIZ 16
struct sal_ifmap
{
unsigned long int mem_start;
diff --git a/components/net/sal/src/sal_socket.c b/components/net/sal/src/sal_socket.c
index 4733ffebaa..c0bbe02468 100644
--- a/components/net/sal/src/sal_socket.c
+++ b/components/net/sal/src/sal_socket.c
@@ -34,6 +34,10 @@
#include <lwp_sys_socket.h>
#endif
+#if defined(RT_USING_DFS_V2) && defined(SAL_USING_AF_UNIX)
+#include <af_unix.h>
+#endif
+
/* check system workqueue stack size */
#if defined(SAL_INTERNET_CHECK) && RT_SYSTEM_WORKQUEUE_STACKSIZE < 1536
#error "The system workqueue stack size must more than 1536 bytes"
@@ -684,7 +688,7 @@ int sal_bind(int socket, const struct sockaddr *name, socklen_t namelen)
addr_un = (struct sockaddr_un *)name;
- if (addr_un->sa_family != AF_UNIX)
+ if ((addr_un->sa_family != AF_UNIX) && (addr_un->sa_family != AF_NETLINK))
{
/* bind network interface by ip address */
sal_sockaddr_to_ipaddr(name, &input_ipaddr);