diff --git a/interface.cpp b/interface.cpp index 26fed85..56c9ea9 100644 --- a/interface.cpp +++ b/interface.cpp @@ -19,6 +19,8 @@ extern "C" { #include #include #include +#include +#include #define BUFLEN 65535 #define ADDRBUFLEN BUFLEN @@ -502,6 +504,17 @@ QStringList Interface::list() { nl_cache_free(link_cache); nl_socket_free(sock); + // workaround for libnl issue: https://github.com/tgraf/libnl/issues/49 + // find any interfaces libnl doesn't know about (e.g. USB wireless adapters after they're been unplugged and replugged) + QDir dir("/sys/class/net"); + QStringList interfaces = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); + + foreach(QString interface, interfaces) { + if(!linkList.contains(interface)) { + linkList << interface; + } + } + return linkList; } diff --git a/iptest/iptest.cpp b/iptest/iptest.cpp index 2577b6c..f53375c 100644 --- a/iptest/iptest.cpp +++ b/iptest/iptest.cpp @@ -45,7 +45,7 @@ int main(int argc, char *argv[]) { //interface.deleteAddress("1.1.1.5/29"); - Wireless wi("wlp0s11u1"); + Wireless wi("wlp0s29u1u2"); QList bands = wi.bandMap(); diff --git a/wireless.cpp b/wireless.cpp index 4cc1b7c..ce60b36 100644 --- a/wireless.cpp +++ b/wireless.cpp @@ -113,7 +113,7 @@ m_iftype(NL80211_IFTYPE_UNSPECIFIED) } Wireless::~Wireless() { - std::cerr << "del wireless" << std::endl; + //std::cerr << "del wireless" << std::endl; m_bands.clear(); } @@ -148,7 +148,7 @@ bool Wireless::parseBands() { if(!(Utils::interfaceIndex(interfaceStr))) { fprintf(stderr, "Interface %s doesn't exist\n", interfaceStr); }else{ - fprintf(stderr, "could not find a parent phy device for interface %s, it isn't nl80211?\n", interfaceStr); + //fprintf(stderr, "could not find a parent phy device for interface %s, it isn't nl80211?\n", interfaceStr); } nlmsg_free(msg);