From 569a9f752653687000935df2ff132fb1091a5c62 Mon Sep 17 00:00:00 2001 From: WraithWireless Date: Wed, 13 Jul 2016 22:51:33 -0600 Subject: [PATCH] v0.1.5 phylist w.r.t Issue #17 --- CHANGES | 4 +++- README.md | 2 ++ docs/PyRIC.pdf | Bin 506817 -> 507207 bytes docs/PyRIC.tex | 2 ++ pyric/pyw.py | 12 ++++++++++++ pyric/utils/hardware.py | 2 +- 6 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index b073b2e..22ab545 100644 --- a/CHANGES +++ b/CHANGES @@ -123,6 +123,7 @@ v 0.1.5 Begin STA associated functionality - link - stainfo - devset + - phylist o updated nested netlink attribute handling - my understanding of it was incomplete - There are still occasional errors - nested attributes are parsed as 'far' as possible @@ -142,4 +143,5 @@ v 0.1.5 Begin STA associated functionality testing confirms that the new nla_parse_nested is bug-free) o fixed error on devadd during restoration in examples/pentest.py o fixed output error, incorrect labeling - o fixed output error ASW max tx power \ No newline at end of file + o fixed output error ASW max tx power + o added phylist w.r.t issue #17 \ No newline at end of file diff --git a/README.md b/README.md index 734bd14..93b6db4 100644 --- a/README.md +++ b/README.md @@ -205,6 +205,8 @@ False False >>> pyw.iswinterface('wlan0') True +>>> pyw.phylist() # list all current phys (Note device ASW phy1) +[(1,'phy1), (0, 'phy0')] >>> pyw.regget() # get the regulatory domain 'US' >>> pyw.regset('BO') # set the regulatory domain diff --git a/docs/PyRIC.pdf b/docs/PyRIC.pdf index 137d5c0f04e08594ecbf1f691fe36b1e8ed72284..2f9bbfe0e1c654ab739a520dba6ea06783f8c882 100644 GIT binary patch delta 17306 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, type: ioctl, check dev is a wireless interface +\item phylist(): (iw phy | grep wiphy) type: N/A, list phy indexes and phy names +present on system \item regget([nlsock]: (iw reg get), type: netlink, get regulatory domain \item regset(rd,[nlsock]): (iw reg set ), type: netlink, set regulatory domain to rd diff --git a/pyric/pyw.py b/pyric/pyw.py index 3df5811..feba91b 100644 --- a/pyric/pyw.py +++ b/pyric/pyw.py @@ -170,6 +170,18 @@ def iswireless(dev, *argv): if e.errno == pyric.ENODEV or e.errno == pyric.EOPNOTSUPP: return False else: raise pyric.error(e.errno, e.strerror) +def phylist(): + """ :returns: a list of tuples t = (physical indexe, physical name) """ + # we could walk the directory /sys/class/ieee80211 as well but we'll + # let rfkill do it (just in case the above path differs across distros or + # in future upgrades + phys = [] + rfdevs = rfkill.rfkill_list() + for rfk in rfdevs: + if rfdevs[rfk]['type'] == 'wlan': + phys.append((int(rfk.split('phy')[1]),rfk)) + return phys + def regget(*argv): """ gets the current regulatory domain (iw reg get) diff --git a/pyric/utils/hardware.py b/pyric/utils/hardware.py index f68777a..022860e 100644 --- a/pyric/utils/hardware.py +++ b/pyric/utils/hardware.py @@ -20,7 +20,7 @@ contributors may be used to endorse or promote products derived from this software without specific prior written permission. -Defines device hardware related functions: mac address, driver, chipset +Defines device hardware related functions: mac address, driver, chipset etc """