sync update net. (#8333)

This commit is contained in:
geniusgogo
2023-12-05 23:09:19 +08:00
committed by GitHub
parent 474a55ea36
commit 3bc29c7673
11 changed files with 139 additions and 64 deletions
+1 -1
View File
@@ -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
+45 -5
View File
@@ -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",