mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-22 11:30:01 +08:00
sync update net. (#8333)
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user