diff options
| author | guo <[email protected]> | 2021-09-28 10:36:54 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-09-28 10:36:54 +0800 |
| commit | 55a302cd092758a44b589d65470a69d9e8ae4ced (patch) | |
| tree | e60fc53994c426007e9eb4877e5bd123f124ef39 /components/net/netdev/src/netdev.c | |
| parent | 00727d6b6db92dc1cf98f028f26fd6168594b905 (diff) | |
| parent | 00d42ef73cff61ecda7ff006b077a73e1a4ff669 (diff) | |
Merge branch 'master' into usbh_construct
Diffstat (limited to 'components/net/netdev/src/netdev.c')
| -rw-r--r-- | components/net/netdev/src/netdev.c | 50 |
1 files changed, 43 insertions, 7 deletions
diff --git a/components/net/netdev/src/netdev.c b/components/net/netdev/src/netdev.c index 76a937cc75..4c5d524510 100644 --- a/components/net/netdev/src/netdev.c +++ b/components/net/netdev/src/netdev.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2019, RT-Thread Development Team + * Copyright (c) 2006-2021, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -10,6 +10,7 @@ #include <stdio.h> #include <string.h> +#include <stdlib.h> #include <rtthread.h> #include <rthw.h> @@ -77,6 +78,14 @@ int netdev_register(struct netdev *netdev, const char *name, void *user_data) netdev->status_callback = RT_NULL; netdev->addr_callback = RT_NULL; + if(rt_strlen(name) > RT_NAME_MAX) + { + char netdev_name[RT_NAME_MAX + 1] = {0}; + + rt_strncpy(netdev_name, name, RT_NAME_MAX); + LOG_E("netdev name[%s] length is so long that have been cut into [%s].", name, netdev_name); + } + /* fill network interface device */ rt_strncpy(netdev->name, name, RT_NAME_MAX); netdev->user_data = user_data; @@ -260,7 +269,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_NAME_MAX) == 0)) + if (netdev && (rt_strncmp(netdev->name, name, rt_strlen(netdev->name) < RT_NAME_MAX ? rt_strlen(netdev->name) : RT_NAME_MAX) == 0)) { rt_hw_interrupt_enable(level); return netdev; @@ -821,6 +830,34 @@ void netdev_low_level_set_link_status(struct netdev *netdev, rt_bool_t is_up) } /** + * This function will set network interface device active internet status. + * @NOTE it can only be called in the network interface device driver. + * + * @param netdev the network interface device to change + * @param is_up the new internet status + */ +void netdev_low_level_set_internet_status(struct netdev *netdev, rt_bool_t is_up) +{ + if (netdev && netdev_is_internet_up(netdev) != is_up) + { + if (is_up) + { + netdev->flags |= NETDEV_FLAG_INTERNET_UP; + } + else + { + netdev->flags &= ~NETDEV_FLAG_INTERNET_UP; + } + + /* execute network interface device status change callback function */ + if (netdev->status_callback) + { + netdev->status_callback(netdev, is_up ? NETDEV_CB_STATUS_INTERNET_UP : NETDEV_CB_STATUS_INTERNET_DOWN); + } + } +} + +/** * This function will set network interface device DHCP status. * @NOTE it can only be called in the network interface device driver. * @@ -1011,7 +1048,7 @@ int netdev_ifconfig(int argc, char **argv) return 0; } -FINSH_FUNCTION_EXPORT_ALIAS(netdev_ifconfig, __cmd_ifconfig, list the information of all network interfaces); +MSH_CMD_EXPORT_ALIAS(netdev_ifconfig, ifconfig, list the information of all network interfaces); #endif /* NETDEV_USING_IFCONFIG */ #ifdef NETDEV_USING_PING @@ -1116,7 +1153,7 @@ int netdev_ping(int argc, char **argv) return 0; } -FINSH_FUNCTION_EXPORT_ALIAS(netdev_ping, __cmd_ping, ping network host); +MSH_CMD_EXPORT_ALIAS(netdev_ping, ping, ping network host); #endif /* NETDEV_USING_IFCONFIG */ static void netdev_list_dns(void) @@ -1186,8 +1223,7 @@ int netdev_dns(int argc, char **argv) return 0; } -FINSH_FUNCTION_EXPORT_ALIAS(netdev_dns, __cmd_dns, list and set the information of dns); - +MSH_CMD_EXPORT_ALIAS(netdev_dns, dns, list and set the information of dns); #ifdef NETDEV_USING_NETSTAT static void netdev_cmd_netstat(void) { @@ -1234,7 +1270,7 @@ int netdev_netstat(int argc, char **argv) return 0; } -FINSH_FUNCTION_EXPORT_ALIAS(netdev_netstat, __cmd_netstat, list the information of TCP / IP); +MSH_CMD_EXPORT_ALIAS(netdev_netstat, netstat, list the information of TCP / IP); #endif /* NETDEV_USING_NETSTAT */ #endif /* RT_USING_FINSH */ |
