From b54778a35ac2036ea67e980087acda615ba777dc Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Wed, 21 Sep 2022 18:47:39 +0200 Subject: [PATCH] fixup! net/gnrc_netif: add gnrc_netif_up()/gnrc_netif_down() --- sys/net/gnrc/netif/gnrc_netif.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/sys/net/gnrc/netif/gnrc_netif.c b/sys/net/gnrc/netif/gnrc_netif.c index b8897d69c94a..1d647024042d 100644 --- a/sys/net/gnrc/netif/gnrc_netif.c +++ b/sys/net/gnrc/netif/gnrc_netif.c @@ -1464,11 +1464,28 @@ bool gnrc_netif_ipv6_wait_for_global_address(gnrc_netif_t *netif, static int _change_state_and_wait(gnrc_netif_t *netif, netopt_state_t state, unsigned timeout_ms) { int res = 0; + + netopt_state_t state_prev; + while (gnrc_netapi_get(netif->pid, NETOPT_STATE, 0, &state_prev, sizeof(state_prev)) == -EBUSY) {} + + if (state == state_prev) { + return 0; + } + #if IS_USED(MODULE_GNRC_NETIF_BUS) + gnrc_netif_event_t event; + + if ((state == NETOPT_STATE_SLEEP) || (state == NETOPT_STATE_OFF) || + (state == NETOPT_STATE_STANDBY)) { + event = GNRC_NETIF_EVENT_LINK_STATE_CHANGED_DOWN; + } else { + event = GNRC_NETIF_EVENT_LINK_STATE_CHANGED_UP; + } + msg_bus_entry_t sub; msg_bus_t *bus = gnrc_netif_get_bus(netif, GNRC_NETIF_BUS_IFACE); msg_bus_attach(bus, &sub); - msg_bus_subscribe(&sub, GNRC_IPV6_EVENT_ADDR_VALID); + msg_bus_subscribe(&sub, event); #endif while (gnrc_netapi_set(netif->pid, NETOPT_STATE, 0, &state, sizeof(state)) == -EBUSY) {}