summaryrefslogtreecommitdiff
path: root/components/net/sal/src/sal_socket.c
diff options
context:
space:
mode:
authorxiao-mang <[email protected]>2023-10-24 13:16:29 +0800
committerGitHub <[email protected]>2023-10-24 13:16:29 +0800
commit50bb71e458efd32e28b4e3d79cf3aded76dd8f64 (patch)
tree4d2c43727e4225b08a98cd419bef6a838f641c00 /components/net/sal/src/sal_socket.c
parent6eb7fa2f6c5b95ecc2d6cbd8cf047e9593777e90 (diff)
fix ash ifconfig updown (#8165)
Diffstat (limited to 'components/net/sal/src/sal_socket.c')
-rw-r--r--components/net/sal/src/sal_socket.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/components/net/sal/src/sal_socket.c b/components/net/sal/src/sal_socket.c
index d8a68fa0ee..51aa8ce0f4 100644
--- a/components/net/sal/src/sal_socket.c
+++ b/components/net/sal/src/sal_socket.c
@@ -1314,9 +1314,9 @@ int sal_ioctlsocket(int socket, long cmd, void *arg)
if (!strcmp(ifr->ifr_ifrn.ifrn_name, netdev->name))
{
uint16_t flags_tmp = 0;
- if (sock->netdev->flags & NETDEV_FLAG_UP)
+ if (netdev->flags & NETDEV_FLAG_UP)
flags_tmp = flags_tmp | IFF_UP;
- if (!(sock->netdev->flags & NETDEV_FLAG_ETHARP))
+ if (!(netdev->flags & NETDEV_FLAG_ETHARP))
flags_tmp = flags_tmp | IFF_NOARP;
ifr->ifr_ifru.ifru_flags = flags_tmp;
return 0;
@@ -1327,8 +1327,24 @@ int sal_ioctlsocket(int socket, long cmd, void *arg)
case SIOCSIFFLAGS:
- sock->netdev->flags = ifr->ifr_ifru.ifru_flags;
- return 0;
+ for (node = &(cur_netdev_list->list); node; node = rt_slist_next(node))
+ {
+ netdev = rt_list_entry(node, struct netdev, list);
+ if (!strcmp(ifr->ifr_ifrn.ifrn_name, netdev->name))
+ {
+ if ((ifr->ifr_ifru.ifru_flags & IFF_UP) == 0)
+ {
+ netdev_set_down(netdev);
+ }
+ else
+ {
+ netdev_set_up(netdev);
+ }
+ return 0;
+ }
+ }
+ return -1;
+
case SIOCGIFCONF:
{
struct ifconf *ifconf_tmp;