3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-11-22 23:09:34 +01:00

core: Add sanity check to sync RTNL link deletion with nl80211

This commit is contained in:
Marcel Holtmann 2014-08-06 23:52:42 -07:00
parent 46b9f4a0a8
commit b7a421673c
3 changed files with 28 additions and 0 deletions

View File

@ -30,6 +30,7 @@
#include <net/if.h> #include <net/if.h>
#include <ell/ell.h> #include <ell/ell.h>
#include "src/wiphy.h"
#include "src/netdev.h" #include "src/netdev.h"
struct netdev_data { struct netdev_data {
@ -92,6 +93,8 @@ static void dellink_notify(const struct ifinfomsg *ifi, int bytes)
struct netdev_data *netdev; struct netdev_data *netdev;
uint32_t index = ifi->ifi_index; uint32_t index = ifi->ifi_index;
wiphy_notify_dellink(index);
netdev = l_hashmap_remove(netdev_list, L_UINT_TO_PTR(index)); netdev = l_hashmap_remove(netdev_list, L_UINT_TO_PTR(index));
if (!netdev) if (!netdev)
return; return;

View File

@ -443,3 +443,25 @@ bool wiphy_exit(void)
return true; return true;
} }
static void wiphy_check_dellink(void *data, void *user_data)
{
uint32_t index = L_PTR_TO_UINT(user_data);
struct wiphy *wiphy = data;
struct netdev *netdev;
netdev = l_queue_remove_if(wiphy->netdev_list, netdev_match,
L_UINT_TO_PTR(index));
if (netdev) {
l_warn("Removing leftover interface %s", netdev->name);
netdev_free(netdev);
}
}
void wiphy_notify_dellink(uint32_t index)
{
if (!wiphy_list)
return;
l_queue_foreach(wiphy_list, wiphy_check_dellink, L_UINT_TO_PTR(index));
}

View File

@ -20,7 +20,10 @@
* *
*/ */
#include <stdint.h>
#include <stdbool.h> #include <stdbool.h>
bool wiphy_init(void); bool wiphy_init(void);
bool wiphy_exit(void); bool wiphy_exit(void);
void wiphy_notify_dellink(uint32_t index);