I got a strange problem with newer kernel (post 4.8 stable) with hwsim.
Our current code works like this:

modprobe mac80211_hwsim radios=10


This will create all hwsim_interfaces in the first hwsim "netgroup"
within the default network namespace. But the code to lookup the genl
"MAC80211_HWSIM" protocol fails. Moreover some calls fails, other not ...

    //family = genl_ctrl_search_by_name(cache, "MAC80211_HWSIM"); -->
fails directly (return NULL)

    int hwsim_netlink_id = genl_ctrl_resolve(sock,"MAC80211_HWSIM");   
    if (hwsim_netlink_id == 0)
        printf("Family MAC80211_HWSIM ID not found\n");
    printf("Family ID found (%d), search for structure
    family = genl_ctrl_search(cache, hwsim_netlink_id);
    if (family == NULL)
        printf("Family MAC80211_HWSIM family not found\n");

this will output:

"Family ID found (28), seatch for structure

Family MAC80211_HWSIM family not found"

But when I start the code in some network namespace, it works (but works
with no interfaces, as they stay in default network namespace). Of
course a workaround is easy, but it definitely breaks some legacy code,
working the same way. I reviewed the recent changes of hwsim regarding
namespaces, but I found no bug. The initial hwsim-devices are created in
netgroup 0 and the default namespace and I don't see any differentiation
of the netlink protocol registration, which depends on network
namespaces. Maybe there is a bug in libnl, but currently I have no Idea,
how to track down the issue.

Any suggestions ?

Reply via email to