From 5db412b13883d61898366f0b19a24b16d12d8685 Mon Sep 17 00:00:00 2001 From: xiangxistu Date: Thu, 31 Dec 2020 11:53:30 +0800 Subject: [PATCH] [add] a new function to manage internet check. Signed-off-by: xiangxistu --- components/net/Kconfig | 6 ++++++ components/net/sal_socket/src/sal_socket.c | 25 ++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/components/net/Kconfig b/components/net/Kconfig index 3a4f39ed49..e1c34f754e 100644 --- a/components/net/Kconfig +++ b/components/net/Kconfig @@ -10,6 +10,12 @@ config RT_USING_SAL if RT_USING_SAL + config SAL_INTERNET_CHECK + bool "Enable the ability that check internet status" + default y + help + The ability that check internet status is provided by RT-Thread. + if RT_USING_LWIP || AT_USING_SOCKET menu "protocol stack implement" diff --git a/components/net/sal_socket/src/sal_socket.c b/components/net/sal_socket/src/sal_socket.c index c3e1c15749..fa94184f68 100644 --- a/components/net/sal_socket/src/sal_socket.c +++ b/components/net/sal_socket/src/sal_socket.c @@ -21,7 +21,9 @@ #include #include +#ifdef SAL_INTERNET_CHECK #include +#endif /* check system workqueue stack size */ #if RT_SYSTEM_WORKQUEUE_STACKSIZE < 1536 @@ -45,7 +47,7 @@ struct sal_socket_table struct sal_netdev_res_table { struct addrinfo *res; - struct netdev *netdev; + struct netdev *netdev; }; #ifdef SAL_USING_TLS @@ -131,7 +133,7 @@ int sal_init(void) /*init the dev_res table */ rt_memset(sal_dev_res_tbl, 0, sizeof(sal_dev_res_tbl)); - + /* create sal socket lock */ rt_mutex_init(&sal_core_lock, "sal_lock", RT_IPC_FLAG_FIFO); @@ -142,6 +144,7 @@ int sal_init(void) } INIT_COMPONENT_EXPORT(sal_init); +#ifdef SAL_INTERNET_CHECK /* check SAL network interface device internet status */ static void check_netdev_internet_up_work(struct rt_work *work, void *work_data) { @@ -271,6 +274,7 @@ __exit: skt_ops->closesocket(sockfd); } } +#endif /* SAL_INTERNET_CHECK */ /** * This function will check SAL network interface device internet status. @@ -279,10 +283,12 @@ __exit: */ int sal_check_netdev_internet_up(struct netdev *netdev) { + RT_ASSERT(netdev); + +#ifdef SAL_INTERNET_CHECK /* workqueue for network connect */ struct rt_delayed_work *net_work = RT_NULL; - RT_ASSERT(netdev); net_work = (struct rt_delayed_work *)rt_calloc(1, sizeof(struct rt_delayed_work)); if (net_work == RT_NULL) @@ -293,7 +299,18 @@ int sal_check_netdev_internet_up(struct netdev *netdev) rt_delayed_work_init(net_work, check_netdev_internet_up_work, (void *)netdev); rt_work_submit(&(net_work->work), RT_TICK_PER_SECOND); +#else + if(netdev_is_link_up(netdev)) + { + netdev->flags |= NETDEV_FLAG_INTERNET_UP; + } + else + { + netdev->flags &= ~NETDEV_FLAG_INTERNET_UP; + } + LOG_D("You have shut down internet check function, internet status is subject to link status."); +#endif /* SAL_INTERNET_CHECK */ return 0; } @@ -1138,7 +1155,7 @@ int sal_getaddrinfo(const char *nodename, } RT_ASSERT((i < SAL_SOCKETS_NUM)); - + } return ret;