--- /usr/lib/python2.7/site-packages/wicd/wnettools.py 2012-10-16 03:23:12.000000000 +0200 +++ tmp/wnettools.py 2012-11-14 11:45:09.704667937 +0100 @@ -131,6 +131,26 @@ print 'couldn\'t retrieve default gateway from route -n' return gateway +def isWireless(devname): + """ + classic style wifi device classification using linux/wireless.h + This should be extended or replaced by nl80211.h style classification + in the future, if wireless.h is fully replaced. + """ + we = None + for t in [socket.AF_INET, socket.AF_INET6, socket.AF_IPX, socket.AF_AX25, socket.AF_APPLETALK ]: + sk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + if sk is not None: break + skfd = sk.fileno() + try: + #define SIOCGIWNAME 0x8b01 in linux/wireless.h + # "used to verify the presence of wireless extensions" + we = fcntl.ioctl(skfd, 0x8b01, devname) + except: + pass + sk.close() + return we is not None + def GetWirelessInterfaces(): """ Get available wireless interfaces. @@ -141,9 +161,8 @@ """ dev_dir = '/sys/class/net/' - ifnames = [iface for iface in os.listdir(dev_dir) - if os.path.isdir(dev_dir + iface) and - 'wireless' in os.listdir(dev_dir + iface)] + ifnames = [iface for iface in os.listdir(dev_dir) and + isWireless(str(iface))] return ifnames