summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;