summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2023-07-25 11:40:22 (GMT)
committerThomas Haller <thaller@redhat.com>2023-07-25 11:40:22 (GMT)
commit5a21bde6ae90cab25c6d14199bb506fc30074015 (patch)
tree57d58159655eee90bf6342dde59c78aca77deb4a
parent143cee1d381753c3ff01d51b39d77117d5c59bd2 (diff)
parent02e0fd3fab42d7f37a78ecadc688e800e0014a7d (diff)
downloadlibnl-5a21bde6ae90cab25c6d14199bb506fc30074015.zip
libnl-5a21bde6ae90cab25c6d14199bb506fc30074015.tar.gz
libnl-5a21bde6ae90cab25c6d14199bb506fc30074015.tar.bz2
python: merge branch 'th/black'
-rw-r--r--.git-blame-ignore-revs6
-rw-r--r--.github/workflows/ci.yml12
-rwxr-xr-xdoc/doxygen-link.py56
-rwxr-xr-xdoc/resolve-asciidoc-refs.py28
-rw-r--r--pyproject.toml8
-rw-r--r--python/doc/conf.py120
-rw-r--r--python/examples/iface.py166
-rw-r--r--python/examples/nl80211.py1408
-rw-r--r--python/examples/wiphy.py241
-rw-r--r--python/netlink/core.py84
-rw-r--r--python/netlink/route/address.py59
-rw-r--r--python/netlink/route/link.py188
-rw-r--r--python/netlink/route/links/bridge.py38
-rw-r--r--python/netlink/route/links/dummy.py7
-rw-r--r--python/netlink/route/links/inet.py61
-rw-r--r--python/netlink/route/links/vlan.py15
-rw-r--r--python/netlink/route/qdisc/htb.py28
-rw-r--r--python/netlink/route/tc.py273
-rw-r--r--python/netlink/util.py64
-rw-r--r--python/setup.py.in85
-rw-r--r--python/tests/test-create-bridge.py10
21 files changed, 1562 insertions, 1395 deletions
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
new file mode 100644
index 0000000..9cfd55c
--- /dev/null
+++ b/.git-blame-ignore-revs
@@ -0,0 +1,6 @@
+# List of commits that did automated reformatting. You can ignore them
+# during git-blame with `--ignore-rev` or `--ignore-revs-file`.
+#
+# $ git config --add 'blame.ignoreRevsFile' '.git-blame-ignore-revs'
+#
+3c753e3c94b01c63bf99b2709f4780e2df4608eb
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 89a1553..3457095 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -31,10 +31,17 @@ jobs:
python-version: 3.x
- name: Lint Python
+ if: ${{ matrix.cc == 'gcc' }}
run: |
python3 -m pip install flake8
flake8 . --count --select=E703,E9,F63,F7,F82,Y --show-source --statistics
+ - name: Code formatting with Python black
+ if: ${{ matrix.cc == 'gcc' }}
+ run: |
+ python3 -m pip install black==22.12.0
+ black --check .
+
- name: Build
run: |
set -x
@@ -72,7 +79,6 @@ jobs:
- name: Install packages for Release
run: |
- test "${{ matrix.cc }}" == gcc || exit 0
python3 -m pip install \
asciidoc \
graphviz \
@@ -85,17 +91,15 @@ jobs:
- name: Build Release
run: |
- test "${{ matrix.cc }}" == gcc || exit 0
set -x
git clean -fdx
+ export CC="${{ matrix.cc }}"
NO_GPG_SIGN=1 ./tools/build_release.sh BuildAll
- name: Build out-of-tree and disable-static
run: |
set -x
-
git clean -fdx
-
export CC="${{ matrix.cc }}"
export CFLAGS="-Werror -Wall -Wdeclaration-after-statement -Wvla -std=gnu11"
if [ "$CC" = "clang" ]; then
diff --git a/doc/doxygen-link.py b/doc/doxygen-link.py
index 1f3f67c..8f3cbcc 100755
--- a/doc/doxygen-link.py
+++ b/doc/doxygen-link.py
@@ -6,38 +6,42 @@ import re
import sys
-rc_script = re.compile(r'\s*(.*\S)?\s*')
+rc_script = re.compile(r"\s*(.*\S)?\s*")
+
def parse_dict(filename):
- links = {}
- for line in open(filename, 'r'):
- m = re.match('^([^=]+)=([^\n]+)$', line)
- if not m:
- continue
- name = m.group(1)
- value = m.group(2)
-
- # strip leading and trailing whitespace
- m = rc_script.match(name)
- if m:
- name = m.group(1)
-
- # skip special names
- if name == '':
- continue
- if name == '\\':
- continue
-
- links[name] = "<a href=\"" + value + "\" class=\"dg\">" + name + "</a>"
- return links
+ links = {}
+ for line in open(filename, "r"):
+ m = re.match("^([^=]+)=([^\n]+)$", line)
+ if not m:
+ continue
+ name = m.group(1)
+ value = m.group(2)
+
+ # strip leading and trailing whitespace
+ m = rc_script.match(name)
+ if m:
+ name = m.group(1)
+
+ # skip special names
+ if name == "":
+ continue
+ if name == "\\":
+ continue
+
+ links[name] = '<a href="' + value + '" class="dg">' + name + "</a>"
+ return links
+
links = parse_dict(sys.argv[1])
+
def translate(match):
- return links[match.group(1)]
+ return links[match.group(1)]
+
# match for all names, with word boundaries \b
-rc = re.compile(r'\b(' + '|'.join(map(re.escape, sorted(links, reverse=True))) + r')\b')
+rc = re.compile(r"\b(" + "|".join(map(re.escape, sorted(links, reverse=True))) + r")\b")
-for line in open(sys.argv[2], 'r'):
- print(rc.sub(translate, line), end='')
+for line in open(sys.argv[2], "r"):
+ print(rc.sub(translate, line), end="")
diff --git a/doc/resolve-asciidoc-refs.py b/doc/resolve-asciidoc-refs.py
index 7999156..e7d79fe 100755
--- a/doc/resolve-asciidoc-refs.py
+++ b/doc/resolve-asciidoc-refs.py
@@ -9,19 +9,21 @@ import sys
refs = {}
complete_file = ""
-for line in open(sys.argv[1], 'r'):
- complete_file += line
+for line in open(sys.argv[1], "r"):
+ complete_file += line
+
+for m in re.findall("\[\[(.+)\]\]\n=+ ([^\n]+)", complete_file):
+ ref, title = m
+ refs["<<" + ref + ">>"] = "<<" + ref + ", " + title + ">>"
-for m in re.findall('\[\[(.+)\]\]\n=+ ([^\n]+)', complete_file):
- ref, title = m
- refs["<<" + ref + ">>"] = "<<" + ref + ", " + title + ">>"
def translate(match):
- try:
- return refs[match.group(0)]
- except KeyError:
- return ""
-
-rc = re.compile('|'.join(map(re.escape, sorted(refs, reverse=True))))
-for line in open(sys.argv[1], 'r'):
- print(rc.sub(translate, line), end='')
+ try:
+ return refs[match.group(0)]
+ except KeyError:
+ return ""
+
+
+rc = re.compile("|".join(map(re.escape, sorted(refs, reverse=True))))
+for line in open(sys.argv[1], "r"):
+ print(rc.sub(translate, line), end="")
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..bce61cb
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,8 @@
+[tool.black]
+target-versions = ["py37", "py38", "py39", "py310"]
+include = '''
+ (
+ \.py$
+ | \.py\.in$
+ )
+ '''
diff --git a/python/doc/conf.py b/python/doc/conf.py
index 74041f0..97f931a 100644
--- a/python/doc/conf.py
+++ b/python/doc/conf.py
@@ -16,194 +16,199 @@ import sys, os
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.insert(0, os.path.abspath('.'))
+# sys.path.insert(0, os.path.abspath('.'))
# -- General configuration -----------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
+# needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['sphinx.ext.todo', 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode']
+extensions = ["sphinx.ext.todo", "sphinx.ext.ifconfig", "sphinx.ext.viewcode"]
# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
+templates_path = ["_templates"]
# The suffix of source filenames.
-source_suffix = '.rst'
+source_suffix = ".rst"
# The encoding of source files.
-#source_encoding = 'utf-8-sig'
+# source_encoding = 'utf-8-sig'
# The master toctree document.
-master_doc = 'index'
+master_doc = "index"
# General information about the project.
-project = u'libnl-python'
-copyright = u'2011, Thomas Graf <tgraf@suug.ch>'
+project = "libnl-python"
+copyright = "2011, Thomas Graf <tgraf@suug.ch>"
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
-version = '1.0'
+version = "1.0"
# The full version, including alpha/beta/rc tags.
-release = '1.0'
+release = "1.0"
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
-#language = None
+# language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
-#today = ''
+# today = ''
# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
+# today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
-exclude_patterns = ['_build']
+exclude_patterns = ["_build"]
# The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
+# default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
+# add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
-#add_module_names = True
+# add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
-#show_authors = False
+# show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
+pygments_style = "sphinx"
# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
+# modindex_common_prefix = []
# -- Options for HTML output ---------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
-html_theme = 'default'
+html_theme = "default"
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
-#html_theme_options = {}
+# html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
+# html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
-#html_title = None
+# html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
-#html_short_title = None
+# html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
-#html_logo = None
+# html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
-#html_favicon = None
+# html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
+html_static_path = ["_static"]
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
+# html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
-#html_use_smartypants = True
+# html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
+# html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
-#html_additional_pages = {}
+# html_additional_pages = {}
# If false, no module index is generated.
-#html_domain_indices = True
+# html_domain_indices = True
# If false, no index is generated.
-#html_use_index = True
+# html_use_index = True
# If true, the index is split into individual pages for each letter.
-#html_split_index = False
+# html_split_index = False
# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
+# html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
+# html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
+# html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
+# html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
+# html_file_suffix = None
# Output file base name for HTML help builder.
-htmlhelp_basename = 'libnl-pythondoc'
+htmlhelp_basename = "libnl-pythondoc"
# -- Options for LaTeX output --------------------------------------------------
# The paper size ('letter' or 'a4').
-#latex_paper_size = 'letter'
+# latex_paper_size = 'letter'
# The font size ('10pt', '11pt' or '12pt').
-#latex_font_size = '10pt'
+# latex_font_size = '10pt'
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
- ('index', 'libnl-python.tex', u'libnl-python Documentation',
- u'Thomas Graf \\textless{}tgraf@suug.ch\\textgreater{}', 'manual'),
+ (
+ "index",
+ "libnl-python.tex",
+ "libnl-python Documentation",
+ "Thomas Graf \\textless{}tgraf@suug.ch\\textgreater{}",
+ "manual",
+ ),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
-#latex_logo = None
+# latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
-#latex_use_parts = False
+# latex_use_parts = False
# If true, show page references after internal links.
-#latex_show_pagerefs = False
+# latex_show_pagerefs = False
# If true, show URL addresses after external links.
-#latex_show_urls = False
+# latex_show_urls = False
# Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
+# latex_preamble = ''
# Documents to append as an appendix to all manuals.
-#latex_appendices = []
+# latex_appendices = []
# If false, no module index is generated.
-#latex_domain_indices = True
+# latex_domain_indices = True
# -- Options for manual page output --------------------------------------------
@@ -211,6 +216,11 @@ latex_documents = [
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
- ('index', 'libnl-python', u'libnl-python Documentation',
- [u'Thomas Graf <tgraf@suug.ch>'], 1)
+ (
+ "index",
+ "libnl-python",
+ "libnl-python Documentation",
+ ["Thomas Graf <tgraf@suug.ch>"],
+ 1,
+ )
]
diff --git a/python/examples/iface.py b/python/examples/iface.py
index ddf5f12..8cc8df5 100644
--- a/python/examples/iface.py
+++ b/python/examples/iface.py
@@ -5,90 +5,108 @@ import nl80211
import sys
import traceback
+
class test_class:
- def __init__(self):
- self.done = 1
+ def __init__(self):
+ self.done = 1
+
def msg_handler(m, a):
- try:
- e, attr = genl.py_genlmsg_parse(nl.nlmsg_hdr(m), 0,
- nl80211.NL80211_ATTR_MAX, None)
- if nl80211.NL80211_ATTR_WIPHY in attr:
- thiswiphy = nl.nla_get_u32(attr[nl80211.NL80211_ATTR_WIPHY])
- print("phy#%d" % thiswiphy)
- if nl80211.NL80211_ATTR_IFNAME in attr:
- print("\tinterface %s" % nl.nla_get_string(attr[nl80211.NL80211_ATTR_IFNAME]))
- if nl80211.NL80211_ATTR_IFINDEX in attr:
- print("\tifindex %d" % nl.nla_get_u32(attr[nl80211.NL80211_ATTR_IFINDEX]))
- if nl80211.NL80211_ATTR_WDEV in attr:
- print("\twdev 0x%lx" % nl.nla_get_u64(attr[nl80211.NL80211_ATTR_WDEV]))
- if nl80211.NL80211_ATTR_MAC in attr:
- print("\tmac %02x:%02x:%02x:%02x:%02x:%02x" % tuple(nl.nla_data(attr[nl80211.NL80211_ATTR_MAC])))
- if nl80211.NL80211_ATTR_SSID in attr:
- print("\tssid ", nl.nla_data(attr[nl80211.NL80211_ATTR_SSID]))
- if nl80211.NL80211_ATTR_IFTYPE in attr:
- iftype = nl.nla_get_u32(attr[nl80211.NL80211_ATTR_IFTYPE])
- print("\ttype %s" % nl80211.nl80211_iftype2str[iftype])
- if nl80211.NL80211_ATTR_WIPHY_FREQ in attr:
- freq = nl.nla_get_u32(attr[nl80211.NL80211_ATTR_WIPHY_FREQ])
-
- sys.stdout.write("\tfreq %d MHz" % freq)
-
- if nl80211.NL80211_ATTR_CHANNEL_WIDTH in attr:
- chanw = nl.nla_get_u32(attr[nl80211.NL80211_ATTR_CHANNEL_WIDTH])
- sys.stdout.write(", width: %s" % nl80211.nl80211_chan_width2str[chanw])
- if nl80211.NL80211_ATTR_CENTER_FREQ1 in attr:
- sys.stdout.write(", center1: %d MHz" %
- nl.nla_get_u32(attr[nl80211.NL80211_ATTR_CENTER_FREQ1]))
- if nl80211.NL80211_ATTR_CENTER_FREQ2 in attr:
- sys.stdout.write(", center2: %d MHz" %
- nl.nla_get_u32(attr[nl80211.NL80211_ATTR_CENTER_FREQ2]))
- elif nl80211.NL80211_ATTR_WIPHY_CHANNEL_TYPE in attr:
- channel_type = nl.nla_get_u32(attr[nl80211.NL80211_ATTR_WIPHY_CHANNEL_TYPE])
- sys.stdout.write(" %s" % nl80211.nl80211_channel_type2str(channel_type))
-
- sys.stdout.write("\n")
- return nl.NL_SKIP
- except Exception as e:
- (t,v,tb) = sys.exc_info()
- print(v.message)
- traceback.print_tb(tb)
+ try:
+ e, attr = genl.py_genlmsg_parse(
+ nl.nlmsg_hdr(m), 0, nl80211.NL80211_ATTR_MAX, None
+ )
+ if nl80211.NL80211_ATTR_WIPHY in attr:
+ thiswiphy = nl.nla_get_u32(attr[nl80211.NL80211_ATTR_WIPHY])
+ print("phy#%d" % thiswiphy)
+ if nl80211.NL80211_ATTR_IFNAME in attr:
+ print(
+ "\tinterface %s" % nl.nla_get_string(attr[nl80211.NL80211_ATTR_IFNAME])
+ )
+ if nl80211.NL80211_ATTR_IFINDEX in attr:
+ print("\tifindex %d" % nl.nla_get_u32(attr[nl80211.NL80211_ATTR_IFINDEX]))
+ if nl80211.NL80211_ATTR_WDEV in attr:
+ print("\twdev 0x%lx" % nl.nla_get_u64(attr[nl80211.NL80211_ATTR_WDEV]))
+ if nl80211.NL80211_ATTR_MAC in attr:
+ print(
+ "\tmac %02x:%02x:%02x:%02x:%02x:%02x"
+ % tuple(nl.nla_data(attr[nl80211.NL80211_ATTR_MAC]))
+ )
+ if nl80211.NL80211_ATTR_SSID in attr:
+ print("\tssid ", nl.nla_data(attr[nl80211.NL80211_ATTR_SSID]))
+ if nl80211.NL80211_ATTR_IFTYPE in attr:
+ iftype = nl.nla_get_u32(attr[nl80211.NL80211_ATTR_IFTYPE])
+ print("\ttype %s" % nl80211.nl80211_iftype2str[iftype])
+ if nl80211.NL80211_ATTR_WIPHY_FREQ in attr:
+ freq = nl.nla_get_u32(attr[nl80211.NL80211_ATTR_WIPHY_FREQ])
+
+ sys.stdout.write("\tfreq %d MHz" % freq)
+
+ if nl80211.NL80211_ATTR_CHANNEL_WIDTH in attr:
+ chanw = nl.nla_get_u32(attr[nl80211.NL80211_ATTR_CHANNEL_WIDTH])
+ sys.stdout.write(", width: %s" % nl80211.nl80211_chan_width2str[chanw])
+ if nl80211.NL80211_ATTR_CENTER_FREQ1 in attr:
+ sys.stdout.write(
+ ", center1: %d MHz"
+ % nl.nla_get_u32(attr[nl80211.NL80211_ATTR_CENTER_FREQ1])
+ )
+ if nl80211.NL80211_ATTR_CENTER_FREQ2 in attr:
+ sys.stdout.write(
+ ", center2: %d MHz"
+ % nl.nla_get_u32(attr[nl80211.NL80211_ATTR_CENTER_FREQ2])
+ )
+ elif nl80211.NL80211_ATTR_WIPHY_CHANNEL_TYPE in attr:
+ channel_type = nl.nla_get_u32(
+ attr[nl80211.NL80211_ATTR_WIPHY_CHANNEL_TYPE]
+ )
+ sys.stdout.write(" %s" % nl80211.nl80211_channel_type2str(channel_type))
+
+ sys.stdout.write("\n")
+ return nl.NL_SKIP
+ except Exception as e:
+ (t, v, tb) = sys.exc_info()
+ print(v.message)
+ traceback.print_tb(tb)
+
def error_handler(err, a):
- a.done = err.error
- return nl.NL_STOP
+ a.done = err.error
+ return nl.NL_STOP
+
def finish_handler(m, a):
- return nl.NL_SKIP
+ return nl.NL_SKIP
+
def ack_handler(m, a):
- a.done = 0
- return nl.NL_STOP
+ a.done = 0
+ return nl.NL_STOP
+
try:
- cbd = test_class()
- tx_cb = nl.nl_cb_alloc(nl.NL_CB_DEFAULT)
- rx_cb = nl.nl_cb_clone(tx_cb)
- s = nl.nl_socket_alloc_cb(tx_cb)
- nl.py_nl_cb_err(rx_cb, nl.NL_CB_CUSTOM, error_handler, cbd)
- nl.py_nl_cb_set(rx_cb, nl.NL_CB_FINISH, nl.NL_CB_CUSTOM, finish_handler, cbd)
- nl.py_nl_cb_set(rx_cb, nl.NL_CB_ACK, nl.NL_CB_CUSTOM, ack_handler, cbd)
- nl.py_nl_cb_set(rx_cb, nl.NL_CB_VALID, nl.NL_CB_CUSTOM, msg_handler, cbd)
-
- genl.genl_connect(s)
- family = genl.genl_ctrl_resolve(s, 'nl80211')
- m = nl.nlmsg_alloc()
- genl.genlmsg_put(m, 0, 0, family, 0, 0, nl80211.NL80211_CMD_GET_INTERFACE, 0)
- nl.nla_put_u32(m, nl80211.NL80211_ATTR_IFINDEX, nl.if_nametoindex('wlan0'))
-
- err = nl.nl_send_auto_complete(s, m)
- if err < 0:
- nl.nlmsg_free(m)
-
- while cbd.done > 0 and not err < 0:
- err = nl.nl_recvmsgs(s, rx_cb)
+ cbd = test_class()
+ tx_cb = nl.nl_cb_alloc(nl.NL_CB_DEFAULT)
+ rx_cb = nl.nl_cb_clone(tx_cb)
+ s = nl.nl_socket_alloc_cb(tx_cb)
+ nl.py_nl_cb_err(rx_cb, nl.NL_CB_CUSTOM, error_handler, cbd)
+ nl.py_nl_cb_set(rx_cb, nl.NL_CB_FINISH, nl.NL_CB_CUSTOM, finish_handler, cbd)
+ nl.py_nl_cb_set(rx_cb, nl.NL_CB_ACK, nl.NL_CB_CUSTOM, ack_handler, cbd)
+ nl.py_nl_cb_set(rx_cb, nl.NL_CB_VALID, nl.NL_CB_CUSTOM, msg_handler, cbd)
+
+ genl.genl_connect(s)
+ family = genl.genl_ctrl_resolve(s, "nl80211")
+ m = nl.nlmsg_alloc()
+ genl.genlmsg_put(m, 0, 0, family, 0, 0, nl80211.NL80211_CMD_GET_INTERFACE, 0)
+ nl.nla_put_u32(m, nl80211.NL80211_ATTR_IFINDEX, nl.if_nametoindex("wlan0"))
+
+ err = nl.nl_send_auto_complete(s, m)
+ if err < 0:
+ nl.nlmsg_free(m)
+
+ while cbd.done > 0 and not err < 0:
+ err = nl.nl_recvmsgs(s, rx_cb)
except Exception as e:
- (t, v, tb) = sys.exc_info()
- print(v.message)
- traceback.print_tb(tb)
+ (t, v, tb) = sys.exc_info()
+ print(v.message)
+ traceback.print_tb(tb)
diff --git a/python/examples/nl80211.py b/python/examples/nl80211.py
index 7434bef..88ea535 100644
--- a/python/examples/nl80211.py
+++ b/python/examples/nl80211.py
@@ -3,7 +3,7 @@
# ---------------------------------------------------------
# This file is generated using extract.py using pycparser
###########################################################
-NL80211_GENL_FAMILY = 'nl80211'
+NL80211_GENL_FAMILY = "nl80211"
NL80211_CMD_UNSPEC = 0
NL80211_CMD_GET_WIPHY = 1
@@ -750,828 +750,826 @@ NL80211_CRIT_PROTO_EAPOL = 2
NL80211_CRIT_PROTO_APIPA = 3
NUM_NL80211_CRIT_PROTO = 4
nl80211_commands2str = {
- NL80211_CMD_UNSPEC: "NL80211_CMD_UNSPEC",
- NL80211_CMD_GET_WIPHY: "NL80211_CMD_GET_WIPHY",
- NL80211_CMD_SET_WIPHY: "NL80211_CMD_SET_WIPHY",
- NL80211_CMD_NEW_WIPHY: "NL80211_CMD_NEW_WIPHY",
- NL80211_CMD_DEL_WIPHY: "NL80211_CMD_DEL_WIPHY",
- NL80211_CMD_GET_INTERFACE: "NL80211_CMD_GET_INTERFACE",
- NL80211_CMD_SET_INTERFACE: "NL80211_CMD_SET_INTERFACE",
- NL80211_CMD_NEW_INTERFACE: "NL80211_CMD_NEW_INTERFACE",
- NL80211_CMD_DEL_INTERFACE: "NL80211_CMD_DEL_INTERFACE",
- NL80211_CMD_GET_KEY: "NL80211_CMD_GET_KEY",
- NL80211_CMD_SET_KEY: "NL80211_CMD_SET_KEY",
- NL80211_CMD_NEW_KEY: "NL80211_CMD_NEW_KEY",
- NL80211_CMD_DEL_KEY: "NL80211_CMD_DEL_KEY",
- NL80211_CMD_GET_BEACON: "NL80211_CMD_GET_BEACON",
- NL80211_CMD_SET_BEACON: "NL80211_CMD_SET_BEACON",
- NL80211_CMD_START_AP: "NL80211_CMD_START_AP",
- NL80211_CMD_STOP_AP: "NL80211_CMD_STOP_AP",
- NL80211_CMD_GET_STATION: "NL80211_CMD_GET_STATION",
- NL80211_CMD_SET_STATION: "NL80211_CMD_SET_STATION",
- NL80211_CMD_NEW_STATION: "NL80211_CMD_NEW_STATION",
- NL80211_CMD_DEL_STATION: "NL80211_CMD_DEL_STATION",
- NL80211_CMD_GET_MPATH: "NL80211_CMD_GET_MPATH",
- NL80211_CMD_SET_MPATH: "NL80211_CMD_SET_MPATH",
- NL80211_CMD_NEW_MPATH: "NL80211_CMD_NEW_MPATH",
- NL80211_CMD_DEL_MPATH: "NL80211_CMD_DEL_MPATH",
- NL80211_CMD_SET_BSS: "NL80211_CMD_SET_BSS",
- NL80211_CMD_SET_REG: "NL80211_CMD_SET_REG",
- NL80211_CMD_REQ_SET_REG: "NL80211_CMD_REQ_SET_REG",
- NL80211_CMD_GET_MESH_CONFIG: "NL80211_CMD_GET_MESH_CONFIG",
- NL80211_CMD_SET_MESH_CONFIG: "NL80211_CMD_SET_MESH_CONFIG",
- NL80211_CMD_SET_MGMT_EXTRA_IE: "NL80211_CMD_SET_MGMT_EXTRA_IE",
- NL80211_CMD_GET_REG: "NL80211_CMD_GET_REG",
- NL80211_CMD_GET_SCAN: "NL80211_CMD_GET_SCAN",
- NL80211_CMD_TRIGGER_SCAN: "NL80211_CMD_TRIGGER_SCAN",
- NL80211_CMD_NEW_SCAN_RESULTS: "NL80211_CMD_NEW_SCAN_RESULTS",
- NL80211_CMD_SCAN_ABORTED: "NL80211_CMD_SCAN_ABORTED",
- NL80211_CMD_REG_CHANGE: "NL80211_CMD_REG_CHANGE",
- NL80211_CMD_AUTHENTICATE: "NL80211_CMD_AUTHENTICATE",
- NL80211_CMD_ASSOCIATE: "NL80211_CMD_ASSOCIATE",
- NL80211_CMD_DEAUTHENTICATE: "NL80211_CMD_DEAUTHENTICATE",
- NL80211_CMD_DISASSOCIATE: "NL80211_CMD_DISASSOCIATE",
- NL80211_CMD_MICHAEL_MIC_FAILURE: "NL80211_CMD_MICHAEL_MIC_FAILURE",
- NL80211_CMD_REG_BEACON_HINT: "NL80211_CMD_REG_BEACON_HINT",
- NL80211_CMD_JOIN_IBSS: "NL80211_CMD_JOIN_IBSS",
- NL80211_CMD_LEAVE_IBSS: "NL80211_CMD_LEAVE_IBSS",
- NL80211_CMD_TESTMODE: "NL80211_CMD_TESTMODE",
- NL80211_CMD_CONNECT: "NL80211_CMD_CONNECT",
- NL80211_CMD_ROAM: "NL80211_CMD_ROAM",
- NL80211_CMD_DISCONNECT: "NL80211_CMD_DISCONNECT",
- NL80211_CMD_SET_WIPHY_NETNS: "NL80211_CMD_SET_WIPHY_NETNS",
- NL80211_CMD_GET_SURVEY: "NL80211_CMD_GET_SURVEY",
- NL80211_CMD_NEW_SURVEY_RESULTS: "NL80211_CMD_NEW_SURVEY_RESULTS",
- NL80211_CMD_SET_PMKSA: "NL80211_CMD_SET_PMKSA",
- NL80211_CMD_DEL_PMKSA: "NL80211_CMD_DEL_PMKSA",
- NL80211_CMD_FLUSH_PMKSA: "NL80211_CMD_FLUSH_PMKSA",
- NL80211_CMD_REMAIN_ON_CHANNEL: "NL80211_CMD_REMAIN_ON_CHANNEL",
- NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL: "NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL",
- NL80211_CMD_SET_TX_BITRATE_MASK: "NL80211_CMD_SET_TX_BITRATE_MASK",
- NL80211_CMD_REGISTER_FRAME: "NL80211_CMD_REGISTER_FRAME",
- NL80211_CMD_FRAME: "NL80211_CMD_FRAME",
- NL80211_CMD_FRAME_TX_STATUS: "NL80211_CMD_FRAME_TX_STATUS",
- NL80211_CMD_SET_POWER_SAVE: "NL80211_CMD_SET_POWER_SAVE",
- NL80211_CMD_GET_POWER_SAVE: "NL80211_CMD_GET_POWER_SAVE",
- NL80211_CMD_SET_CQM: "NL80211_CMD_SET_CQM",
- NL80211_CMD_NOTIFY_CQM: "NL80211_CMD_NOTIFY_CQM",
- NL80211_CMD_SET_CHANNEL: "NL80211_CMD_SET_CHANNEL",
- NL80211_CMD_SET_WDS_PEER: "NL80211_CMD_SET_WDS_PEER",
- NL80211_CMD_FRAME_WAIT_CANCEL: "NL80211_CMD_FRAME_WAIT_CANCEL",
- NL80211_CMD_JOIN_MESH: "NL80211_CMD_JOIN_MESH",
- NL80211_CMD_LEAVE_MESH: "NL80211_CMD_LEAVE_MESH",
- NL80211_CMD_UNPROT_DEAUTHENTICATE: "NL80211_CMD_UNPROT_DEAUTHENTICATE",
- NL80211_CMD_UNPROT_DISASSOCIATE: "NL80211_CMD_UNPROT_DISASSOCIATE",
- NL80211_CMD_NEW_PEER_CANDIDATE: "NL80211_CMD_NEW_PEER_CANDIDATE",
- NL80211_CMD_GET_WOWLAN: "NL80211_CMD_GET_WOWLAN",
- NL80211_CMD_SET_WOWLAN: "NL80211_CMD_SET_WOWLAN",
- NL80211_CMD_START_SCHED_SCAN: "NL80211_CMD_START_SCHED_SCAN",
- NL80211_CMD_STOP_SCHED_SCAN: "NL80211_CMD_STOP_SCHED_SCAN",
- NL80211_CMD_SCHED_SCAN_RESULTS: "NL80211_CMD_SCHED_SCAN_RESULTS",
- NL80211_CMD_SCHED_SCAN_STOPPED: "NL80211_CMD_SCHED_SCAN_STOPPED",
- NL80211_CMD_SET_REKEY_OFFLOAD: "NL80211_CMD_SET_REKEY_OFFLOAD",
- NL80211_CMD_PMKSA_CANDIDATE: "NL80211_CMD_PMKSA_CANDIDATE",
- NL80211_CMD_TDLS_OPER: "NL80211_CMD_TDLS_OPER",
- NL80211_CMD_TDLS_MGMT: "NL80211_CMD_TDLS_MGMT",
- NL80211_CMD_UNEXPECTED_FRAME: "NL80211_CMD_UNEXPECTED_FRAME",
- NL80211_CMD_PROBE_CLIENT: "NL80211_CMD_PROBE_CLIENT",
- NL80211_CMD_REGISTER_BEACONS: "NL80211_CMD_REGISTER_BEACONS",
- NL80211_CMD_UNEXPECTED_4ADDR_FRAME: "NL80211_CMD_UNEXPECTED_4ADDR_FRAME",
- NL80211_CMD_SET_NOACK_MAP: "NL80211_CMD_SET_NOACK_MAP",
- NL80211_CMD_CH_SWITCH_NOTIFY: "NL80211_CMD_CH_SWITCH_NOTIFY",
- NL80211_CMD_START_P2P_DEVICE: "NL80211_CMD_START_P2P_DEVICE",
- NL80211_CMD_STOP_P2P_DEVICE: "NL80211_CMD_STOP_P2P_DEVICE",
- NL80211_CMD_CONN_FAILED: "NL80211_CMD_CONN_FAILED",
- NL80211_CMD_SET_MCAST_RATE: "NL80211_CMD_SET_MCAST_RATE",
- NL80211_CMD_SET_MAC_ACL: "NL80211_CMD_SET_MAC_ACL",
- NL80211_CMD_RADAR_DETECT: "NL80211_CMD_RADAR_DETECT",
- NL80211_CMD_GET_PROTOCOL_FEATURES: "NL80211_CMD_GET_PROTOCOL_FEATURES",
- NL80211_CMD_UPDATE_FT_IES: "NL80211_CMD_UPDATE_FT_IES",
- NL80211_CMD_FT_EVENT: "NL80211_CMD_FT_EVENT",
- NL80211_CMD_CRIT_PROTOCOL_START: "NL80211_CMD_CRIT_PROTOCOL_START",
- NL80211_CMD_CRIT_PROTOCOL_STOP: "NL80211_CMD_CRIT_PROTOCOL_STOP",
- __NL80211_CMD_AFTER_LAST: "__NL80211_CMD_AFTER_LAST",
+ NL80211_CMD_UNSPEC: "NL80211_CMD_UNSPEC",
+ NL80211_CMD_GET_WIPHY: "NL80211_CMD_GET_WIPHY",
+ NL80211_CMD_SET_WIPHY: "NL80211_CMD_SET_WIPHY",
+ NL80211_CMD_NEW_WIPHY: "NL80211_CMD_NEW_WIPHY",
+ NL80211_CMD_DEL_WIPHY: "NL80211_CMD_DEL_WIPHY",
+ NL80211_CMD_GET_INTERFACE: "NL80211_CMD_GET_INTERFACE",
+ NL80211_CMD_SET_INTERFACE: "NL80211_CMD_SET_INTERFACE",
+ NL80211_CMD_NEW_INTERFACE: "NL80211_CMD_NEW_INTERFACE",
+ NL80211_CMD_DEL_INTERFACE: "NL80211_CMD_DEL_INTERFACE",
+ NL80211_CMD_GET_KEY: "NL80211_CMD_GET_KEY",
+ NL80211_CMD_SET_KEY: "NL80211_CMD_SET_KEY",
+ NL80211_CMD_NEW_KEY: "NL80211_CMD_NEW_KEY",
+ NL80211_CMD_DEL_KEY: "NL80211_CMD_DEL_KEY",
+ NL80211_CMD_GET_BEACON: "NL80211_CMD_GET_BEACON",
+ NL80211_CMD_SET_BEACON: "NL80211_CMD_SET_BEACON",
+ NL80211_CMD_START_AP: "NL80211_CMD_START_AP",
+ NL80211_CMD_STOP_AP: "NL80211_CMD_STOP_AP",
+ NL80211_CMD_GET_STATION: "NL80211_CMD_GET_STATION",
+ NL80211_CMD_SET_STATION: "NL80211_CMD_SET_STATION",
+ NL80211_CMD_NEW_STATION: "NL80211_CMD_NEW_STATION",
+ NL80211_CMD_DEL_STATION: "NL80211_CMD_DEL_STATION",
+ NL80211_CMD_GET_MPATH: "NL80211_CMD_GET_MPATH",
+ NL80211_CMD_SET_MPATH: "NL80211_CMD_SET_MPATH",
+ NL80211_CMD_NEW_MPATH: "NL80211_CMD_NEW_MPATH",
+ NL80211_CMD_DEL_MPATH: "NL80211_CMD_DEL_MPATH",
+ NL80211_CMD_SET_BSS: "NL80211_CMD_SET_BSS",
+ NL80211_CMD_SET_REG: "NL80211_CMD_SET_REG",
+ NL80211_CMD_REQ_SET_REG: "NL80211_CMD_REQ_SET_REG",
+ NL80211_CMD_GET_MESH_CONFIG: "NL80211_CMD_GET_MESH_CONFIG",
+ NL80211_CMD_SET_MESH_CONFIG: "NL80211_CMD_SET_MESH_CONFIG",
+ NL80211_CMD_SET_MGMT_EXTRA_IE: "NL80211_CMD_SET_MGMT_EXTRA_IE",
+ NL80211_CMD_GET_REG: "NL80211_CMD_GET_REG",
+ NL80211_CMD_GET_SCAN: "NL80211_CMD_GET_SCAN",
+ NL80211_CMD_TRIGGER_SCAN: "NL80211_CMD_TRIGGER_SCAN",
+ NL80211_CMD_NEW_SCAN_RESULTS: "NL80211_CMD_NEW_SCAN_RESULTS",
+ NL80211_CMD_SCAN_ABORTED: "NL80211_CMD_SCAN_ABORTED",
+ NL80211_CMD_REG_CHANGE: "NL80211_CMD_REG_CHANGE",
+ NL80211_CMD_AUTHENTICATE: "NL80211_CMD_AUTHENTICATE",
+ NL80211_CMD_ASSOCIATE: "NL80211_CMD_ASSOCIATE",
+ NL80211_CMD_DEAUTHENTICATE: "NL80211_CMD_DEAUTHENTICATE",
+ NL80211_CMD_DISASSOCIATE: "NL80211_CMD_DISASSOCIATE",
+ NL80211_CMD_MICHAEL_MIC_FAILURE: "NL80211_CMD_MICHAEL_MIC_FAILURE",
+ NL80211_CMD_REG_BEACON_HINT: "NL80211_CMD_REG_BEACON_HINT",
+ NL80211_CMD_JOIN_IBSS: "NL80211_CMD_JOIN_IBSS",
+ NL80211_CMD_LEAVE_IBSS: "NL80211_CMD_LEAVE_IBSS",
+ NL80211_CMD_TESTMODE: "NL80211_CMD_TESTMODE",
+ NL80211_CMD_CONNECT: "NL80211_CMD_CONNECT",
+ NL80211_CMD_ROAM: "NL80211_CMD_ROAM",
+ NL80211_CMD_DISCONNECT: "NL80211_CMD_DISCONNECT",
+ NL80211_CMD_SET_WIPHY_NETNS: "NL80211_CMD_SET_WIPHY_NETNS",
+ NL80211_CMD_GET_SURVEY: "NL80211_CMD_GET_SURVEY",
+ NL80211_CMD_NEW_SURVEY_RESULTS: "NL80211_CMD_NEW_SURVEY_RESULTS",
+ NL80211_CMD_SET_PMKSA: "NL80211_CMD_SET_PMKSA",
+ NL80211_CMD_DEL_PMKSA: "NL80211_CMD_DEL_PMKSA",
+ NL80211_CMD_FLUSH_PMKSA: "NL80211_CMD_FLUSH_PMKSA",
+ NL80211_CMD_REMAIN_ON_CHANNEL: "NL80211_CMD_REMAIN_ON_CHANNEL",
+ NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL: "NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL",
+ NL80211_CMD_SET_TX_BITRATE_MASK: "NL80211_CMD_SET_TX_BITRATE_MASK",
+ NL80211_CMD_REGISTER_FRAME: "NL80211_CMD_REGISTER_FRAME",
+ NL80211_CMD_FRAME: "NL80211_CMD_FRAME",
+ NL80211_CMD_FRAME_TX_STATUS: "NL80211_CMD_FRAME_TX_STATUS",
+ NL80211_CMD_SET_POWER_SAVE: "NL80211_CMD_SET_POWER_SAVE",
+ NL80211_CMD_GET_POWER_SAVE: "NL80211_CMD_GET_POWER_SAVE",
+ NL80211_CMD_SET_CQM: "NL80211_CMD_SET_CQM",
+ NL80211_CMD_NOTIFY_CQM: "NL80211_CMD_NOTIFY_CQM",
+ NL80211_CMD_SET_CHANNEL: "NL80211_CMD_SET_CHANNEL",
+ NL80211_CMD_SET_WDS_PEER: "NL80211_CMD_SET_WDS_PEER",
+ NL80211_CMD_FRAME_WAIT_CANCEL: "NL80211_CMD_FRAME_WAIT_CANCEL",
+ NL80211_CMD_JOIN_MESH: "NL80211_CMD_JOIN_MESH",
+ NL80211_CMD_LEAVE_MESH: "NL80211_CMD_LEAVE_MESH",
+ NL80211_CMD_UNPROT_DEAUTHENTICATE: "NL80211_CMD_UNPROT_DEAUTHENTICATE",
+ NL80211_CMD_UNPROT_DISASSOCIATE: "NL80211_CMD_UNPROT_DISASSOCIATE",
+ NL80211_CMD_NEW_PEER_CANDIDATE: "NL80211_CMD_NEW_PEER_CANDIDATE",
+ NL80211_CMD_GET_WOWLAN: "NL80211_CMD_GET_WOWLAN",
+ NL80211_CMD_SET_WOWLAN: "NL80211_CMD_SET_WOWLAN",
+ NL80211_CMD_START_SCHED_SCAN: "NL80211_CMD_START_SCHED_SCAN",
+ NL80211_CMD_STOP_SCHED_SCAN: "NL80211_CMD_STOP_SCHED_SCAN",
+ NL80211_CMD_SCHED_SCAN_RESULTS: "NL80211_CMD_SCHED_SCAN_RESULTS",
+ NL80211_CMD_SCHED_SCAN_STOPPED: "NL80211_CMD_SCHED_SCAN_STOPPED",
+ NL80211_CMD_SET_REKEY_OFFLOAD: "NL80211_CMD_SET_REKEY_OFFLOAD",
+ NL80211_CMD_PMKSA_CANDIDATE: "NL80211_CMD_PMKSA_CANDIDATE",
+ NL80211_CMD_TDLS_OPER: "NL80211_CMD_TDLS_OPER",
+ NL80211_CMD_TDLS_MGMT: "NL80211_CMD_TDLS_MGMT",
+ NL80211_CMD_UNEXPECTED_FRAME: "NL80211_CMD_UNEXPECTED_FRAME",
+ NL80211_CMD_PROBE_CLIENT: "NL80211_CMD_PROBE_CLIENT",
+ NL80211_CMD_REGISTER_BEACONS: "NL80211_CMD_REGISTER_BEACONS",
+ NL80211_CMD_UNEXPECTED_4ADDR_FRAME: "NL80211_CMD_UNEXPECTED_4ADDR_FRAME",
+ NL80211_CMD_SET_NOACK_MAP: "NL80211_CMD_SET_NOACK_MAP",
+ NL80211_CMD_CH_SWITCH_NOTIFY: "NL80211_CMD_CH_SWITCH_NOTIFY",
+ NL80211_CMD_START_P2P_DEVICE: "NL80211_CMD_START_P2P_DEVICE",
+ NL80211_CMD_STOP_P2P_DEVICE: "NL80211_CMD_STOP_P2P_DEVICE",
+ NL80211_CMD_CONN_FAILED: "NL80211_CMD_CONN_FAILED",
+ NL80211_CMD_SET_MCAST_RATE: "NL80211_CMD_SET_MCAST_RATE",
+ NL80211_CMD_SET_MAC_ACL: "NL80211_CMD_SET_MAC_ACL",
+ NL80211_CMD_RADAR_DETECT: "NL80211_CMD_RADAR_DETECT",
+ NL80211_CMD_GET_PROTOCOL_FEATURES: "NL80211_CMD_GET_PROTOCOL_FEATURES",
+ NL80211_CMD_UPDATE_FT_IES: "NL80211_CMD_UPDATE_FT_IES",
+ NL80211_CMD_FT_EVENT: "NL80211_CMD_FT_EVENT",
+ NL80211_CMD_CRIT_PROTOCOL_START: "NL80211_CMD_CRIT_PROTOCOL_START",
+ NL80211_CMD_CRIT_PROTOCOL_STOP: "NL80211_CMD_CRIT_PROTOCOL_STOP",
+ __NL80211_CMD_AFTER_LAST: "__NL80211_CMD_AFTER_LAST",
}
nl80211_attrs2str = {
- NL80211_ATTR_UNSPEC: "NL80211_ATTR_UNSPEC",
- NL80211_ATTR_WIPHY: "NL80211_ATTR_WIPHY",
- NL80211_ATTR_WIPHY_NAME: "NL80211_ATTR_WIPHY_NAME",
- NL80211_ATTR_IFINDEX: "NL80211_ATTR_IFINDEX",
- NL80211_ATTR_IFNAME: "NL80211_ATTR_IFNAME",
- NL80211_ATTR_IFTYPE: "NL80211_ATTR_IFTYPE",
- NL80211_ATTR_MAC: "NL80211_ATTR_MAC",
- NL80211_ATTR_KEY_DATA: "NL80211_ATTR_KEY_DATA",
- NL80211_ATTR_KEY_IDX: "NL80211_ATTR_KEY_IDX",
- NL80211_ATTR_KEY_CIPHER: "NL80211_ATTR_KEY_CIPHER",
- NL80211_ATTR_KEY_SEQ: "NL80211_ATTR_KEY_SEQ",
- NL80211_ATTR_KEY_DEFAULT: "NL80211_ATTR_KEY_DEFAULT",
- NL80211_ATTR_BEACON_INTERVAL: "NL80211_ATTR_BEACON_INTERVAL",
- NL80211_ATTR_DTIM_PERIOD: "NL80211_ATTR_DTIM_PERIOD",
- NL80211_ATTR_BEACON_HEAD: "NL80211_ATTR_BEACON_HEAD",
- NL80211_ATTR_BEACON_TAIL: "NL80211_ATTR_BEACON_TAIL",
- NL80211_ATTR_STA_AID: "NL80211_ATTR_STA_AID",
- NL80211_ATTR_STA_FLAGS: "NL80211_ATTR_STA_FLAGS",
- NL80211_ATTR_STA_LISTEN_INTERVAL: "NL80211_ATTR_STA_LISTEN_INTERVAL",
- NL80211_ATTR_STA_SUPPORTED_RATES: "NL80211_ATTR_STA_SUPPORTED_RATES",
- NL80211_ATTR_STA_VLAN: "NL80211_ATTR_STA_VLAN",
- NL80211_ATTR_STA_INFO: "NL80211_ATTR_STA_INFO",
- NL80211_ATTR_WIPHY_BANDS: "NL80211_ATTR_WIPHY_BANDS",
- NL80211_ATTR_MNTR_FLAGS: "NL80211_ATTR_MNTR_FLAGS",
- NL80211_ATTR_MESH_ID: "NL80211_ATTR_MESH_ID",
- NL80211_ATTR_STA_PLINK_ACTION: "NL80211_ATTR_STA_PLINK_ACTION",
- NL80211_ATTR_MPATH_NEXT_HOP: "NL80211_ATTR_MPATH_NEXT_HOP",
- NL80211_ATTR_MPATH_INFO: "NL80211_ATTR_MPATH_INFO",
- NL80211_ATTR_BSS_CTS_PROT: "NL80211_ATTR_BSS_CTS_PROT",
- NL80211_ATTR_BSS_SHORT_PREAMBLE: "NL80211_ATTR_BSS_SHORT_PREAMBLE",
- NL80211_ATTR_BSS_SHORT_SLOT_TIME: "NL80211_ATTR_BSS_SHORT_SLOT_TIME",
- NL80211_ATTR_HT_CAPABILITY: "NL80211_ATTR_HT_CAPABILITY",
- NL80211_ATTR_SUPPORTED_IFTYPES: "NL80211_ATTR_SUPPORTED_IFTYPES",
- NL80211_ATTR_REG_ALPHA2: "NL80211_ATTR_REG_ALPHA2",
- NL80211_ATTR_REG_RULES: "NL80211_ATTR_REG_RULES",
- NL80211_ATTR_MESH_CONFIG: "NL80211_ATTR_MESH_CONFIG",
- NL80211_ATTR_BSS_BASIC_RATES: "NL80211_ATTR_BSS_BASIC_RATES",
- NL80211_ATTR_WIPHY_TXQ_PARAMS: "NL80211_ATTR_WIPHY_TXQ_PARAMS",
- NL80211_ATTR_WIPHY_FREQ: "NL80211_ATTR_WIPHY_FREQ",
- NL80211_ATTR_WIPHY_CHANNEL_TYPE: "NL80211_ATTR_WIPHY_CHANNEL_TYPE",
- NL80211_ATTR_KEY_DEFAULT_MGMT: "NL80211_ATTR_KEY_DEFAULT_MGMT",
- NL80211_ATTR_MGMT_SUBTYPE: "NL80211_ATTR_MGMT_SUBTYPE",
- NL80211_ATTR_IE: "NL80211_ATTR_IE",
- NL80211_ATTR_MAX_NUM_SCAN_SSIDS: "NL80211_ATTR_MAX_NUM_SCAN_SSIDS",
- NL80211_ATTR_SCAN_FREQUENCIES: "NL80211_ATTR_SCAN_FREQUENCIES",
- NL80211_ATTR_SCAN_SSIDS: "NL80211_ATTR_SCAN_SSIDS",
- NL80211_ATTR_GENERATION: "NL80211_ATTR_GENERATION",
- NL80211_ATTR_BSS: "NL80211_ATTR_BSS",
- NL80211_ATTR_REG_INITIATOR: "NL80211_ATTR_REG_INITIATOR",
- NL80211_ATTR_REG_TYPE: "NL80211_ATTR_REG_TYPE",
- NL80211_ATTR_SUPPORTED_COMMANDS: "NL80211_ATTR_SUPPORTED_COMMANDS",
- NL80211_ATTR_FRAME: "NL80211_ATTR_FRAME",
- NL80211_ATTR_SSID: "NL80211_ATTR_SSID",
- NL80211_ATTR_AUTH_TYPE: "NL80211_ATTR_AUTH_TYPE",
- NL80211_ATTR_REASON_CODE: "NL80211_ATTR_REASON_CODE",
- NL80211_ATTR_KEY_TYPE: "NL80211_ATTR_KEY_TYPE",
- NL80211_ATTR_MAX_SCAN_IE_LEN: "NL80211_ATTR_MAX_SCAN_IE_LEN",
- NL80211_ATTR_CIPHER_SUITES: "NL80211_ATTR_CIPHER_SUITES",
- NL80211_ATTR_FREQ_BEFORE: "NL80211_ATTR_FREQ_BEFORE",
- NL80211_ATTR_FREQ_AFTER: "NL80211_ATTR_FREQ_AFTER",
- NL80211_ATTR_FREQ_FIXED: "NL80211_ATTR_FREQ_FIXED",
- NL80211_ATTR_WIPHY_RETRY_SHORT: "NL80211_ATTR_WIPHY_RETRY_SHORT",
- NL80211_ATTR_WIPHY_RETRY_LONG: "NL80211_ATTR_WIPHY_RETRY_LONG",
- NL80211_ATTR_WIPHY_FRAG_THRESHOLD: "NL80211_ATTR_WIPHY_FRAG_THRESHOLD",
- NL80211_ATTR_WIPHY_RTS_THRESHOLD: "NL80211_ATTR_WIPHY_RTS_THRESHOLD",
- NL80211_ATTR_TIMED_OUT: "NL80211_ATTR_TIMED_OUT",
- NL80211_ATTR_USE_MFP: "NL80211_ATTR_USE_MFP",
- NL80211_ATTR_STA_FLAGS2: "NL80211_ATTR_STA_FLAGS2",
- NL80211_ATTR_CONTROL_PORT: "NL80211_ATTR_CONTROL_PORT",
- NL80211_ATTR_TESTDATA: "NL80211_ATTR_TESTDATA",
- NL80211_ATTR_PRIVACY: "NL80211_ATTR_PRIVACY",
- NL80211_ATTR_DISCONNECTED_BY_AP: "NL80211_ATTR_DISCONNECTED_BY_AP",
- NL80211_ATTR_STATUS_CODE: "NL80211_ATTR_STATUS_CODE",
- NL80211_ATTR_CIPHER_SUITES_PAIRWISE: "NL80211_ATTR_CIPHER_SUITES_PAIRWISE",
- NL80211_ATTR_CIPHER_SUITE_GROUP: "NL80211_ATTR_CIPHER_SUITE_GROUP",
- NL80211_ATTR_WPA_VERSIONS: "NL80211_ATTR_WPA_VERSIONS",
- NL80211_ATTR_AKM_SUITES: "NL80211_ATTR_AKM_SUITES",
- NL80211_ATTR_REQ_IE: "NL80211_ATTR_REQ_IE",
- NL80211_ATTR_RESP_IE: "NL80211_ATTR_RESP_IE",
- NL80211_ATTR_PREV_BSSID: "NL80211_ATTR_PREV_BSSID",
- NL80211_ATTR_KEY: "NL80211_ATTR_KEY",
- NL80211_ATTR_KEYS: "NL80211_ATTR_KEYS",
- NL80211_ATTR_PID: "NL80211_ATTR_PID",
- NL80211_ATTR_4ADDR: "NL80211_ATTR_4ADDR",
- NL80211_ATTR_SURVEY_INFO: "NL80211_ATTR_SURVEY_INFO",
- NL80211_ATTR_PMKID: "NL80211_ATTR_PMKID",
- NL80211_ATTR_MAX_NUM_PMKIDS: "NL80211_ATTR_MAX_NUM_PMKIDS",
- NL80211_ATTR_DURATION: "NL80211_ATTR_DURATION",
- NL80211_ATTR_COOKIE: "NL80211_ATTR_COOKIE",
- NL80211_ATTR_WIPHY_COVERAGE_CLASS: "NL80211_ATTR_WIPHY_COVERAGE_CLASS",
- NL80211_ATTR_TX_RATES: "NL80211_ATTR_TX_RATES",
- NL80211_ATTR_FRAME_MATCH: "NL80211_ATTR_FRAME_MATCH",
- NL80211_ATTR_ACK: "NL80211_ATTR_ACK",
- NL80211_ATTR_PS_STATE: "NL80211_ATTR_PS_STATE",
- NL80211_ATTR_CQM: "NL80211_ATTR_CQM",
- NL80211_ATTR_LOCAL_STATE_CHANGE: "NL80211_ATTR_LOCAL_STATE_CHANGE",
- NL80211_ATTR_AP_ISOLATE: "NL80211_ATTR_AP_ISOLATE",
- NL80211_ATTR_WIPHY_TX_POWER_SETTING: "NL80211_ATTR_WIPHY_TX_POWER_SETTING",
- NL80211_ATTR_WIPHY_TX_POWER_LEVEL: "NL80211_ATTR_WIPHY_TX_POWER_LEVEL",
- NL80211_ATTR_TX_FRAME_TYPES: "NL80211_ATTR_TX_FRAME_TYPES",
- NL80211_ATTR_RX_FRAME_TYPES: "NL80211_ATTR_RX_FRAME_TYPES",
- NL80211_ATTR_FRAME_TYPE: "NL80211_ATTR_FRAME_TYPE",
- NL80211_ATTR_CONTROL_PORT_ETHERTYPE: "NL80211_ATTR_CONTROL_PORT_ETHERTYPE",
- NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT: "NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT",
- NL80211_ATTR_SUPPORT_IBSS_RSN: "NL80211_ATTR_SUPPORT_IBSS_RSN",
- NL80211_ATTR_WIPHY_ANTENNA_TX: "NL80211_ATTR_WIPHY_ANTENNA_TX",
- NL80211_ATTR_WIPHY_ANTENNA_RX: "NL80211_ATTR_WIPHY_ANTENNA_RX",
- NL80211_ATTR_MCAST_RATE: "NL80211_ATTR_MCAST_RATE",
- NL80211_ATTR_OFFCHANNEL_TX_OK: "NL80211_ATTR_OFFCHANNEL_TX_OK",
- NL80211_ATTR_BSS_HT_OPMODE: "NL80211_ATTR_BSS_HT_OPMODE",
- NL80211_ATTR_KEY_DEFAULT_TYPES: "NL80211_ATTR_KEY_DEFAULT_TYPES",
- NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION: "NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION",
- NL80211_ATTR_MESH_SETUP: "NL80211_ATTR_MESH_SETUP",
- NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX: "NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX",
- NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX: "NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX",
- NL80211_ATTR_SUPPORT_MESH_AUTH: "NL80211_ATTR_SUPPORT_MESH_AUTH",
- NL80211_ATTR_STA_PLINK_STATE: "NL80211_ATTR_STA_PLINK_STATE",
- NL80211_ATTR_WOWLAN_TRIGGERS: "NL80211_ATTR_WOWLAN_TRIGGERS",
- NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED: "NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED",
- NL80211_ATTR_SCHED_SCAN_INTERVAL: "NL80211_ATTR_SCHED_SCAN_INTERVAL",
- NL80211_ATTR_INTERFACE_COMBINATIONS: "NL80211_ATTR_INTERFACE_COMBINATIONS",
- NL80211_ATTR_SOFTWARE_IFTYPES: "NL80211_ATTR_SOFTWARE_IFTYPES",
- NL80211_ATTR_REKEY_DATA: "NL80211_ATTR_REKEY_DATA",
- NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS: "NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS",
- NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN: "NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN",
- NL80211_ATTR_SCAN_SUPP_RATES: "NL80211_ATTR_SCAN_SUPP_RATES",
- NL80211_ATTR_HIDDEN_SSID: "NL80211_ATTR_HIDDEN_SSID",
- NL80211_ATTR_IE_PROBE_RESP: "NL80211_ATTR_IE_PROBE_RESP",
- NL80211_ATTR_IE_ASSOC_RESP: "NL80211_ATTR_IE_ASSOC_RESP",
- NL80211_ATTR_STA_WME: "NL80211_ATTR_STA_WME",
- NL80211_ATTR_SUPPORT_AP_UAPSD: "NL80211_ATTR_SUPPORT_AP_UAPSD",
- NL80211_ATTR_ROAM_SUPPORT: "NL80211_ATTR_ROAM_SUPPORT",
- NL80211_ATTR_SCHED_SCAN_MATCH: "NL80211_ATTR_SCHED_SCAN_MATCH",
- NL80211_ATTR_MAX_MATCH_SETS: "NL80211_ATTR_MAX_MATCH_SETS",
- NL80211_ATTR_PMKSA_CANDIDATE: "NL80211_ATTR_PMKSA_CANDIDATE",
- NL80211_ATTR_TX_NO_CCK_RATE: "NL80211_ATTR_TX_NO_CCK_RATE",
- NL80211_ATTR_TDLS_ACTION: "NL80211_ATTR_TDLS_ACTION",
- NL80211_ATTR_TDLS_DIALOG_TOKEN: "NL80211_ATTR_TDLS_DIALOG_TOKEN",
- NL80211_ATTR_TDLS_OPERATION: "NL80211_ATTR_TDLS_OPERATION",
- NL80211_ATTR_TDLS_SUPPORT: "NL80211_ATTR_TDLS_SUPPORT",
- NL80211_ATTR_TDLS_EXTERNAL_SETUP: "NL80211_ATTR_TDLS_EXTERNAL_SETUP",
- NL80211_ATTR_DEVICE_AP_SME: "NL80211_ATTR_DEVICE_AP_SME",
- NL80211_ATTR_DONT_WAIT_FOR_ACK: "NL80211_ATTR_DONT_WAIT_FOR_ACK",
- NL80211_ATTR_FEATURE_FLAGS: "NL80211_ATTR_FEATURE_FLAGS",
- NL80211_ATTR_PROBE_RESP_OFFLOAD: "NL80211_ATTR_PROBE_RESP_OFFLOAD",
- NL80211_ATTR_PROBE_RESP: "NL80211_ATTR_PROBE_RESP",
- NL80211_ATTR_DFS_REGION: "NL80211_ATTR_DFS_REGION",
- NL80211_ATTR_DISABLE_HT: "NL80211_ATTR_DISABLE_HT",
- NL80211_ATTR_HT_CAPABILITY_MASK: "NL80211_ATTR_HT_CAPABILITY_MASK",
- NL80211_ATTR_NOACK_MAP: "NL80211_ATTR_NOACK_MAP",
- NL80211_ATTR_INACTIVITY_TIMEOUT: "NL80211_ATTR_INACTIVITY_TIMEOUT",
- NL80211_ATTR_RX_SIGNAL_DBM: "NL80211_ATTR_RX_SIGNAL_DBM",
- NL80211_ATTR_BG_SCAN_PERIOD: "NL80211_ATTR_BG_SCAN_PERIOD",
- NL80211_ATTR_WDEV: "NL80211_ATTR_WDEV",
- NL80211_ATTR_USER_REG_HINT_TYPE: "NL80211_ATTR_USER_REG_HINT_TYPE",
- NL80211_ATTR_CONN_FAILED_REASON: "NL80211_ATTR_CONN_FAILED_REASON",
- NL80211_ATTR_SAE_DATA: "NL80211_ATTR_SAE_DATA",
- NL80211_ATTR_VHT_CAPABILITY: "NL80211_ATTR_VHT_CAPABILITY",
- NL80211_ATTR_SCAN_FLAGS: "NL80211_ATTR_SCAN_FLAGS",
- NL80211_ATTR_CHANNEL_WIDTH: "NL80211_ATTR_CHANNEL_WIDTH",
- NL80211_ATTR_CENTER_FREQ1: "NL80211_ATTR_CENTER_FREQ1",
- NL80211_ATTR_CENTER_FREQ2: "NL80211_ATTR_CENTER_FREQ2",
- NL80211_ATTR_P2P_CTWINDOW: "NL80211_ATTR_P2P_CTWINDOW",
- NL80211_ATTR_P2P_OPPPS: "NL80211_ATTR_P2P_OPPPS",
- NL80211_ATTR_LOCAL_MESH_POWER_MODE: "NL80211_ATTR_LOCAL_MESH_POWER_MODE",
- NL80211_ATTR_ACL_POLICY: "NL80211_ATTR_ACL_POLICY",
- NL80211_ATTR_MAC_ADDRS: "NL80211_ATTR_MAC_ADDRS",
- NL80211_ATTR_MAC_ACL_MAX: "NL80211_ATTR_MAC_ACL_MAX",
- NL80211_ATTR_RADAR_EVENT: "NL80211_ATTR_RADAR_EVENT",
- NL80211_ATTR_EXT_CAPA: "NL80211_ATTR_EXT_CAPA",
- NL80211_ATTR_EXT_CAPA_MASK: "NL80211_ATTR_EXT_CAPA_MASK",
- NL80211_ATTR_STA_CAPABILITY: "NL80211_ATTR_STA_CAPABILITY",
- NL80211_ATTR_STA_EXT_CAPABILITY: "NL80211_ATTR_STA_EXT_CAPABILITY",
- NL80211_ATTR_PROTOCOL_FEATURES: "NL80211_ATTR_PROTOCOL_FEATURES",
- NL80211_ATTR_SPLIT_WIPHY_DUMP: "NL80211_ATTR_SPLIT_WIPHY_DUMP",
- NL80211_ATTR_DISABLE_VHT: "NL80211_ATTR_DISABLE_VHT",
- NL80211_ATTR_VHT_CAPABILITY_MASK: "NL80211_ATTR_VHT_CAPABILITY_MASK",
- NL80211_ATTR_MDID: "NL80211_ATTR_MDID",
- NL80211_ATTR_IE_RIC: "NL80211_ATTR_IE_RIC",
- NL80211_ATTR_CRIT_PROT_ID: "NL80211_ATTR_CRIT_PROT_ID",
- NL80211_ATTR_MAX_CRIT_PROT_DURATION: "NL80211_ATTR_MAX_CRIT_PROT_DURATION",
- NL80211_ATTR_PEER_AID: "NL80211_ATTR_PEER_AID",
- __NL80211_ATTR_AFTER_LAST: "__NL80211_ATTR_AFTER_LAST",
+ NL80211_ATTR_UNSPEC: "NL80211_ATTR_UNSPEC",
+ NL80211_ATTR_WIPHY: "NL80211_ATTR_WIPHY",
+ NL80211_ATTR_WIPHY_NAME: "NL80211_ATTR_WIPHY_NAME",
+ NL80211_ATTR_IFINDEX: "NL80211_ATTR_IFINDEX",
+ NL80211_ATTR_IFNAME: "NL80211_ATTR_IFNAME",
+ NL80211_ATTR_IFTYPE: "NL80211_ATTR_IFTYPE",
+ NL80211_ATTR_MAC: "NL80211_ATTR_MAC",
+ NL80211_ATTR_KEY_DATA: "NL80211_ATTR_KEY_DATA",
+ NL80211_ATTR_KEY_IDX: "NL80211_ATTR_KEY_IDX",
+ NL80211_ATTR_KEY_CIPHER: "NL80211_ATTR_KEY_CIPHER",
+ NL80211_ATTR_KEY_SEQ: "NL80211_ATTR_KEY_SEQ",
+ NL80211_ATTR_KEY_DEFAULT: "NL80211_ATTR_KEY_DEFAULT",
+ NL80211_ATTR_BEACON_INTERVAL: "NL80211_ATTR_BEACON_INTERVAL",
+ NL80211_ATTR_DTIM_PERIOD: "NL80211_ATTR_DTIM_PERIOD",
+ NL80211_ATTR_BEACON_HEAD: "NL80211_ATTR_BEACON_HEAD",
+ NL80211_ATTR_BEACON_TAIL: "NL80211_ATTR_BEACON_TAIL",
+ NL80211_ATTR_STA_AID: "NL80211_ATTR_STA_AID",
+ NL80211_ATTR_STA_FLAGS: "NL80211_ATTR_STA_FLAGS",
+ NL80211_ATTR_STA_LISTEN_INTERVAL: "NL80211_ATTR_STA_LISTEN_INTERVAL",
+ NL80211_ATTR_STA_SUPPORTED_RATES: "NL80211_ATTR_STA_SUPPORTED_RATES",
+ NL80211_ATTR_STA_VLAN: "NL80211_ATTR_STA_VLAN",
+ NL80211_ATTR_STA_INFO: "NL80211_ATTR_STA_INFO",
+ NL80211_ATTR_WIPHY_BANDS: "NL80211_ATTR_WIPHY_BANDS",
+ NL80211_ATTR_MNTR_FLAGS: "NL80211_ATTR_MNTR_FLAGS",
+ NL80211_ATTR_MESH_ID: "NL80211_ATTR_MESH_ID",
+ NL80211_ATTR_STA_PLINK_ACTION: "NL80211_ATTR_STA_PLINK_ACTION",
+ NL80211_ATTR_MPATH_NEXT_HOP: "NL80211_ATTR_MPATH_NEXT_HOP",
+ NL80211_ATTR_MPATH_INFO: "NL80211_ATTR_MPATH_INFO",
+ NL80211_ATTR_BSS_CTS_PROT: "NL80211_ATTR_BSS_CTS_PROT",
+ NL80211_ATTR_BSS_SHORT_PREAMBLE: "NL80211_ATTR_BSS_SHORT_PREAMBLE",
+ NL80211_ATTR_BSS_SHORT_SLOT_TIME: "NL80211_ATTR_BSS_SHORT_SLOT_TIME",
+ NL80211_ATTR_HT_CAPABILITY: "NL80211_ATTR_HT_CAPABILITY",
+ NL80211_ATTR_SUPPORTED_IFTYPES: "NL80211_ATTR_SUPPORTED_IFTYPES",
+ NL80211_ATTR_REG_ALPHA2: "NL80211_ATTR_REG_ALPHA2",
+ NL80211_ATTR_REG_RULES: "NL80211_ATTR_REG_RULES",
+ NL80211_ATTR_MESH_CONFIG: "NL80211_ATTR_MESH_CONFIG",
+ NL80211_ATTR_BSS_BASIC_RATES: "NL80211_ATTR_BSS_BASIC_RATES",
+ NL80211_ATTR_WIPHY_TXQ_PARAMS: "NL80211_ATTR_WIPHY_TXQ_PARAMS",
+ NL80211_ATTR_WIPHY_FREQ: "NL80211_ATTR_WIPHY_FREQ",
+ NL80211_ATTR_WIPHY_CHANNEL_TYPE: "NL80211_ATTR_WIPHY_CHANNEL_TYPE",
+ NL80211_ATTR_KEY_DEFAULT_MGMT: "NL80211_ATTR_KEY_DEFAULT_MGMT",
+ NL80211_ATTR_MGMT_SUBTYPE: "NL80211_ATTR_MGMT_SUBTYPE",
+ NL80211_ATTR_IE: "NL80211_ATTR_IE",
+ NL80211_ATTR_MAX_NUM_SCAN_SSIDS: "NL80211_ATTR_MAX_NUM_SCAN_SSIDS",
+ NL80211_ATTR_SCAN_FREQUENCIES: "NL80211_ATTR_SCAN_FREQUENCIES",
+ NL80211_ATTR_SCAN_SSIDS: "NL80211_ATTR_SCAN_SSIDS",
+ NL80211_ATTR_GENERATION: "NL80211_ATTR_GENERATION",
+ NL80211_ATTR_BSS: "NL80211_ATTR_BSS",
+ NL80211_ATTR_REG_INITIATOR: "NL80211_ATTR_REG_INITIATOR",
+ NL80211_ATTR_REG_TYPE: "NL80211_ATTR_REG_TYPE",
+ NL80211_ATTR_SUPPORTED_COMMANDS: "NL80211_ATTR_SUPPORTED_COMMANDS",
+ NL80211_ATTR_FRAME: "NL80211_ATTR_FRAME",
+ NL80211_ATTR_SSID: "NL80211_ATTR_SSID",
+ NL80211_ATTR_AUTH_TYPE: "NL80211_ATTR_AUTH_TYPE",
+ NL80211_ATTR_REASON_CODE: "NL80211_ATTR_REASON_CODE",
+ NL80211_ATTR_KEY_TYPE: "NL80211_ATTR_KEY_TYPE",
+ NL80211_ATTR_MAX_SCAN_IE_LEN: "NL80211_ATTR_MAX_SCAN_IE_LEN",
+ NL80211_ATTR_CIPHER_SUITES: "NL80211_ATTR_CIPHER_SUITES",
+ NL80211_ATTR_FREQ_BEFORE: "NL80211_ATTR_FREQ_BEFORE",
+ NL80211_ATTR_FREQ_AFTER: "NL80211_ATTR_FREQ_AFTER",
+ NL80211_ATTR_FREQ_FIXED: "NL80211_ATTR_FREQ_FIXED",
+ NL80211_ATTR_WIPHY_RETRY_SHORT: "NL80211_ATTR_WIPHY_RETRY_SHORT",
+ NL80211_ATTR_WIPHY_RETRY_LONG: "NL80211_ATTR_WIPHY_RETRY_LONG",
+ NL80211_ATTR_WIPHY_FRAG_THRESHOLD: "NL80211_ATTR_WIPHY_FRAG_THRESHOLD",
+ NL80211_ATTR_WIPHY_RTS_THRESHOLD: "NL80211_ATTR_WIPHY_RTS_THRESHOLD",
+ NL80211_ATTR_TIMED_OUT: "NL80211_ATTR_TIMED_OUT",
+ NL80211_ATTR_USE_MFP: "NL80211_ATTR_USE_MFP",
+ NL80211_ATTR_STA_FLAGS2: "NL80211_ATTR_STA_FLAGS2",
+ NL80211_ATTR_CONTROL_PORT: "NL80211_ATTR_CONTROL_PORT",
+ NL80211_ATTR_TESTDATA: "NL80211_ATTR_TESTDATA",
+ NL80211_ATTR_PRIVACY: "NL80211_ATTR_PRIVACY",
+ NL80211_ATTR_DISCONNECTED_BY_AP: "NL80211_ATTR_DISCONNECTED_BY_AP",
+ NL80211_ATTR_STATUS_CODE: "NL80211_ATTR_STATUS_CODE",
+ NL80211_ATTR_CIPHER_SUITES_PAIRWISE: "NL80211_ATTR_CIPHER_SUITES_PAIRWISE",
+ NL80211_ATTR_CIPHER_SUITE_GROUP: "NL80211_ATTR_CIPHER_SUITE_GROUP",
+ NL80211_ATTR_WPA_VERSIONS: "NL80211_ATTR_WPA_VERSIONS",
+ NL80211_ATTR_AKM_SUITES: "NL80211_ATTR_AKM_SUITES",
+ NL80211_ATTR_REQ_IE: "NL80211_ATTR_REQ_IE",
+ NL80211_ATTR_RESP_IE: "NL80211_ATTR_RESP_IE",
+ NL80211_ATTR_PREV_BSSID: "NL80211_ATTR_PREV_BSSID",
+ NL80211_ATTR_KEY: "NL80211_ATTR_KEY",
+ NL80211_ATTR_KEYS: "NL80211_ATTR_KEYS",
+ NL80211_ATTR_PID: "NL80211_ATTR_PID",
+ NL80211_ATTR_4ADDR: "NL80211_ATTR_4ADDR",
+ NL80211_ATTR_SURVEY_INFO: "NL80211_ATTR_SURVEY_INFO",
+ NL80211_ATTR_PMKID: "NL80211_ATTR_PMKID",
+ NL80211_ATTR_MAX_NUM_PMKIDS: "NL80211_ATTR_MAX_NUM_PMKIDS",
+ NL80211_ATTR_DURATION: "NL80211_ATTR_DURATION",
+ NL80211_ATTR_COOKIE: "NL80211_ATTR_COOKIE",
+ NL80211_ATTR_WIPHY_COVERAGE_CLASS: "NL80211_ATTR_WIPHY_COVERAGE_CLASS",
+ NL80211_ATTR_TX_RATES: "NL80211_ATTR_TX_RATES",
+ NL80211_ATTR_FRAME_MATCH: "NL80211_ATTR_FRAME_MATCH",
+ NL80211_ATTR_ACK: "NL80211_ATTR_ACK",
+ NL80211_ATTR_PS_STATE: "NL80211_ATTR_PS_STATE",
+ NL80211_ATTR_CQM: "NL80211_ATTR_CQM",
+ NL80211_ATTR_LOCAL_STATE_CHANGE: "NL80211_ATTR_LOCAL_STATE_CHANGE",
+ NL80211_ATTR_AP_ISOLATE: "NL80211_ATTR_AP_ISOLATE",
+ NL80211_ATTR_WIPHY_TX_POWER_SETTING: "NL80211_ATTR_WIPHY_TX_POWER_SETTING",
+ NL80211_ATTR_WIPHY_TX_POWER_LEVEL: "NL80211_ATTR_WIPHY_TX_POWER_LEVEL",
+ NL80211_ATTR_TX_FRAME_TYPES: "NL80211_ATTR_TX_FRAME_TYPES",
+ NL80211_ATTR_RX_FRAME_TYPES: "NL80211_ATTR_RX_FRAME_TYPES",
+ NL80211_ATTR_FRAME_TYPE: "NL80211_ATTR_FRAME_TYPE",
+ NL80211_ATTR_CONTROL_PORT_ETHERTYPE: "NL80211_ATTR_CONTROL_PORT_ETHERTYPE",
+ NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT: "NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT",
+ NL80211_ATTR_SUPPORT_IBSS_RSN: "NL80211_ATTR_SUPPORT_IBSS_RSN",
+ NL80211_ATTR_WIPHY_ANTENNA_TX: "NL80211_ATTR_WIPHY_ANTENNA_TX",
+ NL80211_ATTR_WIPHY_ANTENNA_RX: "NL80211_ATTR_WIPHY_ANTENNA_RX",
+ NL80211_ATTR_MCAST_RATE: "NL80211_ATTR_MCAST_RATE",
+ NL80211_ATTR_OFFCHANNEL_TX_OK: "NL80211_ATTR_OFFCHANNEL_TX_OK",
+ NL80211_ATTR_BSS_HT_OPMODE: "NL80211_ATTR_BSS_HT_OPMODE",
+ NL80211_ATTR_KEY_DEFAULT_TYPES: "NL80211_ATTR_KEY_DEFAULT_TYPES",
+ NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION: "NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION",
+ NL80211_ATTR_MESH_SETUP: "NL80211_ATTR_MESH_SETUP",
+ NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX: "NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX",
+ NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX: "NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX",
+ NL80211_ATTR_SUPPORT_MESH_AUTH: "NL80211_ATTR_SUPPORT_MESH_AUTH",
+ NL80211_ATTR_STA_PLINK_STATE: "NL80211_ATTR_STA_PLINK_STATE",
+ NL80211_ATTR_WOWLAN_TRIGGERS: "NL80211_ATTR_WOWLAN_TRIGGERS",
+ NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED: "NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED",
+ NL80211_ATTR_SCHED_SCAN_INTERVAL: "NL80211_ATTR_SCHED_SCAN_INTERVAL",
+ NL80211_ATTR_INTERFACE_COMBINATIONS: "NL80211_ATTR_INTERFACE_COMBINATIONS",
+ NL80211_ATTR_SOFTWARE_IFTYPES: "NL80211_ATTR_SOFTWARE_IFTYPES",
+ NL80211_ATTR_REKEY_DATA: "NL80211_ATTR_REKEY_DATA",
+ NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS: "NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS",
+ NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN: "NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN",
+ NL80211_ATTR_SCAN_SUPP_RATES: "NL80211_ATTR_SCAN_SUPP_RATES",
+ NL80211_ATTR_HIDDEN_SSID: "NL80211_ATTR_HIDDEN_SSID",
+ NL80211_ATTR_IE_PROBE_RESP: "NL80211_ATTR_IE_PROBE_RESP",
+ NL80211_ATTR_IE_ASSOC_RESP: "NL80211_ATTR_IE_ASSOC_RESP",
+ NL80211_ATTR_STA_WME: "NL80211_ATTR_STA_WME",
+ NL80211_ATTR_SUPPORT_AP_UAPSD: "NL80211_ATTR_SUPPORT_AP_UAPSD",
+ NL80211_ATTR_ROAM_SUPPORT: "NL80211_ATTR_ROAM_SUPPORT",
+ NL80211_ATTR_SCHED_SCAN_MATCH: "NL80211_ATTR_SCHED_SCAN_MATCH",
+ NL80211_ATTR_MAX_MATCH_SETS: "NL80211_ATTR_MAX_MATCH_SETS",
+ NL80211_ATTR_PMKSA_CANDIDATE: "NL80211_ATTR_PMKSA_CANDIDATE",
+ NL80211_ATTR_TX_NO_CCK_RATE: "NL80211_ATTR_TX_NO_CCK_RATE",
+ NL80211_ATTR_TDLS_ACTION: "NL80211_ATTR_TDLS_ACTION",
+ NL80211_ATTR_TDLS_DIALOG_TOKEN: "NL80211_ATTR_TDLS_DIALOG_TOKEN",
+ NL80211_ATTR_TDLS_OPERATION: "NL80211_ATTR_TDLS_OPERATION",
+ NL80211_ATTR_TDLS_SUPPORT: "NL80211_ATTR_TDLS_SUPPORT",
+ NL80211_ATTR_TDLS_EXTERNAL_SETUP: "NL80211_ATTR_TDLS_EXTERNAL_SETUP",
+ NL80211_ATTR_DEVICE_AP_SME: "NL80211_ATTR_DEVICE_AP_SME",
+ NL80211_ATTR_DONT_WAIT_FOR_ACK: "NL80211_ATTR_DONT_WAIT_FOR_ACK",
+ NL80211_ATTR_FEATURE_FLAGS: "NL80211_ATTR_FEATURE_FLAGS",
+ NL80211_ATTR_PROBE_RESP_OFFLOAD: "NL80211_ATTR_PROBE_RESP_OFFLOAD",
+ NL80211_ATTR_PROBE_RESP: "NL80211_ATTR_PROBE_RESP",
+ NL80211_ATTR_DFS_REGION: "NL80211_ATTR_DFS_REGION",
+ NL80211_ATTR_DISABLE_HT: "NL80211_ATTR_DISABLE_HT",
+ NL80211_ATTR_HT_CAPABILITY_MASK: "NL80211_ATTR_HT_CAPABILITY_MASK",
+ NL80211_ATTR_NOACK_MAP: "NL80211_ATTR_NOACK_MAP",
+ NL80211_ATTR_INACTIVITY_TIMEOUT: "NL80211_ATTR_INACTIVITY_TIMEOUT",
+ NL80211_ATTR_RX_SIGNAL_DBM: "NL80211_ATTR_RX_SIGNAL_DBM",
+ NL80211_ATTR_BG_SCAN_PERIOD: "NL80211_ATTR_BG_SCAN_PERIOD",
+ NL80211_ATTR_WDEV: "NL80211_ATTR_WDEV",
+ NL80211_ATTR_USER_REG_HINT_TYPE: "NL80211_ATTR_USER_REG_HINT_TYPE",
+ NL80211_ATTR_CONN_FAILED_REASON: "NL80211_ATTR_CONN_FAILED_REASON",
+ NL80211_ATTR_SAE_DATA: "NL80211_ATTR_SAE_DATA",
+ NL80211_ATTR_VHT_CAPABILITY: "NL80211_ATTR_VHT_CAPABILITY",
+ NL80211_ATTR_SCAN_FLAGS: "NL80211_ATTR_SCAN_FLAGS",
+ NL80211_ATTR_CHANNEL_WIDTH: "NL80211_ATTR_CHANNEL_WIDTH",
+ NL80211_ATTR_CENTER_FREQ1: "NL80211_ATTR_CENTER_FREQ1",
+ NL80211_ATTR_CENTER_FREQ2: "NL80211_ATTR_CENTER_FREQ2",
+ NL80211_ATTR_P2P_CTWINDOW: "NL80211_ATTR_P2P_CTWINDOW",
+ NL80211_ATTR_P2P_OPPPS: "NL80211_ATTR_P2P_OPPPS",
+ NL80211_ATTR_LOCAL_MESH_POWER_MODE: "NL80211_ATTR_LOCAL_MESH_POWER_MODE",
+ NL80211_ATTR_ACL_POLICY: "NL80211_ATTR_ACL_POLICY",
+ NL80211_ATTR_MAC_ADDRS: "NL80211_ATTR_MAC_ADDRS",
+ NL80211_ATTR_MAC_ACL_MAX: "NL80211_ATTR_MAC_ACL_MAX",
+ NL80211_ATTR_RADAR_EVENT: "NL80211_ATTR_RADAR_EVENT",
+ NL80211_ATTR_EXT_CAPA: "NL80211_ATTR_EXT_CAPA",
+ NL80211_ATTR_EXT_CAPA_MASK: "NL80211_ATTR_EXT_CAPA_MASK",
+ NL80211_ATTR_STA_CAPABILITY: "NL80211_ATTR_STA_CAPABILITY",
+ NL80211_ATTR_STA_EXT_CAPABILITY: "NL80211_ATTR_STA_EXT_CAPABILITY",
+ NL80211_ATTR_PROTOCOL_FEATURES: "NL80211_ATTR_PROTOCOL_FEATURES",
+ NL80211_ATTR_SPLIT_WIPHY_DUMP: "NL80211_ATTR_SPLIT_WIPHY_DUMP",
+ NL80211_ATTR_DISABLE_VHT: "NL80211_ATTR_DISABLE_VHT",
+ NL80211_ATTR_VHT_CAPABILITY_MASK: "NL80211_ATTR_VHT_CAPABILITY_MASK",
+ NL80211_ATTR_MDID: "NL80211_ATTR_MDID",
+ NL80211_ATTR_IE_RIC: "NL80211_ATTR_IE_RIC",
+ NL80211_ATTR_CRIT_PROT_ID: "NL80211_ATTR_CRIT_PROT_ID",
+ NL80211_ATTR_MAX_CRIT_PROT_DURATION: "NL80211_ATTR_MAX_CRIT_PROT_DURATION",
+ NL80211_ATTR_PEER_AID: "NL80211_ATTR_PEER_AID",
+ __NL80211_ATTR_AFTER_LAST: "__NL80211_ATTR_AFTER_LAST",
}
nl80211_iftype2str = {
- NL80211_IFTYPE_UNSPECIFIED: "NL80211_IFTYPE_UNSPECIFIED",
- NL80211_IFTYPE_ADHOC: "NL80211_IFTYPE_ADHOC",
- NL80211_IFTYPE_STATION: "NL80211_IFTYPE_STATION",
- NL80211_IFTYPE_AP: "NL80211_IFTYPE_AP",
- NL80211_IFTYPE_AP_VLAN: "NL80211_IFTYPE_AP_VLAN",
- NL80211_IFTYPE_WDS: "NL80211_IFTYPE_WDS",
- NL80211_IFTYPE_MONITOR: "NL80211_IFTYPE_MONITOR",
- NL80211_IFTYPE_MESH_POINT: "NL80211_IFTYPE_MESH_POINT",
- NL80211_IFTYPE_P2P_CLIENT: "NL80211_IFTYPE_P2P_CLIENT",
- NL80211_IFTYPE_P2P_GO: "NL80211_IFTYPE_P2P_GO",
- NL80211_IFTYPE_P2P_DEVICE: "NL80211_IFTYPE_P2P_DEVICE",
- NUM_NL80211_IFTYPES: "NUM_NL80211_IFTYPES",
+ NL80211_IFTYPE_UNSPECIFIED: "NL80211_IFTYPE_UNSPECIFIED",
+ NL80211_IFTYPE_ADHOC: "NL80211_IFTYPE_ADHOC",
+ NL80211_IFTYPE_STATION: "NL80211_IFTYPE_STATION",
+ NL80211_IFTYPE_AP: "NL80211_IFTYPE_AP",
+ NL80211_IFTYPE_AP_VLAN: "NL80211_IFTYPE_AP_VLAN",
+ NL80211_IFTYPE_WDS: "NL80211_IFTYPE_WDS",
+ NL80211_IFTYPE_MONITOR: "NL80211_IFTYPE_MONITOR",
+ NL80211_IFTYPE_MESH_POINT: "NL80211_IFTYPE_MESH_POINT",
+ NL80211_IFTYPE_P2P_CLIENT: "NL80211_IFTYPE_P2P_CLIENT",
+ NL80211_IFTYPE_P2P_GO: "NL80211_IFTYPE_P2P_GO",
+ NL80211_IFTYPE_P2P_DEVICE: "NL80211_IFTYPE_P2P_DEVICE",
+ NUM_NL80211_IFTYPES: "NUM_NL80211_IFTYPES",
}
nl80211_sta_flags2str = {
- __NL80211_STA_FLAG_INVALID: "__NL80211_STA_FLAG_INVALID",
- NL80211_STA_FLAG_AUTHORIZED: "NL80211_STA_FLAG_AUTHORIZED",
- NL80211_STA_FLAG_SHORT_PREAMBLE: "NL80211_STA_FLAG_SHORT_PREAMBLE",
- NL80211_STA_FLAG_WME: "NL80211_STA_FLAG_WME",
- NL80211_STA_FLAG_MFP: "NL80211_STA_FLAG_MFP",
- NL80211_STA_FLAG_AUTHENTICATED: "NL80211_STA_FLAG_AUTHENTICATED",
- NL80211_STA_FLAG_TDLS_PEER: "NL80211_STA_FLAG_TDLS_PEER",
- NL80211_STA_FLAG_ASSOCIATED: "NL80211_STA_FLAG_ASSOCIATED",
- __NL80211_STA_FLAG_AFTER_LAST: "__NL80211_STA_FLAG_AFTER_LAST",
+ __NL80211_STA_FLAG_INVALID: "__NL80211_STA_FLAG_INVALID",
+ NL80211_STA_FLAG_AUTHORIZED: "NL80211_STA_FLAG_AUTHORIZED",
+ NL80211_STA_FLAG_SHORT_PREAMBLE: "NL80211_STA_FLAG_SHORT_PREAMBLE",
+ NL80211_STA_FLAG_WME: "NL80211_STA_FLAG_WME",
+ NL80211_STA_FLAG_MFP: "NL80211_STA_FLAG_MFP",
+ NL80211_STA_FLAG_AUTHENTICATED: "NL80211_STA_FLAG_AUTHENTICATED",
+ NL80211_STA_FLAG_TDLS_PEER: "NL80211_STA_FLAG_TDLS_PEER",
+ NL80211_STA_FLAG_ASSOCIATED: "NL80211_STA_FLAG_ASSOCIATED",
+ __NL80211_STA_FLAG_AFTER_LAST: "__NL80211_STA_FLAG_AFTER_LAST",
}
nl80211_rate_info2str = {
- __NL80211_RATE_INFO_INVALID: "__NL80211_RATE_INFO_INVALID",
- NL80211_RATE_INFO_BITRATE: "NL80211_RATE_INFO_BITRATE",
- NL80211_RATE_INFO_MCS: "NL80211_RATE_INFO_MCS",
- NL80211_RATE_INFO_40_MHZ_WIDTH: "NL80211_RATE_INFO_40_MHZ_WIDTH",
- NL80211_RATE_INFO_SHORT_GI: "NL80211_RATE_INFO_SHORT_GI",
- NL80211_RATE_INFO_BITRATE32: "NL80211_RATE_INFO_BITRATE32",
- NL80211_RATE_INFO_VHT_MCS: "NL80211_RATE_INFO_VHT_MCS",
- NL80211_RATE_INFO_VHT_NSS: "NL80211_RATE_INFO_VHT_NSS",
- NL80211_RATE_INFO_80_MHZ_WIDTH: "NL80211_RATE_INFO_80_MHZ_WIDTH",
- NL80211_RATE_INFO_80P80_MHZ_WIDTH: "NL80211_RATE_INFO_80P80_MHZ_WIDTH",
- NL80211_RATE_INFO_160_MHZ_WIDTH: "NL80211_RATE_INFO_160_MHZ_WIDTH",
- __NL80211_RATE_INFO_AFTER_LAST: "__NL80211_RATE_INFO_AFTER_LAST",
+ __NL80211_RATE_INFO_INVALID: "__NL80211_RATE_INFO_INVALID",
+ NL80211_RATE_INFO_BITRATE: "NL80211_RATE_INFO_BITRATE",
+ NL80211_RATE_INFO_MCS: "NL80211_RATE_INFO_MCS",
+ NL80211_RATE_INFO_40_MHZ_WIDTH: "NL80211_RATE_INFO_40_MHZ_WIDTH",
+ NL80211_RATE_INFO_SHORT_GI: "NL80211_RATE_INFO_SHORT_GI",
+ NL80211_RATE_INFO_BITRATE32: "NL80211_RATE_INFO_BITRATE32",
+ NL80211_RATE_INFO_VHT_MCS: "NL80211_RATE_INFO_VHT_MCS",
+ NL80211_RATE_INFO_VHT_NSS: "NL80211_RATE_INFO_VHT_NSS",
+ NL80211_RATE_INFO_80_MHZ_WIDTH: "NL80211_RATE_INFO_80_MHZ_WIDTH",
+ NL80211_RATE_INFO_80P80_MHZ_WIDTH: "NL80211_RATE_INFO_80P80_MHZ_WIDTH",
+ NL80211_RATE_INFO_160_MHZ_WIDTH: "NL80211_RATE_INFO_160_MHZ_WIDTH",
+ __NL80211_RATE_INFO_AFTER_LAST: "__NL80211_RATE_INFO_AFTER_LAST",
}
nl80211_sta_bss_param2str = {
- __NL80211_STA_BSS_PARAM_INVALID: "__NL80211_STA_BSS_PARAM_INVALID",
- NL80211_STA_BSS_PARAM_CTS_PROT: "NL80211_STA_BSS_PARAM_CTS_PROT",
- NL80211_STA_BSS_PARAM_SHORT_PREAMBLE: "NL80211_STA_BSS_PARAM_SHORT_PREAMBLE",
- NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME: "NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME",
- NL80211_STA_BSS_PARAM_DTIM_PERIOD: "NL80211_STA_BSS_PARAM_DTIM_PERIOD",
- NL80211_STA_BSS_PARAM_BEACON_INTERVAL: "NL80211_STA_BSS_PARAM_BEACON_INTERVAL",
- __NL80211_STA_BSS_PARAM_AFTER_LAST: "__NL80211_STA_BSS_PARAM_AFTER_LAST",
+ __NL80211_STA_BSS_PARAM_INVALID: "__NL80211_STA_BSS_PARAM_INVALID",
+ NL80211_STA_BSS_PARAM_CTS_PROT: "NL80211_STA_BSS_PARAM_CTS_PROT",
+ NL80211_STA_BSS_PARAM_SHORT_PREAMBLE: "NL80211_STA_BSS_PARAM_SHORT_PREAMBLE",
+ NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME: "NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME",
+ NL80211_STA_BSS_PARAM_DTIM_PERIOD: "NL80211_STA_BSS_PARAM_DTIM_PERIOD",
+ NL80211_STA_BSS_PARAM_BEACON_INTERVAL: "NL80211_STA_BSS_PARAM_BEACON_INTERVAL",
+ __NL80211_STA_BSS_PARAM_AFTER_LAST: "__NL80211_STA_BSS_PARAM_AFTER_LAST",
}
nl80211_sta_info2str = {
- __NL80211_STA_INFO_INVALID: "__NL80211_STA_INFO_INVALID",
- NL80211_STA_INFO_INACTIVE_TIME: "NL80211_STA_INFO_INACTIVE_TIME",
- NL80211_STA_INFO_RX_BYTES: "NL80211_STA_INFO_RX_BYTES",
- NL80211_STA_INFO_TX_BYTES: "NL80211_STA_INFO_TX_BYTES",
- NL80211_STA_INFO_LLID: "NL80211_STA_INFO_LLID",
- NL80211_STA_INFO_PLID: "NL80211_STA_INFO_PLID",
- NL80211_STA_INFO_PLINK_STATE: "NL80211_STA_INFO_PLINK_STATE",
- NL80211_STA_INFO_SIGNAL: "NL80211_STA_INFO_SIGNAL",
- NL80211_STA_INFO_TX_BITRATE: "NL80211_STA_INFO_TX_BITRATE",
- NL80211_STA_INFO_RX_PACKETS: "NL80211_STA_INFO_RX_PACKETS",
- NL80211_STA_INFO_TX_PACKETS: "NL80211_STA_INFO_TX_PACKETS",
- NL80211_STA_INFO_TX_RETRIES: "NL80211_STA_INFO_TX_RETRIES",
- NL80211_STA_INFO_TX_FAILED: "NL80211_STA_INFO_TX_FAILED",
- NL80211_STA_INFO_SIGNAL_AVG: "NL80211_STA_INFO_SIGNAL_AVG",
- NL80211_STA_INFO_RX_BITRATE: "NL80211_STA_INFO_RX_BITRATE",
- NL80211_STA_INFO_BSS_PARAM: "NL80211_STA_INFO_BSS_PARAM",
- NL80211_STA_INFO_CONNECTED_TIME: "NL80211_STA_INFO_CONNECTED_TIME",
- NL80211_STA_INFO_STA_FLAGS: "NL80211_STA_INFO_STA_FLAGS",
- NL80211_STA_INFO_BEACON_LOSS: "NL80211_STA_INFO_BEACON_LOSS",
- NL80211_STA_INFO_T_OFFSET: "NL80211_STA_INFO_T_OFFSET",
- NL80211_STA_INFO_LOCAL_PM: "NL80211_STA_INFO_LOCAL_PM",
- NL80211_STA_INFO_PEER_PM: "NL80211_STA_INFO_PEER_PM",
- NL80211_STA_INFO_NONPEER_PM: "NL80211_STA_INFO_NONPEER_PM",
- NL80211_STA_INFO_RX_BYTES64: "NL80211_STA_INFO_RX_BYTES64",
- NL80211_STA_INFO_TX_BYTES64: "NL80211_STA_INFO_TX_BYTES64",
- NL80211_STA_INFO_CHAIN_SIGNAL: "NL80211_STA_INFO_CHAIN_SIGNAL",
- NL80211_STA_INFO_CHAIN_SIGNAL_AVG: "NL80211_STA_INFO_CHAIN_SIGNAL_AVG",
- __NL80211_STA_INFO_AFTER_LAST: "__NL80211_STA_INFO_AFTER_LAST",
+ __NL80211_STA_INFO_INVALID: "__NL80211_STA_INFO_INVALID",
+ NL80211_STA_INFO_INACTIVE_TIME: "NL80211_STA_INFO_INACTIVE_TIME",
+ NL80211_STA_INFO_RX_BYTES: "NL80211_STA_INFO_RX_BYTES",
+ NL80211_STA_INFO_TX_BYTES: "NL80211_STA_INFO_TX_BYTES",
+ NL80211_STA_INFO_LLID: "NL80211_STA_INFO_LLID",
+ NL80211_STA_INFO_PLID: "NL80211_STA_INFO_PLID",
+ NL80211_STA_INFO_PLINK_STATE: "NL80211_STA_INFO_PLINK_STATE",
+ NL80211_STA_INFO_SIGNAL: "NL80211_STA_INFO_SIGNAL",
+ NL80211_STA_INFO_TX_BITRATE: "NL80211_STA_INFO_TX_BITRATE",
+ NL80211_STA_INFO_RX_PACKETS: "NL80211_STA_INFO_RX_PACKETS",
+ NL80211_STA_INFO_TX_PACKETS: "NL80211_STA_INFO_TX_PACKETS",
+ NL80211_STA_INFO_TX_RETRIES: "NL80211_STA_INFO_TX_RETRIES",
+ NL80211_STA_INFO_TX_FAILED: "NL80211_STA_INFO_TX_FAILED",
+ NL80211_STA_INFO_SIGNAL_AVG: "NL80211_STA_INFO_SIGNAL_AVG",
+ NL80211_STA_INFO_RX_BITRATE: "NL80211_STA_INFO_RX_BITRATE",
+ NL80211_STA_INFO_BSS_PARAM: "NL80211_STA_INFO_BSS_PARAM",
+ NL80211_STA_INFO_CONNECTED_TIME: "NL80211_STA_INFO_CONNECTED_TIME",
+ NL80211_STA_INFO_STA_FLAGS: "NL80211_STA_INFO_STA_FLAGS",
+ NL80211_STA_INFO_BEACON_LOSS: "NL80211_STA_INFO_BEACON_LOSS",
+ NL80211_STA_INFO_T_OFFSET: "NL80211_STA_INFO_T_OFFSET",
+ NL80211_STA_INFO_LOCAL_PM: "NL80211_STA_INFO_LOCAL_PM",
+ NL80211_STA_INFO_PEER_PM: "NL80211_STA_INFO_PEER_PM",
+ NL80211_STA_INFO_NONPEER_PM: "NL80211_STA_INFO_NONPEER_PM",
+ NL80211_STA_INFO_RX_BYTES64: "NL80211_STA_INFO_RX_BYTES64",
+ NL80211_STA_INFO_TX_BYTES64: "NL80211_STA_INFO_TX_BYTES64",
+ NL80211_STA_INFO_CHAIN_SIGNAL: "NL80211_STA_INFO_CHAIN_SIGNAL",
+ NL80211_STA_INFO_CHAIN_SIGNAL_AVG: "NL80211_STA_INFO_CHAIN_SIGNAL_AVG",
+ __NL80211_STA_INFO_AFTER_LAST: "__NL80211_STA_INFO_AFTER_LAST",
}
nl80211_mpath_flags2str = {
- NL80211_MPATH_FLAG_ACTIVE: "NL80211_MPATH_FLAG_ACTIVE",
- NL80211_MPATH_FLAG_RESOLVING: "NL80211_MPATH_FLAG_RESOLVING",
- NL80211_MPATH_FLAG_SN_VALID: "NL80211_MPATH_FLAG_SN_VALID",
- NL80211_MPATH_FLAG_FIXED: "NL80211_MPATH_FLAG_FIXED",
- NL80211_MPATH_FLAG_RESOLVED: "NL80211_MPATH_FLAG_RESOLVED",
+ NL80211_MPATH_FLAG_ACTIVE: "NL80211_MPATH_FLAG_ACTIVE",
+ NL80211_MPATH_FLAG_RESOLVING: "NL80211_MPATH_FLAG_RESOLVING",
+ NL80211_MPATH_FLAG_SN_VALID: "NL80211_MPATH_FLAG_SN_VALID",
+ NL80211_MPATH_FLAG_FIXED: "NL80211_MPATH_FLAG_FIXED",
+ NL80211_MPATH_FLAG_RESOLVED: "NL80211_MPATH_FLAG_RESOLVED",
}
nl80211_mpath_info2str = {
- __NL80211_MPATH_INFO_INVALID: "__NL80211_MPATH_INFO_INVALID",
- NL80211_MPATH_INFO_FRAME_QLEN: "NL80211_MPATH_INFO_FRAME_QLEN",
- NL80211_MPATH_INFO_SN: "NL80211_MPATH_INFO_SN",
- NL80211_MPATH_INFO_METRIC: "NL80211_MPATH_INFO_METRIC",
- NL80211_MPATH_INFO_EXPTIME: "NL80211_MPATH_INFO_EXPTIME",
- NL80211_MPATH_INFO_FLAGS: "NL80211_MPATH_INFO_FLAGS",
- NL80211_MPATH_INFO_DISCOVERY_TIMEOUT: "NL80211_MPATH_INFO_DISCOVERY_TIMEOUT",
- NL80211_MPATH_INFO_DISCOVERY_RETRIES: "NL80211_MPATH_INFO_DISCOVERY_RETRIES",
- __NL80211_MPATH_INFO_AFTER_LAST: "__NL80211_MPATH_INFO_AFTER_LAST",
+ __NL80211_MPATH_INFO_INVALID: "__NL80211_MPATH_INFO_INVALID",
+ NL80211_MPATH_INFO_FRAME_QLEN: "NL80211_MPATH_INFO_FRAME_QLEN",
+ NL80211_MPATH_INFO_SN: "NL80211_MPATH_INFO_SN",
+ NL80211_MPATH_INFO_METRIC: "NL80211_MPATH_INFO_METRIC",
+ NL80211_MPATH_INFO_EXPTIME: "NL80211_MPATH_INFO_EXPTIME",
+ NL80211_MPATH_INFO_FLAGS: "NL80211_MPATH_INFO_FLAGS",
+ NL80211_MPATH_INFO_DISCOVERY_TIMEOUT: "NL80211_MPATH_INFO_DISCOVERY_TIMEOUT",
+ NL80211_MPATH_INFO_DISCOVERY_RETRIES: "NL80211_MPATH_INFO_DISCOVERY_RETRIES",
+ __NL80211_MPATH_INFO_AFTER_LAST: "__NL80211_MPATH_INFO_AFTER_LAST",
}
nl80211_band_attr2str = {
- __NL80211_BAND_ATTR_INVALID: "__NL80211_BAND_ATTR_INVALID",
- NL80211_BAND_ATTR_FREQS: "NL80211_BAND_ATTR_FREQS",
- NL80211_BAND_ATTR_RATES: "NL80211_BAND_ATTR_RATES",
- NL80211_BAND_ATTR_HT_MCS_SET: "NL80211_BAND_ATTR_HT_MCS_SET",
- NL80211_BAND_ATTR_HT_CAPA: "NL80211_BAND_ATTR_HT_CAPA",
- NL80211_BAND_ATTR_HT_AMPDU_FACTOR: "NL80211_BAND_ATTR_HT_AMPDU_FACTOR",
- NL80211_BAND_ATTR_HT_AMPDU_DENSITY: "NL80211_BAND_ATTR_HT_AMPDU_DENSITY",
- NL80211_BAND_ATTR_VHT_MCS_SET: "NL80211_BAND_ATTR_VHT_MCS_SET",
- NL80211_BAND_ATTR_VHT_CAPA: "NL80211_BAND_ATTR_VHT_CAPA",
- __NL80211_BAND_ATTR_AFTER_LAST: "__NL80211_BAND_ATTR_AFTER_LAST",
+ __NL80211_BAND_ATTR_INVALID: "__NL80211_BAND_ATTR_INVALID",
+ NL80211_BAND_ATTR_FREQS: "NL80211_BAND_ATTR_FREQS",
+ NL80211_BAND_ATTR_RATES: "NL80211_BAND_ATTR_RATES",
+ NL80211_BAND_ATTR_HT_MCS_SET: "NL80211_BAND_ATTR_HT_MCS_SET",
+ NL80211_BAND_ATTR_HT_CAPA: "NL80211_BAND_ATTR_HT_CAPA",
+ NL80211_BAND_ATTR_HT_AMPDU_FACTOR: "NL80211_BAND_ATTR_HT_AMPDU_FACTOR",
+ NL80211_BAND_ATTR_HT_AMPDU_DENSITY: "NL80211_BAND_ATTR_HT_AMPDU_DENSITY",
+ NL80211_BAND_ATTR_VHT_MCS_SET: "NL80211_BAND_ATTR_VHT_MCS_SET",
+ NL80211_BAND_ATTR_VHT_CAPA: "NL80211_BAND_ATTR_VHT_CAPA",
+ __NL80211_BAND_ATTR_AFTER_LAST: "__NL80211_BAND_ATTR_AFTER_LAST",
}
nl80211_frequency_attr2str = {
- __NL80211_FREQUENCY_ATTR_INVALID: "__NL80211_FREQUENCY_ATTR_INVALID",
- NL80211_FREQUENCY_ATTR_FREQ: "NL80211_FREQUENCY_ATTR_FREQ",
- NL80211_FREQUENCY_ATTR_DISABLED: "NL80211_FREQUENCY_ATTR_DISABLED",
- NL80211_FREQUENCY_ATTR_PASSIVE_SCAN: "NL80211_FREQUENCY_ATTR_PASSIVE_SCAN",
- NL80211_FREQUENCY_ATTR_NO_IBSS: "NL80211_FREQUENCY_ATTR_NO_IBSS",
- NL80211_FREQUENCY_ATTR_RADAR: "NL80211_FREQUENCY_ATTR_RADAR",
- NL80211_FREQUENCY_ATTR_MAX_TX_POWER: "NL80211_FREQUENCY_ATTR_MAX_TX_POWER",
- NL80211_FREQUENCY_ATTR_DFS_STATE: "NL80211_FREQUENCY_ATTR_DFS_STATE",
- NL80211_FREQUENCY_ATTR_DFS_TIME: "NL80211_FREQUENCY_ATTR_DFS_TIME",
- NL80211_FREQUENCY_ATTR_NO_HT40_MINUS: "NL80211_FREQUENCY_ATTR_NO_HT40_MINUS",
- NL80211_FREQUENCY_ATTR_NO_HT40_PLUS: "NL80211_FREQUENCY_ATTR_NO_HT40_PLUS",
- NL80211_FREQUENCY_ATTR_NO_80MHZ: "NL80211_FREQUENCY_ATTR_NO_80MHZ",
- NL80211_FREQUENCY_ATTR_NO_160MHZ: "NL80211_FREQUENCY_ATTR_NO_160MHZ",
- __NL80211_FREQUENCY_ATTR_AFTER_LAST: "__NL80211_FREQUENCY_ATTR_AFTER_LAST",
+ __NL80211_FREQUENCY_ATTR_INVALID: "__NL80211_FREQUENCY_ATTR_INVALID",
+ NL80211_FREQUENCY_ATTR_FREQ: "NL80211_FREQUENCY_ATTR_FREQ",
+ NL80211_FREQUENCY_ATTR_DISABLED: "NL80211_FREQUENCY_ATTR_DISABLED",
+ NL80211_FREQUENCY_ATTR_PASSIVE_SCAN: "NL80211_FREQUENCY_ATTR_PASSIVE_SCAN",
+ NL80211_FREQUENCY_ATTR_NO_IBSS: "NL80211_FREQUENCY_ATTR_NO_IBSS",
+ NL80211_FREQUENCY_ATTR_RADAR: "NL80211_FREQUENCY_ATTR_RADAR",
+ NL80211_FREQUENCY_ATTR_MAX_TX_POWER: "NL80211_FREQUENCY_ATTR_MAX_TX_POWER",
+ NL80211_FREQUENCY_ATTR_DFS_STATE: "NL80211_FREQUENCY_ATTR_DFS_STATE",
+ NL80211_FREQUENCY_ATTR_DFS_TIME: "NL80211_FREQUENCY_ATTR_DFS_TIME",
+ NL80211_FREQUENCY_ATTR_NO_HT40_MINUS: "NL80211_FREQUENCY_ATTR_NO_HT40_MINUS",
+ NL80211_FREQUENCY_ATTR_NO_HT40_PLUS: "NL80211_FREQUENCY_ATTR_NO_HT40_PLUS",
+ NL80211_FREQUENCY_ATTR_NO_80MHZ: "NL80211_FREQUENCY_ATTR_NO_80MHZ",
+ NL80211_FREQUENCY_ATTR_NO_160MHZ: "NL80211_FREQUENCY_ATTR_NO_160MHZ",
+ __NL80211_FREQUENCY_ATTR_AFTER_LAST: "__NL80211_FREQUENCY_ATTR_AFTER_LAST",
}
nl80211_bitrate_attr2str = {
- __NL80211_BITRATE_ATTR_INVALID: "__NL80211_BITRATE_ATTR_INVALID",
- NL80211_BITRATE_ATTR_RATE: "NL80211_BITRATE_ATTR_RATE",
- NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE: "NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE",
- __NL80211_BITRATE_ATTR_AFTER_LAST: "__NL80211_BITRATE_ATTR_AFTER_LAST",
+ __NL80211_BITRATE_ATTR_INVALID: "__NL80211_BITRATE_ATTR_INVALID",
+ NL80211_BITRATE_ATTR_RATE: "NL80211_BITRATE_ATTR_RATE",
+ NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE: "NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE",
+ __NL80211_BITRATE_ATTR_AFTER_LAST: "__NL80211_BITRATE_ATTR_AFTER_LAST",
}
nl80211_reg_initiator2str = {
- NL80211_REGDOM_SET_BY_CORE: "NL80211_REGDOM_SET_BY_CORE",
- NL80211_REGDOM_SET_BY_USER: "NL80211_REGDOM_SET_BY_USER",
- NL80211_REGDOM_SET_BY_DRIVER: "NL80211_REGDOM_SET_BY_DRIVER",
- NL80211_REGDOM_SET_BY_COUNTRY_IE: "NL80211_REGDOM_SET_BY_COUNTRY_IE",
+ NL80211_REGDOM_SET_BY_CORE: "NL80211_REGDOM_SET_BY_CORE",
+ NL80211_REGDOM_SET_BY_USER: "NL80211_REGDOM_SET_BY_USER",
+ NL80211_REGDOM_SET_BY_DRIVER: "NL80211_REGDOM_SET_BY_DRIVER",
+ NL80211_REGDOM_SET_BY_COUNTRY_IE: "NL80211_REGDOM_SET_BY_COUNTRY_IE",
}
nl80211_reg_type2str = {
- NL80211_REGDOM_TYPE_COUNTRY: "NL80211_REGDOM_TYPE_COUNTRY",
- NL80211_REGDOM_TYPE_WORLD: "NL80211_REGDOM_TYPE_WORLD",
- NL80211_REGDOM_TYPE_CUSTOM_WORLD: "NL80211_REGDOM_TYPE_CUSTOM_WORLD",
- NL80211_REGDOM_TYPE_INTERSECTION: "NL80211_REGDOM_TYPE_INTERSECTION",
+ NL80211_REGDOM_TYPE_COUNTRY: "NL80211_REGDOM_TYPE_COUNTRY",
+ NL80211_REGDOM_TYPE_WORLD: "NL80211_REGDOM_TYPE_WORLD",
+ NL80211_REGDOM_TYPE_CUSTOM_WORLD: "NL80211_REGDOM_TYPE_CUSTOM_WORLD",
+ NL80211_REGDOM_TYPE_INTERSECTION: "NL80211_REGDOM_TYPE_INTERSECTION",
}
nl80211_reg_rule_attr2str = {
- __NL80211_REG_RULE_ATTR_INVALID: "__NL80211_REG_RULE_ATTR_INVALID",
- NL80211_ATTR_REG_RULE_FLAGS: "NL80211_ATTR_REG_RULE_FLAGS",
- NL80211_ATTR_FREQ_RANGE_START: "NL80211_ATTR_FREQ_RANGE_START",
- NL80211_ATTR_FREQ_RANGE_END: "NL80211_ATTR_FREQ_RANGE_END",
- NL80211_ATTR_FREQ_RANGE_MAX_BW: "NL80211_ATTR_FREQ_RANGE_MAX_BW",
- NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN: "NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN",
- NL80211_ATTR_POWER_RULE_MAX_EIRP: "NL80211_ATTR_POWER_RULE_MAX_EIRP",
- __NL80211_REG_RULE_ATTR_AFTER_LAST: "__NL80211_REG_RULE_ATTR_AFTER_LAST",
+ __NL80211_REG_RULE_ATTR_INVALID: "__NL80211_REG_RULE_ATTR_INVALID",
+ NL80211_ATTR_REG_RULE_FLAGS: "NL80211_ATTR_REG_RULE_FLAGS",
+ NL80211_ATTR_FREQ_RANGE_START: "NL80211_ATTR_FREQ_RANGE_START",
+ NL80211_ATTR_FREQ_RANGE_END: "NL80211_ATTR_FREQ_RANGE_END",
+ NL80211_ATTR_FREQ_RANGE_MAX_BW: "NL80211_ATTR_FREQ_RANGE_MAX_BW",
+ NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN: "NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN",
+ NL80211_ATTR_POWER_RULE_MAX_EIRP: "NL80211_ATTR_POWER_RULE_MAX_EIRP",
+ __NL80211_REG_RULE_ATTR_AFTER_LAST: "__NL80211_REG_RULE_ATTR_AFTER_LAST",
}
nl80211_sched_scan_match_attr2str = {
- __NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: "__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID",
- NL80211_SCHED_SCAN_MATCH_ATTR_SSID: "NL80211_SCHED_SCAN_MATCH_ATTR_SSID",
- NL80211_SCHED_SCAN_MATCH_ATTR_RSSI: "NL80211_SCHED_SCAN_MATCH_ATTR_RSSI",
- __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: "__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST",
+ __NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: "__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID",
+ NL80211_SCHED_SCAN_MATCH_ATTR_SSID: "NL80211_SCHED_SCAN_MATCH_ATTR_SSID",
+ NL80211_SCHED_SCAN_MATCH_ATTR_RSSI: "NL80211_SCHED_SCAN_MATCH_ATTR_RSSI",
+ __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: "__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST",
}
nl80211_reg_rule_flags2str = {
- NL80211_RRF_NO_OFDM: "NL80211_RRF_NO_OFDM",
- NL80211_RRF_NO_CCK: "NL80211_RRF_NO_CCK",
- NL80211_RRF_NO_INDOOR: "NL80211_RRF_NO_INDOOR",
- NL80211_RRF_NO_OUTDOOR: "NL80211_RRF_NO_OUTDOOR",
- NL80211_RRF_DFS: "NL80211_RRF_DFS",
- NL80211_RRF_PTP_ONLY: "NL80211_RRF_PTP_ONLY",
- NL80211_RRF_PTMP_ONLY: "NL80211_RRF_PTMP_ONLY",
- NL80211_RRF_PASSIVE_SCAN: "NL80211_RRF_PASSIVE_SCAN",
- NL80211_RRF_NO_IBSS: "NL80211_RRF_NO_IBSS",
-}
-nl80211_dfs_regions2str = {
-}
-nl80211_user_reg_hint_type2str = {
+ NL80211_RRF_NO_OFDM: "NL80211_RRF_NO_OFDM",
+ NL80211_RRF_NO_CCK: "NL80211_RRF_NO_CCK",
+ NL80211_RRF_NO_INDOOR: "NL80211_RRF_NO_INDOOR",
+ NL80211_RRF_NO_OUTDOOR: "NL80211_RRF_NO_OUTDOOR",
+ NL80211_RRF_DFS: "NL80211_RRF_DFS",
+ NL80211_RRF_PTP_ONLY: "NL80211_RRF_PTP_ONLY",
+ NL80211_RRF_PTMP_ONLY: "NL80211_RRF_PTMP_ONLY",
+ NL80211_RRF_PASSIVE_SCAN: "NL80211_RRF_PASSIVE_SCAN",
+ NL80211_RRF_NO_IBSS: "NL80211_RRF_NO_IBSS",
}
+nl80211_dfs_regions2str = {}
+nl80211_user_reg_hint_type2str = {}
nl80211_survey_info2str = {
- __NL80211_SURVEY_INFO_INVALID: "__NL80211_SURVEY_INFO_INVALID",
- NL80211_SURVEY_INFO_FREQUENCY: "NL80211_SURVEY_INFO_FREQUENCY",
- NL80211_SURVEY_INFO_NOISE: "NL80211_SURVEY_INFO_NOISE",
- NL80211_SURVEY_INFO_IN_USE: "NL80211_SURVEY_INFO_IN_USE",
- NL80211_SURVEY_INFO_CHANNEL_TIME: "NL80211_SURVEY_INFO_CHANNEL_TIME",
- NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY: "NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY",
- NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY: "NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY",
- NL80211_SURVEY_INFO_CHANNEL_TIME_RX: "NL80211_SURVEY_INFO_CHANNEL_TIME_RX",
- NL80211_SURVEY_INFO_CHANNEL_TIME_TX: "NL80211_SURVEY_INFO_CHANNEL_TIME_TX",
- __NL80211_SURVEY_INFO_AFTER_LAST: "__NL80211_SURVEY_INFO_AFTER_LAST",
+ __NL80211_SURVEY_INFO_INVALID: "__NL80211_SURVEY_INFO_INVALID",
+ NL80211_SURVEY_INFO_FREQUENCY: "NL80211_SURVEY_INFO_FREQUENCY",
+ NL80211_SURVEY_INFO_NOISE: "NL80211_SURVEY_INFO_NOISE",
+ NL80211_SURVEY_INFO_IN_USE: "NL80211_SURVEY_INFO_IN_USE",
+ NL80211_SURVEY_INFO_CHANNEL_TIME: "NL80211_SURVEY_INFO_CHANNEL_TIME",
+ NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY: "NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY",
+ NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY: "NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY",
+ NL80211_SURVEY_INFO_CHANNEL_TIME_RX: "NL80211_SURVEY_INFO_CHANNEL_TIME_RX",
+ NL80211_SURVEY_INFO_CHANNEL_TIME_TX: "NL80211_SURVEY_INFO_CHANNEL_TIME_TX",
+ __NL80211_SURVEY_INFO_AFTER_LAST: "__NL80211_SURVEY_INFO_AFTER_LAST",
}
nl80211_mntr_flags2str = {
- __NL80211_MNTR_FLAG_INVALID: "__NL80211_MNTR_FLAG_INVALID",
- NL80211_MNTR_FLAG_FCSFAIL: "NL80211_MNTR_FLAG_FCSFAIL",
- NL80211_MNTR_FLAG_PLCPFAIL: "NL80211_MNTR_FLAG_PLCPFAIL",
- NL80211_MNTR_FLAG_CONTROL: "NL80211_MNTR_FLAG_CONTROL",
- NL80211_MNTR_FLAG_OTHER_BSS: "NL80211_MNTR_FLAG_OTHER_BSS",
- NL80211_MNTR_FLAG_COOK_FRAMES: "NL80211_MNTR_FLAG_COOK_FRAMES",
- NL80211_MNTR_FLAG_ACTIVE: "NL80211_MNTR_FLAG_ACTIVE",
- __NL80211_MNTR_FLAG_AFTER_LAST: "__NL80211_MNTR_FLAG_AFTER_LAST",
+ __NL80211_MNTR_FLAG_INVALID: "__NL80211_MNTR_FLAG_INVALID",
+ NL80211_MNTR_FLAG_FCSFAIL: "NL80211_MNTR_FLAG_FCSFAIL",
+ NL80211_MNTR_FLAG_PLCPFAIL: "NL80211_MNTR_FLAG_PLCPFAIL",
+ NL80211_MNTR_FLAG_CONTROL: "NL80211_MNTR_FLAG_CONTROL",
+ NL80211_MNTR_FLAG_OTHER_BSS: "NL80211_MNTR_FLAG_OTHER_BSS",
+ NL80211_MNTR_FLAG_COOK_FRAMES: "NL80211_MNTR_FLAG_COOK_FRAMES",
+ NL80211_MNTR_FLAG_ACTIVE: "NL80211_MNTR_FLAG_ACTIVE",
+ __NL80211_MNTR_FLAG_AFTER_LAST: "__NL80211_MNTR_FLAG_AFTER_LAST",
}
nl80211_mesh_power_mode2str = {
- NL80211_MESH_POWER_UNKNOWN: "NL80211_MESH_POWER_UNKNOWN",
- NL80211_MESH_POWER_ACTIVE: "NL80211_MESH_POWER_ACTIVE",
- NL80211_MESH_POWER_LIGHT_SLEEP: "NL80211_MESH_POWER_LIGHT_SLEEP",
- NL80211_MESH_POWER_DEEP_SLEEP: "NL80211_MESH_POWER_DEEP_SLEEP",
- __NL80211_MESH_POWER_AFTER_LAST: "__NL80211_MESH_POWER_AFTER_LAST",
+ NL80211_MESH_POWER_UNKNOWN: "NL80211_MESH_POWER_UNKNOWN",
+ NL80211_MESH_POWER_ACTIVE: "NL80211_MESH_POWER_ACTIVE",
+ NL80211_MESH_POWER_LIGHT_SLEEP: "NL80211_MESH_POWER_LIGHT_SLEEP",
+ NL80211_MESH_POWER_DEEP_SLEEP: "NL80211_MESH_POWER_DEEP_SLEEP",
+ __NL80211_MESH_POWER_AFTER_LAST: "__NL80211_MESH_POWER_AFTER_LAST",
}
nl80211_meshconf_params2str = {
- __NL80211_MESHCONF_INVALID: "__NL80211_MESHCONF_INVALID",
- NL80211_MESHCONF_RETRY_TIMEOUT: "NL80211_MESHCONF_RETRY_TIMEOUT",
- NL80211_MESHCONF_CONFIRM_TIMEOUT: "NL80211_MESHCONF_CONFIRM_TIMEOUT",
- NL80211_MESHCONF_HOLDING_TIMEOUT: "NL80211_MESHCONF_HOLDING_TIMEOUT",
- NL80211_MESHCONF_MAX_PEER_LINKS: "NL80211_MESHCONF_MAX_PEER_LINKS",
- NL80211_MESHCONF_MAX_RETRIES: "NL80211_MESHCONF_MAX_RETRIES",
- NL80211_MESHCONF_TTL: "NL80211_MESHCONF_TTL",
- NL80211_MESHCONF_AUTO_OPEN_PLINKS: "NL80211_MESHCONF_AUTO_OPEN_PLINKS",
- NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES: "NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES",
- NL80211_MESHCONF_PATH_REFRESH_TIME: "NL80211_MESHCONF_PATH_REFRESH_TIME",
- NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT: "NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT",
- NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT: "NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT",
- NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL: "NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL",
- NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: "NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME",
- NL80211_MESHCONF_HWMP_ROOTMODE: "NL80211_MESHCONF_HWMP_ROOTMODE",
- NL80211_MESHCONF_ELEMENT_TTL: "NL80211_MESHCONF_ELEMENT_TTL",
- NL80211_MESHCONF_HWMP_RANN_INTERVAL: "NL80211_MESHCONF_HWMP_RANN_INTERVAL",
- NL80211_MESHCONF_GATE_ANNOUNCEMENTS: "NL80211_MESHCONF_GATE_ANNOUNCEMENTS",
- NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL: "NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL",
- NL80211_MESHCONF_FORWARDING: "NL80211_MESHCONF_FORWARDING",
- NL80211_MESHCONF_RSSI_THRESHOLD: "NL80211_MESHCONF_RSSI_THRESHOLD",
- NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR: "NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR",
- NL80211_MESHCONF_HT_OPMODE: "NL80211_MESHCONF_HT_OPMODE",
- NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT: "NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT",
- NL80211_MESHCONF_HWMP_ROOT_INTERVAL: "NL80211_MESHCONF_HWMP_ROOT_INTERVAL",
- NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL: "NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL",
- NL80211_MESHCONF_POWER_MODE: "NL80211_MESHCONF_POWER_MODE",
- NL80211_MESHCONF_AWAKE_WINDOW: "NL80211_MESHCONF_AWAKE_WINDOW",
- NL80211_MESHCONF_PLINK_TIMEOUT: "NL80211_MESHCONF_PLINK_TIMEOUT",
- __NL80211_MESHCONF_ATTR_AFTER_LAST: "__NL80211_MESHCONF_ATTR_AFTER_LAST",
+ __NL80211_MESHCONF_INVALID: "__NL80211_MESHCONF_INVALID",
+ NL80211_MESHCONF_RETRY_TIMEOUT: "NL80211_MESHCONF_RETRY_TIMEOUT",
+ NL80211_MESHCONF_CONFIRM_TIMEOUT: "NL80211_MESHCONF_CONFIRM_TIMEOUT",
+ NL80211_MESHCONF_HOLDING_TIMEOUT: "NL80211_MESHCONF_HOLDING_TIMEOUT",
+ NL80211_MESHCONF_MAX_PEER_LINKS: "NL80211_MESHCONF_MAX_PEER_LINKS",
+ NL80211_MESHCONF_MAX_RETRIES: "NL80211_MESHCONF_MAX_RETRIES",
+ NL80211_MESHCONF_TTL: "NL80211_MESHCONF_TTL",
+ NL80211_MESHCONF_AUTO_OPEN_PLINKS: "NL80211_MESHCONF_AUTO_OPEN_PLINKS",
+ NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES: "NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES",
+ NL80211_MESHCONF_PATH_REFRESH_TIME: "NL80211_MESHCONF_PATH_REFRESH_TIME",
+ NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT: "NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT",
+ NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT: "NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT",
+ NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL: "NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL",
+ NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: "NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME",
+ NL80211_MESHCONF_HWMP_ROOTMODE: "NL80211_MESHCONF_HWMP_ROOTMODE",
+ NL80211_MESHCONF_ELEMENT_TTL: "NL80211_MESHCONF_ELEMENT_TTL",
+ NL80211_MESHCONF_HWMP_RANN_INTERVAL: "NL80211_MESHCONF_HWMP_RANN_INTERVAL",
+ NL80211_MESHCONF_GATE_ANNOUNCEMENTS: "NL80211_MESHCONF_GATE_ANNOUNCEMENTS",
+ NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL: "NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL",
+ NL80211_MESHCONF_FORWARDING: "NL80211_MESHCONF_FORWARDING",
+ NL80211_MESHCONF_RSSI_THRESHOLD: "NL80211_MESHCONF_RSSI_THRESHOLD",
+ NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR: "NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR",
+ NL80211_MESHCONF_HT_OPMODE: "NL80211_MESHCONF_HT_OPMODE",
+ NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT: "NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT",
+ NL80211_MESHCONF_HWMP_ROOT_INTERVAL: "NL80211_MESHCONF_HWMP_ROOT_INTERVAL",
+ NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL: "NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL",
+ NL80211_MESHCONF_POWER_MODE: "NL80211_MESHCONF_POWER_MODE",
+ NL80211_MESHCONF_AWAKE_WINDOW: "NL80211_MESHCONF_AWAKE_WINDOW",
+ NL80211_MESHCONF_PLINK_TIMEOUT: "NL80211_MESHCONF_PLINK_TIMEOUT",
+ __NL80211_MESHCONF_ATTR_AFTER_LAST: "__NL80211_MESHCONF_ATTR_AFTER_LAST",
}
nl80211_mesh_setup_params2str = {
- __NL80211_MESH_SETUP_INVALID: "__NL80211_MESH_SETUP_INVALID",
- NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL: "NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL",
- NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC: "NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC",
- NL80211_MESH_SETUP_IE: "NL80211_MESH_SETUP_IE",
- NL80211_MESH_SETUP_USERSPACE_AUTH: "NL80211_MESH_SETUP_USERSPACE_AUTH",
- NL80211_MESH_SETUP_USERSPACE_AMPE: "NL80211_MESH_SETUP_USERSPACE_AMPE",
- NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC: "NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC",
- NL80211_MESH_SETUP_USERSPACE_MPM: "NL80211_MESH_SETUP_USERSPACE_MPM",
- NL80211_MESH_SETUP_AUTH_PROTOCOL: "NL80211_MESH_SETUP_AUTH_PROTOCOL",
- __NL80211_MESH_SETUP_ATTR_AFTER_LAST: "__NL80211_MESH_SETUP_ATTR_AFTER_LAST",
+ __NL80211_MESH_SETUP_INVALID: "__NL80211_MESH_SETUP_INVALID",
+ NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL: "NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL",
+ NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC: "NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC",
+ NL80211_MESH_SETUP_IE: "NL80211_MESH_SETUP_IE",
+ NL80211_MESH_SETUP_USERSPACE_AUTH: "NL80211_MESH_SETUP_USERSPACE_AUTH",
+ NL80211_MESH_SETUP_USERSPACE_AMPE: "NL80211_MESH_SETUP_USERSPACE_AMPE",
+ NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC: "NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC",
+ NL80211_MESH_SETUP_USERSPACE_MPM: "NL80211_MESH_SETUP_USERSPACE_MPM",
+ NL80211_MESH_SETUP_AUTH_PROTOCOL: "NL80211_MESH_SETUP_AUTH_PROTOCOL",
+ __NL80211_MESH_SETUP_ATTR_AFTER_LAST: "__NL80211_MESH_SETUP_ATTR_AFTER_LAST",
}
nl80211_txq_attr2str = {
- __NL80211_TXQ_ATTR_INVALID: "__NL80211_TXQ_ATTR_INVALID",
- NL80211_TXQ_ATTR_AC: "NL80211_TXQ_ATTR_AC",
- NL80211_TXQ_ATTR_TXOP: "NL80211_TXQ_ATTR_TXOP",
- NL80211_TXQ_ATTR_CWMIN: "NL80211_TXQ_ATTR_CWMIN",
- NL80211_TXQ_ATTR_CWMAX: "NL80211_TXQ_ATTR_CWMAX",
- NL80211_TXQ_ATTR_AIFS: "NL80211_TXQ_ATTR_AIFS",
- __NL80211_TXQ_ATTR_AFTER_LAST: "__NL80211_TXQ_ATTR_AFTER_LAST",
+ __NL80211_TXQ_ATTR_INVALID: "__NL80211_TXQ_ATTR_INVALID",
+ NL80211_TXQ_ATTR_AC: "NL80211_TXQ_ATTR_AC",
+ NL80211_TXQ_ATTR_TXOP: "NL80211_TXQ_ATTR_TXOP",
+ NL80211_TXQ_ATTR_CWMIN: "NL80211_TXQ_ATTR_CWMIN",
+ NL80211_TXQ_ATTR_CWMAX: "NL80211_TXQ_ATTR_CWMAX",
+ NL80211_TXQ_ATTR_AIFS: "NL80211_TXQ_ATTR_AIFS",
+ __NL80211_TXQ_ATTR_AFTER_LAST: "__NL80211_TXQ_ATTR_AFTER_LAST",
}
nl80211_ac2str = {
- NL80211_AC_VO: "NL80211_AC_VO",
- NL80211_AC_VI: "NL80211_AC_VI",
- NL80211_AC_BE: "NL80211_AC_BE",
- NL80211_AC_BK: "NL80211_AC_BK",
- NL80211_NUM_ACS: "NL80211_NUM_ACS",
+ NL80211_AC_VO: "NL80211_AC_VO",
+ NL80211_AC_VI: "NL80211_AC_VI",
+ NL80211_AC_BE: "NL80211_AC_BE",
+ NL80211_AC_BK: "NL80211_AC_BK",
+ NL80211_NUM_ACS: "NL80211_NUM_ACS",
}
nl80211_channel_type2str = {
- NL80211_CHAN_NO_HT: "NL80211_CHAN_NO_HT",
- NL80211_CHAN_HT20: "NL80211_CHAN_HT20",
- NL80211_CHAN_HT40MINUS: "NL80211_CHAN_HT40MINUS",
- NL80211_CHAN_HT40PLUS: "NL80211_CHAN_HT40PLUS",
+ NL80211_CHAN_NO_HT: "NL80211_CHAN_NO_HT",
+ NL80211_CHAN_HT20: "NL80211_CHAN_HT20",
+ NL80211_CHAN_HT40MINUS: "NL80211_CHAN_HT40MINUS",
+ NL80211_CHAN_HT40PLUS: "NL80211_CHAN_HT40PLUS",
}
nl80211_chan_width2str = {
- NL80211_CHAN_WIDTH_20_NOHT: "NL80211_CHAN_WIDTH_20_NOHT",
- NL80211_CHAN_WIDTH_20: "NL80211_CHAN_WIDTH_20",
- NL80211_CHAN_WIDTH_40: "NL80211_CHAN_WIDTH_40",
- NL80211_CHAN_WIDTH_80: "NL80211_CHAN_WIDTH_80",
- NL80211_CHAN_WIDTH_80P80: "NL80211_CHAN_WIDTH_80P80",
- NL80211_CHAN_WIDTH_160: "NL80211_CHAN_WIDTH_160",
+ NL80211_CHAN_WIDTH_20_NOHT: "NL80211_CHAN_WIDTH_20_NOHT",
+ NL80211_CHAN_WIDTH_20: "NL80211_CHAN_WIDTH_20",
+ NL80211_CHAN_WIDTH_40: "NL80211_CHAN_WIDTH_40",
+ NL80211_CHAN_WIDTH_80: "NL80211_CHAN_WIDTH_80",
+ NL80211_CHAN_WIDTH_80P80: "NL80211_CHAN_WIDTH_80P80",
+ NL80211_CHAN_WIDTH_160: "NL80211_CHAN_WIDTH_160",
}
nl80211_bss2str = {
- __NL80211_BSS_INVALID: "__NL80211_BSS_INVALID",
- NL80211_BSS_BSSID: "NL80211_BSS_BSSID",
- NL80211_BSS_FREQUENCY: "NL80211_BSS_FREQUENCY",
- NL80211_BSS_TSF: "NL80211_BSS_TSF",
- NL80211_BSS_BEACON_INTERVAL: "NL80211_BSS_BEACON_INTERVAL",
- NL80211_BSS_CAPABILITY: "NL80211_BSS_CAPABILITY",
- NL80211_BSS_INFORMATION_ELEMENTS: "NL80211_BSS_INFORMATION_ELEMENTS",
- NL80211_BSS_SIGNAL_MBM: "NL80211_BSS_SIGNAL_MBM",
- NL80211_BSS_SIGNAL_UNSPEC: "NL80211_BSS_SIGNAL_UNSPEC",
- NL80211_BSS_STATUS: "NL80211_BSS_STATUS",
- NL80211_BSS_SEEN_MS_AGO: "NL80211_BSS_SEEN_MS_AGO",
- NL80211_BSS_BEACON_IES: "NL80211_BSS_BEACON_IES",
- __NL80211_BSS_AFTER_LAST: "__NL80211_BSS_AFTER_LAST",
+ __NL80211_BSS_INVALID: "__NL80211_BSS_INVALID",
+ NL80211_BSS_BSSID: "NL80211_BSS_BSSID",
+ NL80211_BSS_FREQUENCY: "NL80211_BSS_FREQUENCY",
+ NL80211_BSS_TSF: "NL80211_BSS_TSF",
+ NL80211_BSS_BEACON_INTERVAL: "NL80211_BSS_BEACON_INTERVAL",
+ NL80211_BSS_CAPABILITY: "NL80211_BSS_CAPABILITY",
+ NL80211_BSS_INFORMATION_ELEMENTS: "NL80211_BSS_INFORMATION_ELEMENTS",
+ NL80211_BSS_SIGNAL_MBM: "NL80211_BSS_SIGNAL_MBM",
+ NL80211_BSS_SIGNAL_UNSPEC: "NL80211_BSS_SIGNAL_UNSPEC",
+ NL80211_BSS_STATUS: "NL80211_BSS_STATUS",
+ NL80211_BSS_SEEN_MS_AGO: "NL80211_BSS_SEEN_MS_AGO",
+ NL80211_BSS_BEACON_IES: "NL80211_BSS_BEACON_IES",
+ __NL80211_BSS_AFTER_LAST: "__NL80211_BSS_AFTER_LAST",
}
nl80211_bss_status2str = {
- NL80211_BSS_STATUS_AUTHENTICATED: "NL80211_BSS_STATUS_AUTHENTICATED",
- NL80211_BSS_STATUS_ASSOCIATED: "NL80211_BSS_STATUS_ASSOCIATED",
- NL80211_BSS_STATUS_IBSS_JOINED: "NL80211_BSS_STATUS_IBSS_JOINED",
+ NL80211_BSS_STATUS_AUTHENTICATED: "NL80211_BSS_STATUS_AUTHENTICATED",
+ NL80211_BSS_STATUS_ASSOCIATED: "NL80211_BSS_STATUS_ASSOCIATED",
+ NL80211_BSS_STATUS_IBSS_JOINED: "NL80211_BSS_STATUS_IBSS_JOINED",
}
nl80211_auth_type2str = {
- NL80211_AUTHTYPE_OPEN_SYSTEM: "NL80211_AUTHTYPE_OPEN_SYSTEM",
- NL80211_AUTHTYPE_SHARED_KEY: "NL80211_AUTHTYPE_SHARED_KEY",
- NL80211_AUTHTYPE_FT: "NL80211_AUTHTYPE_FT",
- NL80211_AUTHTYPE_NETWORK_EAP: "NL80211_AUTHTYPE_NETWORK_EAP",
- NL80211_AUTHTYPE_SAE: "NL80211_AUTHTYPE_SAE",
- __NL80211_AUTHTYPE_NUM: "__NL80211_AUTHTYPE_NUM",
- NL80211_AUTHTYPE_AUTOMATIC: "NL80211_AUTHTYPE_AUTOMATIC",
+ NL80211_AUTHTYPE_OPEN_SYSTEM: "NL80211_AUTHTYPE_OPEN_SYSTEM",
+ NL80211_AUTHTYPE_SHARED_KEY: "NL80211_AUTHTYPE_SHARED_KEY",
+ NL80211_AUTHTYPE_FT: "NL80211_AUTHTYPE_FT",
+ NL80211_AUTHTYPE_NETWORK_EAP: "NL80211_AUTHTYPE_NETWORK_EAP",
+ NL80211_AUTHTYPE_SAE: "NL80211_AUTHTYPE_SAE",
+ __NL80211_AUTHTYPE_NUM: "__NL80211_AUTHTYPE_NUM",
+ NL80211_AUTHTYPE_AUTOMATIC: "NL80211_AUTHTYPE_AUTOMATIC",
}
nl80211_key_type2str = {
- NL80211_KEYTYPE_GROUP: "NL80211_KEYTYPE_GROUP",
- NL80211_KEYTYPE_PAIRWISE: "NL80211_KEYTYPE_PAIRWISE",
- NL80211_KEYTYPE_PEERKEY: "NL80211_KEYTYPE_PEERKEY",
- NUM_NL80211_KEYTYPES: "NUM_NL80211_KEYTYPES",
+ NL80211_KEYTYPE_GROUP: "NL80211_KEYTYPE_GROUP",
+ NL80211_KEYTYPE_PAIRWISE: "NL80211_KEYTYPE_PAIRWISE",
+ NL80211_KEYTYPE_PEERKEY: "NL80211_KEYTYPE_PEERKEY",
+ NUM_NL80211_KEYTYPES: "NUM_NL80211_KEYTYPES",
}
nl80211_mfp2str = {
- NL80211_MFP_NO: "NL80211_MFP_NO",
- NL80211_MFP_REQUIRED: "NL80211_MFP_REQUIRED",
+ NL80211_MFP_NO: "NL80211_MFP_NO",
+ NL80211_MFP_REQUIRED: "NL80211_MFP_REQUIRED",
}
nl80211_wpa_versions2str = {
- NL80211_WPA_VERSION_1: "NL80211_WPA_VERSION_1",
- NL80211_WPA_VERSION_2: "NL80211_WPA_VERSION_2",
+ NL80211_WPA_VERSION_1: "NL80211_WPA_VERSION_1",
+ NL80211_WPA_VERSION_2: "NL80211_WPA_VERSION_2",
}
nl80211_key_default_types2str = {
- __NL80211_KEY_DEFAULT_TYPE_INVALID: "__NL80211_KEY_DEFAULT_TYPE_INVALID",
- NL80211_KEY_DEFAULT_TYPE_UNICAST: "NL80211_KEY_DEFAULT_TYPE_UNICAST",
- NL80211_KEY_DEFAULT_TYPE_MULTICAST: "NL80211_KEY_DEFAULT_TYPE_MULTICAST",
- NUM_NL80211_KEY_DEFAULT_TYPES: "NUM_NL80211_KEY_DEFAULT_TYPES",
+ __NL80211_KEY_DEFAULT_TYPE_INVALID: "__NL80211_KEY_DEFAULT_TYPE_INVALID",
+ NL80211_KEY_DEFAULT_TYPE_UNICAST: "NL80211_KEY_DEFAULT_TYPE_UNICAST",
+ NL80211_KEY_DEFAULT_TYPE_MULTICAST: "NL80211_KEY_DEFAULT_TYPE_MULTICAST",
+ NUM_NL80211_KEY_DEFAULT_TYPES: "NUM_NL80211_KEY_DEFAULT_TYPES",
}
nl80211_key_attributes2str = {
- __NL80211_KEY_INVALID: "__NL80211_KEY_INVALID",
- NL80211_KEY_DATA: "NL80211_KEY_DATA",
- NL80211_KEY_IDX: "NL80211_KEY_IDX",
- NL80211_KEY_CIPHER: "NL80211_KEY_CIPHER",
- NL80211_KEY_SEQ: "NL80211_KEY_SEQ",
- NL80211_KEY_DEFAULT: "NL80211_KEY_DEFAULT",
- NL80211_KEY_DEFAULT_MGMT: "NL80211_KEY_DEFAULT_MGMT",
- NL80211_KEY_TYPE: "NL80211_KEY_TYPE",
- NL80211_KEY_DEFAULT_TYPES: "NL80211_KEY_DEFAULT_TYPES",
- __NL80211_KEY_AFTER_LAST: "__NL80211_KEY_AFTER_LAST",
+ __NL80211_KEY_INVALID: "__NL80211_KEY_INVALID",
+ NL80211_KEY_DATA: "NL80211_KEY_DATA",
+ NL80211_KEY_IDX: "NL80211_KEY_IDX",
+ NL80211_KEY_CIPHER: "NL80211_KEY_CIPHER",
+ NL80211_KEY_SEQ: "NL80211_KEY_SEQ",
+ NL80211_KEY_DEFAULT: "NL80211_KEY_DEFAULT",
+ NL80211_KEY_DEFAULT_MGMT: "NL80211_KEY_DEFAULT_MGMT",
+ NL80211_KEY_TYPE: "NL80211_KEY_TYPE",
+ NL80211_KEY_DEFAULT_TYPES: "NL80211_KEY_DEFAULT_TYPES",
+ __NL80211_KEY_AFTER_LAST: "__NL80211_KEY_AFTER_LAST",
}
nl80211_tx_rate_attributes2str = {
- __NL80211_TXRATE_INVALID: "__NL80211_TXRATE_INVALID",
- NL80211_TXRATE_LEGACY: "NL80211_TXRATE_LEGACY",
- NL80211_TXRATE_MCS: "NL80211_TXRATE_MCS",
- __NL80211_TXRATE_AFTER_LAST: "__NL80211_TXRATE_AFTER_LAST",
+ __NL80211_TXRATE_INVALID: "__NL80211_TXRATE_INVALID",
+ NL80211_TXRATE_LEGACY: "NL80211_TXRATE_LEGACY",
+ NL80211_TXRATE_MCS: "NL80211_TXRATE_MCS",
+ __NL80211_TXRATE_AFTER_LAST: "__NL80211_TXRATE_AFTER_LAST",
}
nl80211_band2str = {
- NL80211_BAND_2GHZ: "NL80211_BAND_2GHZ",
- NL80211_BAND_5GHZ: "NL80211_BAND_5GHZ",
- NL80211_BAND_60GHZ: "NL80211_BAND_60GHZ",
+ NL80211_BAND_2GHZ: "NL80211_BAND_2GHZ",
+ NL80211_BAND_5GHZ: "NL80211_BAND_5GHZ",
+ NL80211_BAND_60GHZ: "NL80211_BAND_60GHZ",
}
nl80211_ps_state2str = {
- NL80211_PS_DISABLED: "NL80211_PS_DISABLED",
- NL80211_PS_ENABLED: "NL80211_PS_ENABLED",
+ NL80211_PS_DISABLED: "NL80211_PS_DISABLED",
+ NL80211_PS_ENABLED: "NL80211_PS_ENABLED",
}
nl80211_attr_cqm2str = {
- __NL80211_ATTR_CQM_INVALID: "__NL80211_ATTR_CQM_INVALID",
- NL80211_ATTR_CQM_RSSI_THOLD: "NL80211_ATTR_CQM_RSSI_THOLD",
- NL80211_ATTR_CQM_RSSI_HYST: "NL80211_ATTR_CQM_RSSI_HYST",
- NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: "NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT",
- NL80211_ATTR_CQM_PKT_LOSS_EVENT: "NL80211_ATTR_CQM_PKT_LOSS_EVENT",
- NL80211_ATTR_CQM_TXE_RATE: "NL80211_ATTR_CQM_TXE_RATE",
- NL80211_ATTR_CQM_TXE_PKTS: "NL80211_ATTR_CQM_TXE_PKTS",
- NL80211_ATTR_CQM_TXE_INTVL: "NL80211_ATTR_CQM_TXE_INTVL",
- __NL80211_ATTR_CQM_AFTER_LAST: "__NL80211_ATTR_CQM_AFTER_LAST",
+ __NL80211_ATTR_CQM_INVALID: "__NL80211_ATTR_CQM_INVALID",
+ NL80211_ATTR_CQM_RSSI_THOLD: "NL80211_ATTR_CQM_RSSI_THOLD",
+ NL80211_ATTR_CQM_RSSI_HYST: "NL80211_ATTR_CQM_RSSI_HYST",
+ NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: "NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT",
+ NL80211_ATTR_CQM_PKT_LOSS_EVENT: "NL80211_ATTR_CQM_PKT_LOSS_EVENT",
+ NL80211_ATTR_CQM_TXE_RATE: "NL80211_ATTR_CQM_TXE_RATE",
+ NL80211_ATTR_CQM_TXE_PKTS: "NL80211_ATTR_CQM_TXE_PKTS",
+ NL80211_ATTR_CQM_TXE_INTVL: "NL80211_ATTR_CQM_TXE_INTVL",
+ __NL80211_ATTR_CQM_AFTER_LAST: "__NL80211_ATTR_CQM_AFTER_LAST",
}
nl80211_cqm_rssi_threshold_event2str = {
- NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW: "NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW",
- NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH: "NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH",
- NL80211_CQM_RSSI_BEACON_LOSS_EVENT: "NL80211_CQM_RSSI_BEACON_LOSS_EVENT",
+ NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW: "NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW",
+ NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH: "NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH",
+ NL80211_CQM_RSSI_BEACON_LOSS_EVENT: "NL80211_CQM_RSSI_BEACON_LOSS_EVENT",
}
nl80211_tx_power_setting2str = {
- NL80211_TX_POWER_AUTOMATIC: "NL80211_TX_POWER_AUTOMATIC",
- NL80211_TX_POWER_LIMITED: "NL80211_TX_POWER_LIMITED",
- NL80211_TX_POWER_FIXED: "NL80211_TX_POWER_FIXED",
+ NL80211_TX_POWER_AUTOMATIC: "NL80211_TX_POWER_AUTOMATIC",
+ NL80211_TX_POWER_LIMITED: "NL80211_TX_POWER_LIMITED",
+ NL80211_TX_POWER_FIXED: "NL80211_TX_POWER_FIXED",
}
nl80211_wowlan_packet_pattern_attr2str = {
- __NL80211_WOWLAN_PKTPAT_INVALID: "__NL80211_WOWLAN_PKTPAT_INVALID",
- NL80211_WOWLAN_PKTPAT_MASK: "NL80211_WOWLAN_PKTPAT_MASK",
- NL80211_WOWLAN_PKTPAT_PATTERN: "NL80211_WOWLAN_PKTPAT_PATTERN",
- NL80211_WOWLAN_PKTPAT_OFFSET: "NL80211_WOWLAN_PKTPAT_OFFSET",
- NUM_NL80211_WOWLAN_PKTPAT: "NUM_NL80211_WOWLAN_PKTPAT",
+ __NL80211_WOWLAN_PKTPAT_INVALID: "__NL80211_WOWLAN_PKTPAT_INVALID",
+ NL80211_WOWLAN_PKTPAT_MASK: "NL80211_WOWLAN_PKTPAT_MASK",
+ NL80211_WOWLAN_PKTPAT_PATTERN: "NL80211_WOWLAN_PKTPAT_PATTERN",
+ NL80211_WOWLAN_PKTPAT_OFFSET: "NL80211_WOWLAN_PKTPAT_OFFSET",
+ NUM_NL80211_WOWLAN_PKTPAT: "NUM_NL80211_WOWLAN_PKTPAT",
}
nl80211_wowlan_triggers2str = {
- __NL80211_WOWLAN_TRIG_INVALID: "__NL80211_WOWLAN_TRIG_INVALID",
- NL80211_WOWLAN_TRIG_ANY: "NL80211_WOWLAN_TRIG_ANY",
- NL80211_WOWLAN_TRIG_DISCONNECT: "NL80211_WOWLAN_TRIG_DISCONNECT",
- NL80211_WOWLAN_TRIG_MAGIC_PKT: "NL80211_WOWLAN_TRIG_MAGIC_PKT",
- NL80211_WOWLAN_TRIG_PKT_PATTERN: "NL80211_WOWLAN_TRIG_PKT_PATTERN",
- NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED: "NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED",
- NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE: "NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE",
- NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST: "NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST",
- NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE: "NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE",
- NL80211_WOWLAN_TRIG_RFKILL_RELEASE: "NL80211_WOWLAN_TRIG_RFKILL_RELEASE",
- NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211: "NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211",
- NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN: "NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN",
- NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023: "NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023",
- NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN: "NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN",
- NL80211_WOWLAN_TRIG_TCP_CONNECTION: "NL80211_WOWLAN_TRIG_TCP_CONNECTION",
- NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH: "NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH",
- NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST: "NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST",
- NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS: "NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS",
- NUM_NL80211_WOWLAN_TRIG: "NUM_NL80211_WOWLAN_TRIG",
+ __NL80211_WOWLAN_TRIG_INVALID: "__NL80211_WOWLAN_TRIG_INVALID",
+ NL80211_WOWLAN_TRIG_ANY: "NL80211_WOWLAN_TRIG_ANY",
+ NL80211_WOWLAN_TRIG_DISCONNECT: "NL80211_WOWLAN_TRIG_DISCONNECT",
+ NL80211_WOWLAN_TRIG_MAGIC_PKT: "NL80211_WOWLAN_TRIG_MAGIC_PKT",
+ NL80211_WOWLAN_TRIG_PKT_PATTERN: "NL80211_WOWLAN_TRIG_PKT_PATTERN",
+ NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED: "NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED",
+ NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE: "NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE",
+ NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST: "NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST",
+ NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE: "NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE",
+ NL80211_WOWLAN_TRIG_RFKILL_RELEASE: "NL80211_WOWLAN_TRIG_RFKILL_RELEASE",
+ NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211: "NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211",
+ NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN: "NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN",
+ NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023: "NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023",
+ NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN: "NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN",
+ NL80211_WOWLAN_TRIG_TCP_CONNECTION: "NL80211_WOWLAN_TRIG_TCP_CONNECTION",
+ NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH: "NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH",
+ NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST: "NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST",
+ NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS: "NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS",
+ NUM_NL80211_WOWLAN_TRIG: "NUM_NL80211_WOWLAN_TRIG",
}
nl80211_wowlan_tcp_attrs2str = {
- __NL80211_WOWLAN_TCP_INVALID: "__NL80211_WOWLAN_TCP_INVALID",
- NL80211_WOWLAN_TCP_SRC_IPV4: "NL80211_WOWLAN_TCP_SRC_IPV4",
- NL80211_WOWLAN_TCP_DST_IPV4: "NL80211_WOWLAN_TCP_DST_IPV4",
- NL80211_WOWLAN_TCP_DST_MAC: "NL80211_WOWLAN_TCP_DST_MAC",
- NL80211_WOWLAN_TCP_SRC_PORT: "NL80211_WOWLAN_TCP_SRC_PORT",
- NL80211_WOWLAN_TCP_DST_PORT: "NL80211_WOWLAN_TCP_DST_PORT",
- NL80211_WOWLAN_TCP_DATA_PAYLOAD: "NL80211_WOWLAN_TCP_DATA_PAYLOAD",
- NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ: "NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ",
- NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN: "NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN",
- NL80211_WOWLAN_TCP_DATA_INTERVAL: "NL80211_WOWLAN_TCP_DATA_INTERVAL",
- NL80211_WOWLAN_TCP_WAKE_PAYLOAD: "NL80211_WOWLAN_TCP_WAKE_PAYLOAD",
- NL80211_WOWLAN_TCP_WAKE_MASK: "NL80211_WOWLAN_TCP_WAKE_MASK",
- NUM_NL80211_WOWLAN_TCP: "NUM_NL80211_WOWLAN_TCP",
+ __NL80211_WOWLAN_TCP_INVALID: "__NL80211_WOWLAN_TCP_INVALID",
+ NL80211_WOWLAN_TCP_SRC_IPV4: "NL80211_WOWLAN_TCP_SRC_IPV4",
+ NL80211_WOWLAN_TCP_DST_IPV4: "NL80211_WOWLAN_TCP_DST_IPV4",
+ NL80211_WOWLAN_TCP_DST_MAC: "NL80211_WOWLAN_TCP_DST_MAC",
+ NL80211_WOWLAN_TCP_SRC_PORT: "NL80211_WOWLAN_TCP_SRC_PORT",
+ NL80211_WOWLAN_TCP_DST_PORT: "NL80211_WOWLAN_TCP_DST_PORT",
+ NL80211_WOWLAN_TCP_DATA_PAYLOAD: "NL80211_WOWLAN_TCP_DATA_PAYLOAD",
+ NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ: "NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ",
+ NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN: "NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN",
+ NL80211_WOWLAN_TCP_DATA_INTERVAL: "NL80211_WOWLAN_TCP_DATA_INTERVAL",
+ NL80211_WOWLAN_TCP_WAKE_PAYLOAD: "NL80211_WOWLAN_TCP_WAKE_PAYLOAD",
+ NL80211_WOWLAN_TCP_WAKE_MASK: "NL80211_WOWLAN_TCP_WAKE_MASK",
+ NUM_NL80211_WOWLAN_TCP: "NUM_NL80211_WOWLAN_TCP",
}
nl80211_iface_limit_attrs2str = {
- NL80211_IFACE_LIMIT_UNSPEC: "NL80211_IFACE_LIMIT_UNSPEC",
- NL80211_IFACE_LIMIT_MAX: "NL80211_IFACE_LIMIT_MAX",
- NL80211_IFACE_LIMIT_TYPES: "NL80211_IFACE_LIMIT_TYPES",
- NUM_NL80211_IFACE_LIMIT: "NUM_NL80211_IFACE_LIMIT",
+ NL80211_IFACE_LIMIT_UNSPEC: "NL80211_IFACE_LIMIT_UNSPEC",
+ NL80211_IFACE_LIMIT_MAX: "NL80211_IFACE_LIMIT_MAX",
+ NL80211_IFACE_LIMIT_TYPES: "NL80211_IFACE_LIMIT_TYPES",
+ NUM_NL80211_IFACE_LIMIT: "NUM_NL80211_IFACE_LIMIT",
}
nl80211_if_combination_attrs2str = {
- NL80211_IFACE_COMB_UNSPEC: "NL80211_IFACE_COMB_UNSPEC",
- NL80211_IFACE_COMB_LIMITS: "NL80211_IFACE_COMB_LIMITS",
- NL80211_IFACE_COMB_MAXNUM: "NL80211_IFACE_COMB_MAXNUM",
- NL80211_IFACE_COMB_STA_AP_BI_MATCH: "NL80211_IFACE_COMB_STA_AP_BI_MATCH",
- NL80211_IFACE_COMB_NUM_CHANNELS: "NL80211_IFACE_COMB_NUM_CHANNELS",
- NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS: "NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS",
- NUM_NL80211_IFACE_COMB: "NUM_NL80211_IFACE_COMB",
+ NL80211_IFACE_COMB_UNSPEC: "NL80211_IFACE_COMB_UNSPEC",
+ NL80211_IFACE_COMB_LIMITS: "NL80211_IFACE_COMB_LIMITS",
+ NL80211_IFACE_COMB_MAXNUM: "NL80211_IFACE_COMB_MAXNUM",
+ NL80211_IFACE_COMB_STA_AP_BI_MATCH: "NL80211_IFACE_COMB_STA_AP_BI_MATCH",
+ NL80211_IFACE_COMB_NUM_CHANNELS: "NL80211_IFACE_COMB_NUM_CHANNELS",
+ NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS: "NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS",
+ NUM_NL80211_IFACE_COMB: "NUM_NL80211_IFACE_COMB",
}
nl80211_plink_state2str = {
- NL80211_PLINK_LISTEN: "NL80211_PLINK_LISTEN",
- NL80211_PLINK_OPN_SNT: "NL80211_PLINK_OPN_SNT",
- NL80211_PLINK_OPN_RCVD: "NL80211_PLINK_OPN_RCVD",
- NL80211_PLINK_CNF_RCVD: "NL80211_PLINK_CNF_RCVD",
- NL80211_PLINK_ESTAB: "NL80211_PLINK_ESTAB",
- NL80211_PLINK_HOLDING: "NL80211_PLINK_HOLDING",
- NL80211_PLINK_BLOCKED: "NL80211_PLINK_BLOCKED",
- NUM_NL80211_PLINK_STATES: "NUM_NL80211_PLINK_STATES",
+ NL80211_PLINK_LISTEN: "NL80211_PLINK_LISTEN",
+ NL80211_PLINK_OPN_SNT: "NL80211_PLINK_OPN_SNT",
+ NL80211_PLINK_OPN_RCVD: "NL80211_PLINK_OPN_RCVD",
+ NL80211_PLINK_CNF_RCVD: "NL80211_PLINK_CNF_RCVD",
+ NL80211_PLINK_ESTAB: "NL80211_PLINK_ESTAB",
+ NL80211_PLINK_HOLDING: "NL80211_PLINK_HOLDING",
+ NL80211_PLINK_BLOCKED: "NL80211_PLINK_BLOCKED",
+ NUM_NL80211_PLINK_STATES: "NUM_NL80211_PLINK_STATES",
}
plink_actions2str = {
- NL80211_PLINK_ACTION_NO_ACTION: "NL80211_PLINK_ACTION_NO_ACTION",
- NL80211_PLINK_ACTION_OPEN: "NL80211_PLINK_ACTION_OPEN",
- NL80211_PLINK_ACTION_BLOCK: "NL80211_PLINK_ACTION_BLOCK",
- NUM_NL80211_PLINK_ACTIONS: "NUM_NL80211_PLINK_ACTIONS",
+ NL80211_PLINK_ACTION_NO_ACTION: "NL80211_PLINK_ACTION_NO_ACTION",
+ NL80211_PLINK_ACTION_OPEN: "NL80211_PLINK_ACTION_OPEN",
+ NL80211_PLINK_ACTION_BLOCK: "NL80211_PLINK_ACTION_BLOCK",
+ NUM_NL80211_PLINK_ACTIONS: "NUM_NL80211_PLINK_ACTIONS",
}
nl80211_rekey_data2str = {
- __NL80211_REKEY_DATA_INVALID: "__NL80211_REKEY_DATA_INVALID",
- NL80211_REKEY_DATA_KEK: "NL80211_REKEY_DATA_KEK",
- NL80211_REKEY_DATA_KCK: "NL80211_REKEY_DATA_KCK",
- NL80211_REKEY_DATA_REPLAY_CTR: "NL80211_REKEY_DATA_REPLAY_CTR",
- NUM_NL80211_REKEY_DATA: "NUM_NL80211_REKEY_DATA",
+ __NL80211_REKEY_DATA_INVALID: "__NL80211_REKEY_DATA_INVALID",
+ NL80211_REKEY_DATA_KEK: "NL80211_REKEY_DATA_KEK",
+ NL80211_REKEY_DATA_KCK: "NL80211_REKEY_DATA_KCK",
+ NL80211_REKEY_DATA_REPLAY_CTR: "NL80211_REKEY_DATA_REPLAY_CTR",
+ NUM_NL80211_REKEY_DATA: "NUM_NL80211_REKEY_DATA",
}
nl80211_hidden_ssid2str = {
- NL80211_HIDDEN_SSID_NOT_IN_USE: "NL80211_HIDDEN_SSID_NOT_IN_USE",
- NL80211_HIDDEN_SSID_ZERO_LEN: "NL80211_HIDDEN_SSID_ZERO_LEN",
- NL80211_HIDDEN_SSID_ZERO_CONTENTS: "NL80211_HIDDEN_SSID_ZERO_CONTENTS",
+ NL80211_HIDDEN_SSID_NOT_IN_USE: "NL80211_HIDDEN_SSID_NOT_IN_USE",
+ NL80211_HIDDEN_SSID_ZERO_LEN: "NL80211_HIDDEN_SSID_ZERO_LEN",
+ NL80211_HIDDEN_SSID_ZERO_CONTENTS: "NL80211_HIDDEN_SSID_ZERO_CONTENTS",
}
nl80211_sta_wme_attr2str = {
- __NL80211_STA_WME_INVALID: "__NL80211_STA_WME_INVALID",
- NL80211_STA_WME_UAPSD_QUEUES: "NL80211_STA_WME_UAPSD_QUEUES",
- NL80211_STA_WME_MAX_SP: "NL80211_STA_WME_MAX_SP",
- __NL80211_STA_WME_AFTER_LAST: "__NL80211_STA_WME_AFTER_LAST",
+ __NL80211_STA_WME_INVALID: "__NL80211_STA_WME_INVALID",
+ NL80211_STA_WME_UAPSD_QUEUES: "NL80211_STA_WME_UAPSD_QUEUES",
+ NL80211_STA_WME_MAX_SP: "NL80211_STA_WME_MAX_SP",
+ __NL80211_STA_WME_AFTER_LAST: "__NL80211_STA_WME_AFTER_LAST",
}
nl80211_pmksa_candidate_attr2str = {
- __NL80211_PMKSA_CANDIDATE_INVALID: "__NL80211_PMKSA_CANDIDATE_INVALID",
- NL80211_PMKSA_CANDIDATE_INDEX: "NL80211_PMKSA_CANDIDATE_INDEX",
- NL80211_PMKSA_CANDIDATE_BSSID: "NL80211_PMKSA_CANDIDATE_BSSID",
- NL80211_PMKSA_CANDIDATE_PREAUTH: "NL80211_PMKSA_CANDIDATE_PREAUTH",
- NUM_NL80211_PMKSA_CANDIDATE: "NUM_NL80211_PMKSA_CANDIDATE",
+ __NL80211_PMKSA_CANDIDATE_INVALID: "__NL80211_PMKSA_CANDIDATE_INVALID",
+ NL80211_PMKSA_CANDIDATE_INDEX: "NL80211_PMKSA_CANDIDATE_INDEX",
+ NL80211_PMKSA_CANDIDATE_BSSID: "NL80211_PMKSA_CANDIDATE_BSSID",
+ NL80211_PMKSA_CANDIDATE_PREAUTH: "NL80211_PMKSA_CANDIDATE_PREAUTH",
+ NUM_NL80211_PMKSA_CANDIDATE: "NUM_NL80211_PMKSA_CANDIDATE",
}
nl80211_tdls_operation2str = {
- NL80211_TDLS_DISCOVERY_REQ: "NL80211_TDLS_DISCOVERY_REQ",
- NL80211_TDLS_SETUP: "NL80211_TDLS_SETUP",
- NL80211_TDLS_TEARDOWN: "NL80211_TDLS_TEARDOWN",
- NL80211_TDLS_ENABLE_LINK: "NL80211_TDLS_ENABLE_LINK",
- NL80211_TDLS_DISABLE_LINK: "NL80211_TDLS_DISABLE_LINK",
+ NL80211_TDLS_DISCOVERY_REQ: "NL80211_TDLS_DISCOVERY_REQ",
+ NL80211_TDLS_SETUP: "NL80211_TDLS_SETUP",
+ NL80211_TDLS_TEARDOWN: "NL80211_TDLS_TEARDOWN",
+ NL80211_TDLS_ENABLE_LINK: "NL80211_TDLS_ENABLE_LINK",
+ NL80211_TDLS_DISABLE_LINK: "NL80211_TDLS_DISABLE_LINK",
}
nl80211_feature_flags2str = {
- NL80211_FEATURE_SK_TX_STATUS: "NL80211_FEATURE_SK_TX_STATUS",
- NL80211_FEATURE_HT_IBSS: "NL80211_FEATURE_HT_IBSS",
- NL80211_FEATURE_INACTIVITY_TIMER: "NL80211_FEATURE_INACTIVITY_TIMER",
- NL80211_FEATURE_CELL_BASE_REG_HINTS: "NL80211_FEATURE_CELL_BASE_REG_HINTS",
- NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: "NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL",
- NL80211_FEATURE_SAE: "NL80211_FEATURE_SAE",
- NL80211_FEATURE_LOW_PRIORITY_SCAN: "NL80211_FEATURE_LOW_PRIORITY_SCAN",
- NL80211_FEATURE_SCAN_FLUSH: "NL80211_FEATURE_SCAN_FLUSH",
- NL80211_FEATURE_AP_SCAN: "NL80211_FEATURE_AP_SCAN",
- NL80211_FEATURE_VIF_TXPOWER: "NL80211_FEATURE_VIF_TXPOWER",
- NL80211_FEATURE_NEED_OBSS_SCAN: "NL80211_FEATURE_NEED_OBSS_SCAN",
- NL80211_FEATURE_P2P_GO_CTWIN: "NL80211_FEATURE_P2P_GO_CTWIN",
- NL80211_FEATURE_P2P_GO_OPPPS: "NL80211_FEATURE_P2P_GO_OPPPS",
- NL80211_FEATURE_ADVERTISE_CHAN_LIMITS: "NL80211_FEATURE_ADVERTISE_CHAN_LIMITS",
- NL80211_FEATURE_FULL_AP_CLIENT_STATE: "NL80211_FEATURE_FULL_AP_CLIENT_STATE",
- NL80211_FEATURE_USERSPACE_MPM: "NL80211_FEATURE_USERSPACE_MPM",
- NL80211_FEATURE_ACTIVE_MONITOR: "NL80211_FEATURE_ACTIVE_MONITOR",
+ NL80211_FEATURE_SK_TX_STATUS: "NL80211_FEATURE_SK_TX_STATUS",
+ NL80211_FEATURE_HT_IBSS: "NL80211_FEATURE_HT_IBSS",
+ NL80211_FEATURE_INACTIVITY_TIMER: "NL80211_FEATURE_INACTIVITY_TIMER",
+ NL80211_FEATURE_CELL_BASE_REG_HINTS: "NL80211_FEATURE_CELL_BASE_REG_HINTS",
+ NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: "NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL",
+ NL80211_FEATURE_SAE: "NL80211_FEATURE_SAE",
+ NL80211_FEATURE_LOW_PRIORITY_SCAN: "NL80211_FEATURE_LOW_PRIORITY_SCAN",
+ NL80211_FEATURE_SCAN_FLUSH: "NL80211_FEATURE_SCAN_FLUSH",
+ NL80211_FEATURE_AP_SCAN: "NL80211_FEATURE_AP_SCAN",
+ NL80211_FEATURE_VIF_TXPOWER: "NL80211_FEATURE_VIF_TXPOWER",
+ NL80211_FEATURE_NEED_OBSS_SCAN: "NL80211_FEATURE_NEED_OBSS_SCAN",
+ NL80211_FEATURE_P2P_GO_CTWIN: "NL80211_FEATURE_P2P_GO_CTWIN",
+ NL80211_FEATURE_P2P_GO_OPPPS: "NL80211_FEATURE_P2P_GO_OPPPS",
+ NL80211_FEATURE_ADVERTISE_CHAN_LIMITS: "NL80211_FEATURE_ADVERTISE_CHAN_LIMITS",
+ NL80211_FEATURE_FULL_AP_CLIENT_STATE: "NL80211_FEATURE_FULL_AP_CLIENT_STATE",
+ NL80211_FEATURE_USERSPACE_MPM: "NL80211_FEATURE_USERSPACE_MPM",
+ NL80211_FEATURE_ACTIVE_MONITOR: "NL80211_FEATURE_ACTIVE_MONITOR",
}
nl80211_probe_resp_offload_support_attr2str = {
- NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS: "NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS",
- NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2: "NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2",
- NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P: "NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P",
- NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U: "NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U",
+ NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS: "NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS",
+ NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2: "NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2",
+ NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P: "NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P",
+ NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U: "NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U",
}
nl80211_connect_failed_reason2str = {
- NL80211_CONN_FAIL_MAX_CLIENTS: "NL80211_CONN_FAIL_MAX_CLIENTS",
- NL80211_CONN_FAIL_BLOCKED_CLIENT: "NL80211_CONN_FAIL_BLOCKED_CLIENT",
+ NL80211_CONN_FAIL_MAX_CLIENTS: "NL80211_CONN_FAIL_MAX_CLIENTS",
+ NL80211_CONN_FAIL_BLOCKED_CLIENT: "NL80211_CONN_FAIL_BLOCKED_CLIENT",
}
nl80211_scan_flags2str = {
- NL80211_SCAN_FLAG_LOW_PRIORITY: "NL80211_SCAN_FLAG_LOW_PRIORITY",
- NL80211_SCAN_FLAG_FLUSH: "NL80211_SCAN_FLAG_FLUSH",
- NL80211_SCAN_FLAG_AP: "NL80211_SCAN_FLAG_AP",
+ NL80211_SCAN_FLAG_LOW_PRIORITY: "NL80211_SCAN_FLAG_LOW_PRIORITY",
+ NL80211_SCAN_FLAG_FLUSH: "NL80211_SCAN_FLAG_FLUSH",
+ NL80211_SCAN_FLAG_AP: "NL80211_SCAN_FLAG_AP",
}
nl80211_acl_policy2str = {
- NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED: "NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED",
- NL80211_ACL_POLICY_DENY_UNLESS_LISTED: "NL80211_ACL_POLICY_DENY_UNLESS_LISTED",
+ NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED: "NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED",
+ NL80211_ACL_POLICY_DENY_UNLESS_LISTED: "NL80211_ACL_POLICY_DENY_UNLESS_LISTED",
}
nl80211_radar_event2str = {
- NL80211_RADAR_DETECTED: "NL80211_RADAR_DETECTED",
- NL80211_RADAR_CAC_FINISHED: "NL80211_RADAR_CAC_FINISHED",
- NL80211_RADAR_CAC_ABORTED: "NL80211_RADAR_CAC_ABORTED",
- NL80211_RADAR_NOP_FINISHED: "NL80211_RADAR_NOP_FINISHED",
+ NL80211_RADAR_DETECTED: "NL80211_RADAR_DETECTED",
+ NL80211_RADAR_CAC_FINISHED: "NL80211_RADAR_CAC_FINISHED",
+ NL80211_RADAR_CAC_ABORTED: "NL80211_RADAR_CAC_ABORTED",
+ NL80211_RADAR_NOP_FINISHED: "NL80211_RADAR_NOP_FINISHED",
}
nl80211_dfs_state2str = {
- NL80211_DFS_USABLE: "NL80211_DFS_USABLE",
- NL80211_DFS_UNAVAILABLE: "NL80211_DFS_UNAVAILABLE",
- NL80211_DFS_AVAILABLE: "NL80211_DFS_AVAILABLE",
+ NL80211_DFS_USABLE: "NL80211_DFS_USABLE",
+ NL80211_DFS_UNAVAILABLE: "NL80211_DFS_UNAVAILABLE",
+ NL80211_DFS_AVAILABLE: "NL80211_DFS_AVAILABLE",
}
nl80211_protocol_features2str = {
- NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP: "NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP",
+ NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP: "NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP",
}
nl80211_crit_proto_id2str = {
- NL80211_CRIT_PROTO_UNSPEC: "NL80211_CRIT_PROTO_UNSPEC",
- NL80211_CRIT_PROTO_DHCP: "NL80211_CRIT_PROTO_DHCP",
- NL80211_CRIT_PROTO_EAPOL: "NL80211_CRIT_PROTO_EAPOL",
- NL80211_CRIT_PROTO_APIPA: "NL80211_CRIT_PROTO_APIPA",
- NUM_NL80211_CRIT_PROTO: "NUM_NL80211_CRIT_PROTO",
+ NL80211_CRIT_PROTO_UNSPEC: "NL80211_CRIT_PROTO_UNSPEC",
+ NL80211_CRIT_PROTO_DHCP: "NL80211_CRIT_PROTO_DHCP",
+ NL80211_CRIT_PROTO_EAPOL: "NL80211_CRIT_PROTO_EAPOL",
+ NL80211_CRIT_PROTO_APIPA: "NL80211_CRIT_PROTO_APIPA",
+ NUM_NL80211_CRIT_PROTO: "NUM_NL80211_CRIT_PROTO",
}
diff --git a/python/examples/wiphy.py b/python/examples/wiphy.py
index 6601883..777ac69 100644
--- a/python/examples/wiphy.py
+++ b/python/examples/wiphy.py
@@ -5,138 +5,157 @@ import nl80211
import sys
import traceback
+
class test_class:
- def __init__(self):
- self.done = 1
+ def __init__(self):
+ self.done = 1
+
def freq_to_ch(freq):
- if freq == 2484:
- return 14
+ if freq == 2484:
+ return 14
+
+ if freq < 2484:
+ return (freq - 2407) / 5
- if freq < 2484:
- return (freq - 2407) / 5
+ # FIXME: dot11ChannelStartingFactor (802.11-2007 17.3.8.3.2)
+ if freq < 45000:
+ return freq / 5 - 1000
- # FIXME: dot11ChannelStartingFactor (802.11-2007 17.3.8.3.2)
- if freq < 45000:
- return freq/5 - 1000
+ if freq >= 58320 and freq <= 64800:
+ return (freq - 56160) / 2160
- if freq >= 58320 and freq <= 64800:
- return (freq - 56160) / 2160
+ return 0
- return 0
def handle_freq(attr, pol):
- e, fattr = nl.py_nla_parse_nested(nl80211.NL80211_FREQUENCY_ATTR_MAX, attr, pol)
- if nl80211.NL80211_FREQUENCY_ATTR_FREQ in fattr:
- freq = nl.nla_get_u32(fattr[nl80211.NL80211_FREQUENCY_ATTR_FREQ])
- sys.stdout.write("\t\tfreq %d MHz [%d]" % (freq, freq_to_ch(freq)))
- if nl80211.NL80211_FREQUENCY_ATTR_MAX_TX_POWER in fattr and not (nl80211.NL80211_FREQUENCY_ATTR_DISABLED in fattr):
- sys.stdout.write(" (%.1f dBm)" % (0.01 * nl.nla_get_u32(fattr[nl80211.NL80211_FREQUENCY_ATTR_MAX_TX_POWER])))
- if nl80211.NL80211_FREQUENCY_ATTR_DISABLED in fattr:
- sys.stdout.write(" (disabled)")
- sys.stdout.write("\n")
+ e, fattr = nl.py_nla_parse_nested(nl80211.NL80211_FREQUENCY_ATTR_MAX, attr, pol)
+ if nl80211.NL80211_FREQUENCY_ATTR_FREQ in fattr:
+ freq = nl.nla_get_u32(fattr[nl80211.NL80211_FREQUENCY_ATTR_FREQ])
+ sys.stdout.write("\t\tfreq %d MHz [%d]" % (freq, freq_to_ch(freq)))
+ if nl80211.NL80211_FREQUENCY_ATTR_MAX_TX_POWER in fattr and not (
+ nl80211.NL80211_FREQUENCY_ATTR_DISABLED in fattr
+ ):
+ sys.stdout.write(
+ " (%.1f dBm)"
+ % (
+ 0.01
+ * nl.nla_get_u32(fattr[nl80211.NL80211_FREQUENCY_ATTR_MAX_TX_POWER])
+ )
+ )
+ if nl80211.NL80211_FREQUENCY_ATTR_DISABLED in fattr:
+ sys.stdout.write(" (disabled)")
+ sys.stdout.write("\n")
+
def handle_band(attr, fpol):
- e, battr = nl.py_nla_parse_nested(nl80211.NL80211_BAND_ATTR_MAX, attr, None)
- print("\tband %d:" % nl.nla_type(attr))
- if nl80211.NL80211_BAND_ATTR_FREQS in battr:
- for fattr in nl.nla_get_nested(battr[nl80211.NL80211_BAND_ATTR_FREQS]):
- handle_freq(fattr, fpol)
+ e, battr = nl.py_nla_parse_nested(nl80211.NL80211_BAND_ATTR_MAX, attr, None)
+ print("\tband %d:" % nl.nla_type(attr))
+ if nl80211.NL80211_BAND_ATTR_FREQS in battr:
+ for fattr in nl.nla_get_nested(battr[nl80211.NL80211_BAND_ATTR_FREQS]):
+ handle_freq(fattr, fpol)
+
def cipher_name(suite):
- suite_val = '%02x%02x%02x%02x' % tuple(reversed(suite))
- if suite_val == '000fac01':
- return "WEP40 (00-0f-ac:1)"
- elif suite_val == '000fac05':
- return "WEP104 (00-0f-ac:5)"
- elif suite_val == '000fac02':
- return "TKIP (00-0f-ac:2)"
- elif suite_val == '000fac04':
- return "CCMP (00-0f-ac:4)"
- elif suite_val == '000fac06':
- return "CMAC (00-0f-ac:6)"
- elif suite_val == '000fac08':
- return "GCMP (00-0f-ac:8)"
- elif suite_val == '00147201':
- return "WPI-SMS4 (00-14-72:1)"
- else:
- return suite_val
+ suite_val = "%02x%02x%02x%02x" % tuple(reversed(suite))
+ if suite_val == "000fac01":
+ return "WEP40 (00-0f-ac:1)"
+ elif suite_val == "000fac05":
+ return "WEP104 (00-0f-ac:5)"
+ elif suite_val == "000fac02":
+ return "TKIP (00-0f-ac:2)"
+ elif suite_val == "000fac04":
+ return "CCMP (00-0f-ac:4)"
+ elif suite_val == "000fac06":
+ return "CMAC (00-0f-ac:6)"
+ elif suite_val == "000fac08":
+ return "GCMP (00-0f-ac:8)"
+ elif suite_val == "00147201":
+ return "WPI-SMS4 (00-14-72:1)"
+ else:
+ return suite_val
+
def msg_handler(m, a):
- try:
- e, attr = genl.py_genlmsg_parse(nl.nlmsg_hdr(m), 0,
- nl80211.NL80211_ATTR_MAX, None)
- if nl80211.NL80211_ATTR_WIPHY_NAME in attr:
- print('wiphy %s' % nl.nla_get_string(attr[nl80211.NL80211_ATTR_WIPHY_NAME]))
- if nl80211.NL80211_ATTR_WIPHY_BANDS in attr:
- fpol = nl.nla_policy_array(nl80211.NL80211_FREQUENCY_ATTR_MAX + 1)
- fpol[nl80211.NL80211_FREQUENCY_ATTR_FREQ].type = nl.NLA_U32
- fpol[nl80211.NL80211_FREQUENCY_ATTR_DISABLED].type = nl.NLA_FLAG
- fpol[nl80211.NL80211_FREQUENCY_ATTR_PASSIVE_SCAN].type = nl.NLA_FLAG
- fpol[nl80211.NL80211_FREQUENCY_ATTR_NO_IBSS].type = nl.NLA_FLAG
- fpol[nl80211.NL80211_FREQUENCY_ATTR_RADAR].type = nl.NLA_FLAG
- fpol[nl80211.NL80211_FREQUENCY_ATTR_MAX_TX_POWER].type = nl.NLA_U32
-
- nattrs = nl.nla_get_nested(attr[nl80211.NL80211_ATTR_WIPHY_BANDS])
- for nattr in nattrs:
- handle_band(nattr, fpol)
- if nl80211.NL80211_ATTR_CIPHER_SUITES in attr:
- ciphers = nl.nla_data(attr[nl80211.NL80211_ATTR_CIPHER_SUITES])
- num = len(ciphers) / 4
- if num > 0:
- print("\tSupported Ciphers:")
- for i in range(0, num, 4):
- print("\t\t* %s" % cipher_name(ciphers[i:i+4]))
- if nl80211.NL80211_ATTR_SUPPORTED_IFTYPES in attr:
- print("\tSupported interface modes:")
- ifattr = nl.nla_get_nested(attr[nl80211.NL80211_ATTR_SUPPORTED_IFTYPES])
- for nl_mode in ifattr:
- print("\t\t* %s" % nl80211.nl80211_iftype2str[nl.nla_type(nl_mode)])
- if nl80211.NL80211_ATTR_SOFTWARE_IFTYPES in attr:
- print("\tsoftware interface modes (can always be added):")
- ifattr = nl.nla_get_nested(attr[nl80211.NL80211_ATTR_SOFTWARE_IFTYPES])
- for nl_mode in ifattr:
- print("\t\t* %s" % nl80211.nl80211_iftype2str[nl.nla_type(nl_mode)])
- return nl.NL_SKIP
- except Exception as e:
- (t,v,tb) = sys.exc_info()
- print(v.message)
- traceback.print_tb(tb)
+ try:
+ e, attr = genl.py_genlmsg_parse(
+ nl.nlmsg_hdr(m), 0, nl80211.NL80211_ATTR_MAX, None
+ )
+ if nl80211.NL80211_ATTR_WIPHY_NAME in attr:
+ print("wiphy %s" % nl.nla_get_string(attr[nl80211.NL80211_ATTR_WIPHY_NAME]))
+ if nl80211.NL80211_ATTR_WIPHY_BANDS in attr:
+ fpol = nl.nla_policy_array(nl80211.NL80211_FREQUENCY_ATTR_MAX + 1)
+ fpol[nl80211.NL80211_FREQUENCY_ATTR_FREQ].type = nl.NLA_U32
+ fpol[nl80211.NL80211_FREQUENCY_ATTR_DISABLED].type = nl.NLA_FLAG
+ fpol[nl80211.NL80211_FREQUENCY_ATTR_PASSIVE_SCAN].type = nl.NLA_FLAG
+ fpol[nl80211.NL80211_FREQUENCY_ATTR_NO_IBSS].type = nl.NLA_FLAG
+ fpol[nl80211.NL80211_FREQUENCY_ATTR_RADAR].type = nl.NLA_FLAG
+ fpol[nl80211.NL80211_FREQUENCY_ATTR_MAX_TX_POWER].type = nl.NLA_U32
+
+ nattrs = nl.nla_get_nested(attr[nl80211.NL80211_ATTR_WIPHY_BANDS])
+ for nattr in nattrs:
+ handle_band(nattr, fpol)
+ if nl80211.NL80211_ATTR_CIPHER_SUITES in attr:
+ ciphers = nl.nla_data(attr[nl80211.NL80211_ATTR_CIPHER_SUITES])
+ num = len(ciphers) / 4
+ if num > 0:
+ print("\tSupported Ciphers:")
+ for i in range(0, num, 4):
+ print("\t\t* %s" % cipher_name(ciphers[i : i + 4]))
+ if nl80211.NL80211_ATTR_SUPPORTED_IFTYPES in attr:
+ print("\tSupported interface modes:")
+ ifattr = nl.nla_get_nested(attr[nl80211.NL80211_ATTR_SUPPORTED_IFTYPES])
+ for nl_mode in ifattr:
+ print("\t\t* %s" % nl80211.nl80211_iftype2str[nl.nla_type(nl_mode)])
+ if nl80211.NL80211_ATTR_SOFTWARE_IFTYPES in attr:
+ print("\tsoftware interface modes (can always be added):")
+ ifattr = nl.nla_get_nested(attr[nl80211.NL80211_ATTR_SOFTWARE_IFTYPES])
+ for nl_mode in ifattr:
+ print("\t\t* %s" % nl80211.nl80211_iftype2str[nl.nla_type(nl_mode)])
+ return nl.NL_SKIP
+ except Exception as e:
+ (t, v, tb) = sys.exc_info()
+ print(v.message)
+ traceback.print_tb(tb)
+
def error_handler(err, a):
- a.done = err.error
- return nl.NL_STOP
+ a.done = err.error
+ return nl.NL_STOP
+
def finish_handler(m, a):
- return nl.NL_SKIP
+ return nl.NL_SKIP
+
def ack_handler(m, a):
- a.done = 0
- return nl.NL_STOP
+ a.done = 0
+ return nl.NL_STOP
+
try:
- cbd = test_class()
- tx_cb = nl.nl_cb_alloc(nl.NL_CB_DEFAULT)
- rx_cb = nl.nl_cb_clone(tx_cb)
- s = nl.nl_socket_alloc_cb(tx_cb)
- nl.py_nl_cb_err(rx_cb, nl.NL_CB_CUSTOM, error_handler, cbd)
- nl.py_nl_cb_set(rx_cb, nl.NL_CB_FINISH, nl.NL_CB_CUSTOM, finish_handler, cbd)
- nl.py_nl_cb_set(rx_cb, nl.NL_CB_ACK, nl.NL_CB_CUSTOM, ack_handler, cbd)
- nl.py_nl_cb_set(rx_cb, nl.NL_CB_VALID, nl.NL_CB_CUSTOM, msg_handler, cbd)
-
- genl.genl_connect(s)
- family = genl.genl_ctrl_resolve(s, 'nl80211')
- m = nl.nlmsg_alloc()
- genl.genlmsg_put(m, 0, 0, family, 0, 0, nl80211.NL80211_CMD_GET_WIPHY, 0)
- nl.nla_put_u32(m, nl80211.NL80211_ATTR_WIPHY, 7)
-
- err = nl.nl_send_auto_complete(s, m)
- if err < 0:
- nl.nlmsg_free(m)
-
- while cbd.done > 0 and not err < 0:
- err = nl.nl_recvmsgs(s, rx_cb)
+ cbd = test_class()
+ tx_cb = nl.nl_cb_alloc(nl.NL_CB_DEFAULT)
+ rx_cb = nl.nl_cb_clone(tx_cb)
+ s = nl.nl_socket_alloc_cb(tx_cb)
+ nl.py_nl_cb_err(rx_cb, nl.NL_CB_CUSTOM, error_handler, cbd)
+ nl.py_nl_cb_set(rx_cb, nl.NL_CB_FINISH, nl.NL_CB_CUSTOM, finish_handler, cbd)
+ nl.py_nl_cb_set(rx_cb, nl.NL_CB_ACK, nl.NL_CB_CUSTOM, ack_handler, cbd)
+ nl.py_nl_cb_set(rx_cb, nl.NL_CB_VALID, nl.NL_CB_CUSTOM, msg_handler, cbd)
+
+ genl.genl_connect(s)
+ family = genl.genl_ctrl_resolve(s, "nl80211")
+ m = nl.nlmsg_alloc()
+ genl.genlmsg_put(m, 0, 0, family, 0, 0, nl80211.NL80211_CMD_GET_WIPHY, 0)
+ nl.nla_put_u32(m, nl80211.NL80211_ATTR_WIPHY, 7)
+
+ err = nl.nl_send_auto_complete(s, m)
+ if err < 0:
+ nl.nlmsg_free(m)
+
+ while cbd.done > 0 and not err < 0:
+ err = nl.nl_recvmsgs(s, rx_cb)
except Exception as e:
- (t, v, tb) = sys.exc_info()
- print(v.message)
- traceback.print_tb(tb)
+ (t, v, tb) = sys.exc_info()
+ print(v.message)
+ traceback.print_tb(tb)
diff --git a/python/netlink/core.py b/python/netlink/core.py
index 1a8ea8f..1fd42dc 100644
--- a/python/netlink/core.py
+++ b/python/netlink/core.py
@@ -30,23 +30,22 @@ details.
from __future__ import absolute_import
-
from . import capi
import sys
import socket
__all__ = [
- 'Socket',
- 'Message',
- 'Callback',
- 'DumpParams',
- 'Object',
- 'Cache',
- 'KernelError',
- 'NetlinkError',
+ "Socket",
+ "Message",
+ "Callback",
+ "DumpParams",
+ "Object",
+ "Cache",
+ "KernelError",
+ "NetlinkError",
]
-__version__ = '0.1'
+__version__ = "0.1"
# netlink protocols
NETLINK_ROUTE = 0
@@ -92,6 +91,7 @@ NLM_F_EXCL = 0x200
NLM_F_CREATE = 0x400
NLM_F_APPEND = 0x800
+
class NetlinkError(Exception):
def __init__(self, error):
self._error = error
@@ -100,16 +100,19 @@ class NetlinkError(Exception):
def __str__(self):
return self._msg
+
class KernelError(NetlinkError):
def __str__(self):
- return 'Kernel returned: {0}'.format(self._msg)
+ return "Kernel returned: {0}".format(self._msg)
+
class ImmutableError(NetlinkError):
def __init__(self, msg):
self._msg = msg
def __str__(self):
- return 'Immutable attribute: {0}'.format(self._msg)
+ return "Immutable attribute: {0}".format(self._msg)
+
class Message(object):
"""Netlink message"""
@@ -121,7 +124,7 @@ class Message(object):
self._msg = capi.nlmsg_alloc_size(size)
if self._msg is None:
- raise Exception('Message allocation returned NULL')
+ raise Exception("Message allocation returned NULL")
def __del__(self):
capi.nlmsg_free(self._msg)
@@ -156,6 +159,7 @@ class Message(object):
def send(self, sock):
sock.send(self)
+
class Callback(object):
"""Netlink callback"""
@@ -180,6 +184,7 @@ class Callback(object):
def clone(self):
return Callback(self)
+
class Socket(object):
"""Netlink socket"""
@@ -189,16 +194,16 @@ class Socket(object):
elif cb == None:
self._sock = capi.nl_socket_alloc()
else:
- raise Exception('\'cb\' parameter has wrong type')
+ raise Exception("'cb' parameter has wrong type")
if self._sock is None:
- raise Exception('NULL pointer returned while allocating socket')
+ raise Exception("NULL pointer returned while allocating socket")
def __del__(self):
capi.nl_socket_free(self._sock)
def __str__(self):
- return 'nlsock<{0}>'.format(self.local_port)
+ return "nlsock<{0}>".format(self.local_port)
@property
def local_port(self):
@@ -237,27 +242,29 @@ class Socket(object):
def sendto(self, buf):
ret = capi.nl_sendto(self._sock, buf, len(buf))
if ret < 0:
- raise Exception('Failed to send')
+ raise Exception("Failed to send")
else:
return ret
def send_auto_complete(self, msg):
if not isinstance(msg, Message):
- raise Exception('must provide Message instance')
+ raise Exception("must provide Message instance")
ret = capi.nl_send_auto_complete(self._sock, msg._msg)
if ret < 0:
- raise Exception('send_auto_complete failed: ret=%d' % ret)
+ raise Exception("send_auto_complete failed: ret=%d" % ret)
return ret
def recvmsgs(self, recv_cb):
if not isinstance(recv_cb, Callback):
- raise Exception('must provide Callback instance')
+ raise Exception("must provide Callback instance")
ret = capi.nl_recvmsgs(self._sock, recv_cb._cb)
if ret < 0:
- raise Exception('recvmsg failed: ret=%d' % ret)
+ raise Exception("recvmsg failed: ret=%d" % ret)
+
_sockets = {}
+
def lookup_socket(protocol):
try:
sock = _sockets[protocol]
@@ -268,13 +275,14 @@ def lookup_socket(protocol):
return sock
+
class DumpParams(object):
"""Dumping parameters"""
def __init__(self, type_=NL_DUMP_LINE):
self._dp = capi.alloc_dump_params()
if not self._dp:
- raise Exception('Unable to allocate struct nl_dump_params')
+ raise Exception("Unable to allocate struct nl_dump_params")
self._dp.dp_type = type_
@@ -297,9 +305,11 @@ class DumpParams(object):
def prefix(self, value):
self._dp.dp_prefix = value
+
# underscore this to make sure it is deleted first upon module deletion
_defaultDumpParams = DumpParams(NL_DUMP_LINE)
+
class Object(object):
"""Cacheable object (base class)"""
@@ -325,7 +335,7 @@ class Object(object):
capi.nl_object_put(self._nl_object)
def __str__(self):
- if hasattr(self, 'format'):
+ if hasattr(self, "format"):
return self.format()
else:
return capi.nl_object_dump_buf(self._nl_object, 4096).rstrip()
@@ -368,10 +378,10 @@ class Object(object):
self._modules.append(ret)
def _module_brief(self):
- ret = ''
+ ret = ""
for module in self._modules:
- if hasattr(module, 'brief'):
+ if hasattr(module, "brief"):
ret += module.brief()
return ret
@@ -383,7 +393,6 @@ class Object(object):
capi.nl_object_dump(self._nl_object, params._dp)
-
@property
def mark(self):
return bool(capi.nl_object_is_marked(self._nl_object))
@@ -412,7 +421,7 @@ class Object(object):
# accessing properties of subclass/subtypes (e.g. link.vlan.id)
def _resolve(self, attr):
obj = self
- l = attr.split('.')
+ l = attr.split(".")
while len(l) > 1:
obj = getattr(obj, l.pop(0))
return (obj, l.pop(0))
@@ -425,6 +434,7 @@ class Object(object):
obj, attr = self._resolve(attr)
return hasattr(obj, attr)
+
class ObjIterator(object):
def __init__(self, cache, obj):
self._cache = cache
@@ -480,8 +490,10 @@ class ReverseObjIterator(ObjIterator):
def get_next(self):
return capi.nl_cache_get_prev(self._nl_object)
+
class Cache(object):
"""Collection of netlink objects"""
+
def __init__(self):
if self.__class__ is Cache:
raise NotImplementedError()
@@ -597,8 +609,11 @@ class Cache(object):
"""
capi.nl_cache_mngt_unprovide(self._nl_cache)
+
# Cache Manager (Work in Progress)
NL_AUTO_PROVIDE = 1
+
+
class CacheManager(object):
def __init__(self, protocol, flags=None):
@@ -620,6 +635,7 @@ class CacheManager(object):
def add(self, name):
capi.cache_mngr_add(self._mngr, name, None, None)
+
class AddressFamily(object):
"""Address family representation
@@ -632,11 +648,12 @@ class AddressFamily(object):
print int(af) # => 10 (numeric representation)
print repr(af) # => AddressFamily('inet6')
"""
+
def __init__(self, family=socket.AF_UNSPEC):
if isinstance(family, str):
family = capi.nl_str2af(family)
if family < 0:
- raise ValueError('Unknown family name')
+ raise ValueError("Unknown family name")
elif not isinstance(family, int):
raise TypeError()
@@ -649,7 +666,7 @@ class AddressFamily(object):
return self._family
def __repr__(self):
- return 'AddressFamily({0!r})'.format(str(self))
+ return "AddressFamily({0!r})".format(str(self))
class AbstractAddress(object):
@@ -667,15 +684,16 @@ class AbstractAddress(object):
"""
+
def __init__(self, addr):
self._nl_addr = None
if isinstance(addr, str):
# returns None on success I guess
- # TO CORRECT
+ # TO CORRECT
addr = capi.addr_parse(addr, socket.AF_UNSPEC)
if addr is None:
- raise ValueError('Invalid address format')
+ raise ValueError("Invalid address format")
elif addr:
capi.nl_addr_get(addr)
@@ -722,7 +740,7 @@ class AbstractAddress(object):
if self._nl_addr:
return capi.nl_addr2str(self._nl_addr, 64)[0]
else:
- return 'none'
+ return "none"
@property
def shared(self):
@@ -773,6 +791,7 @@ class AbstractAddress(object):
# fmt = func (formatting function)
# title = string
+
def nlattr(**kwds):
"""netlink object attribute decorator
@@ -790,4 +809,5 @@ def nlattr(**kwds):
def wrap_fn(func):
func.formatinfo = kwds
return func
+
return wrap_fn
diff --git a/python/netlink/route/address.py b/python/netlink/route/address.py
index cab2a97..541f428 100644
--- a/python/netlink/route/address.py
+++ b/python/netlink/route/address.py
@@ -8,23 +8,22 @@
from __future__ import absolute_import
-__version__ = '1.0'
-__all__ = [
- 'AddressCache',
- 'Address']
+__version__ = "1.0"
+__all__ = ["AddressCache", "Address"]
import datetime
from .. import core as netlink
-from . import capi as capi
-from . import link as Link
+from . import capi as capi
+from . import link as Link
from .. import util as util
+
class AddressCache(netlink.Cache):
"""Cache containing network addresses"""
def __init__(self, cache=None):
if not cache:
- cache = self._alloc_cache_name('route/addr')
+ cache = self._alloc_cache_name("route/addr")
self._protocol = netlink.NETLINK_ROUTE
self._nl_cache = cache
@@ -38,8 +37,7 @@ class AddressCache(netlink.Cache):
if type(local) is str:
local = netlink.AbstractAddress(local)
- addr = capi.rtnl_addr_get(self._nl_cache, ifindex,
- local._nl_addr)
+ addr = capi.rtnl_addr_get(self._nl_cache, ifindex, local._nl_addr)
if addr is None:
raise KeyError()
@@ -53,11 +51,12 @@ class AddressCache(netlink.Cache):
def _new_cache(cache):
return AddressCache(cache=cache)
+
class Address(netlink.Object):
"""Network address"""
def __init__(self, obj=None):
- netlink.Object.__init__(self, 'route/addr', 'address', obj)
+ netlink.Object.__init__(self, "route/addr", "address", obj)
self._rtnl_addr = self._obj2type(self._nl_object)
@classmethod
@@ -148,13 +147,13 @@ class Address(netlink.Object):
addr.flags = [ '+xxx', '-yyy' ] # list operation
"""
flags = capi.rtnl_addr_get_flags(self._rtnl_addr)
- return capi.rtnl_addr_flags2str(flags, 256)[0].split(',')
+ return capi.rtnl_addr_flags2str(flags, 256)[0].split(",")
def _set_flag(self, flag):
- if flag.startswith('-'):
+ if flag.startswith("-"):
i = capi.rtnl_addr_str2flags(flag[1:])
capi.rtnl_addr_unset_flags(self._rtnl_addr, i)
- elif flag.startswith('+'):
+ elif flag.startswith("+"):
i = capi.rtnl_addr_str2flags(flag[1:])
capi.rtnl_addr_set_flags(self._rtnl_addr, i)
else:
@@ -249,7 +248,7 @@ class Address(netlink.Object):
try:
a = netlink.AbstractAddress(value)
except ValueError as err:
- raise AttributeError('multicast', err)
+ raise AttributeError("multicast", err)
capi.rtnl_addr_set_multicast(self._rtnl_addr, a._nl_addr)
@@ -298,14 +297,14 @@ class Address(netlink.Object):
def create_time(self):
"""Creation time"""
hsec = capi.rtnl_addr_get_create_time(self._rtnl_addr)
- return datetime.timedelta(milliseconds=10*hsec)
+ return datetime.timedelta(milliseconds=10 * hsec)
@property
@netlink.nlattr(type=int, immutable=True, fmt=util.num)
def last_update(self):
"""Last update"""
hsec = capi.rtnl_addr_get_last_update_time(self._rtnl_addr)
- return datetime.timedelta(milliseconds=10*hsec)
+ return datetime.timedelta(milliseconds=10 * hsec)
def add(self, socket=None, flags=None):
if not socket:
@@ -330,38 +329,38 @@ class Address(netlink.Object):
# Used for formatting output. USE AT OWN RISK
@property
def _flags(self):
- return ','.join(self.flags)
+ return ",".join(self.flags)
- def format(self, details=False, stats=False, nodev=False, indent=''):
+ def format(self, details=False, stats=False, nodev=False, indent=""):
"""Return address as formatted text"""
fmt = util.MyFormatter(self, indent)
- buf = fmt.format('{a|local!b}')
+ buf = fmt.format("{a|local!b}")
if not nodev:
- buf += fmt.format(' {a|ifindex}')
+ buf += fmt.format(" {a|ifindex}")
- buf += fmt.format(' {a|scope}')
+ buf += fmt.format(" {a|scope}")
if self.label:
buf += fmt.format(' "{a|label}"')
- buf += fmt.format(' <{a|_flags}>')
+ buf += fmt.format(" <{a|_flags}>")
if details:
- buf += fmt.nl('\t{t|broadcast} {t|multicast}') \
- + fmt.nl('\t{t|peer} {t|anycast}')
+ buf += fmt.nl("\t{t|broadcast} {t|multicast}") + fmt.nl(
+ "\t{t|peer} {t|anycast}"
+ )
if self.valid_lifetime:
- buf += fmt.nl('\t{s|valid-lifetime!k} '\
- '{a|valid_lifetime}')
+ buf += fmt.nl("\t{s|valid-lifetime!k} " "{a|valid_lifetime}")
if self.preferred_lifetime:
- buf += fmt.nl('\t{s|preferred-lifetime!k} '\
- '{a|preferred_lifetime}')
+ buf += fmt.nl("\t{s|preferred-lifetime!k} " "{a|preferred_lifetime}")
if stats and (self.create_time or self.last_update):
- buf += self.nl('\t{s|created!k} {a|create_time}'\
- ' {s|last-updated!k} {a|last_update}')
+ buf += self.nl(
+ "\t{s|created!k} {a|create_time}" " {s|last-updated!k} {a|last_update}"
+ )
return buf
diff --git a/python/netlink/route/link.py b/python/netlink/route/link.py
index e3a6bd3..c57b96c 100644
--- a/python/netlink/route/link.py
+++ b/python/netlink/route/link.py
@@ -36,17 +36,17 @@ The following public functions exist:
from __future__ import absolute_import
-__version__ = '0.1'
+__version__ = "0.1"
__all__ = [
- 'LinkCache',
- 'Link',
+ "LinkCache",
+ "Link",
]
import socket
from .. import core as netlink
from .. import capi as core_capi
-from . import capi as capi
-from .links import inet as inet
+from . import capi as capi
+from .links import inet as inet
from .. import util as util
# Link statistics definitions
@@ -108,12 +108,13 @@ ICMP6_INERRORS = 54
ICMP6_OUTMSGS = 55
ICMP6_OUTERRORS = 56
+
class LinkCache(netlink.Cache):
"""Cache of network links"""
def __init__(self, family=socket.AF_UNSPEC, cache=None):
if not cache:
- cache = self._alloc_cache_name('route/link')
+ cache = self._alloc_cache_name("route/link")
self._info_module = None
self._protocol = netlink.NETLINK_ROUTE
@@ -138,18 +139,19 @@ class LinkCache(netlink.Cache):
def _new_cache(self, cache):
return LinkCache(family=self.arg1, cache=cache)
+
class Link(netlink.Object):
"""Network link"""
def __init__(self, obj=None):
- netlink.Object.__init__(self, 'route/link', 'link', obj)
+ netlink.Object.__init__(self, "route/link", "link", obj)
self._rtnl_link = self._obj2type(self._nl_object)
if self.type:
- self._module_lookup('netlink.route.links.' + self.type)
+ self._module_lookup("netlink.route.links." + self.type)
self.inet = inet.InetLink(self)
- self.af = {'inet' : self.inet }
+ self.af = {"inet": self.inet}
def __enter__(self):
return self
@@ -222,13 +224,13 @@ class Link(netlink.Object):
link.flags = [ '+xxx', '-yyy' ] # list operation
"""
flags = capi.rtnl_link_get_flags(self._rtnl_link)
- return capi.rtnl_link_flags2str(flags, 256)[0].split(',')
+ return capi.rtnl_link_flags2str(flags, 256)[0].split(",")
def _set_flag(self, flag):
- if flag.startswith('-'):
+ if flag.startswith("-"):
i = capi.rtnl_link_str2flags(flag[1:])
capi.rtnl_link_unset_flags(self._rtnl_link, i)
- elif flag.startswith('+'):
+ elif flag.startswith("+"):
i = capi.rtnl_link_str2flags(flag[1:])
capi.rtnl_link_set_flags(self._rtnl_link, i)
else:
@@ -318,7 +320,7 @@ class Link(netlink.Object):
capi.rtnl_link_set_arptype(self._rtnl_link, i)
@property
- @netlink.nlattr(type=str, immutable=True, fmt=util.string, title='state')
+ @netlink.nlattr(type=str, immutable=True, fmt=util.string, title="state")
def operstate(self):
"""Operational status"""
operstate = capi.rtnl_link_get_operstate(self._rtnl_link)
@@ -360,16 +362,16 @@ class Link(netlink.Object):
@type.setter
def type(self, value):
if capi.rtnl_link_set_type(self._rtnl_link, value) < 0:
- raise NameError('unknown info type')
+ raise NameError("unknown info type")
- self._module_lookup('netlink.route.links.' + value)
+ self._module_lookup("netlink.route.links." + value)
def get_stat(self, stat):
"""Retrieve statistical information"""
if type(stat) is str:
stat = capi.rtnl_link_str2stat(stat)
if stat < 0:
- raise NameError('unknown name of statistic')
+ raise NameError("unknown name of statistic")
return capi.rtnl_link_get_stat(self._rtnl_link, stat)
@@ -402,7 +404,7 @@ class Link(netlink.Object):
sock = netlink.lookup_socket(netlink.NETLINK_ROUTE)
if not self._orig:
- raise netlink.NetlinkError('Original link not available')
+ raise netlink.NetlinkError("Original link not available")
ret = capi.rtnl_link_change(sock._sock, self._orig, self._rtnl_link, flags)
if ret < 0:
raise netlink.KernelError(ret)
@@ -422,113 +424,121 @@ class Link(netlink.Object):
# Used for formatting output. USE AT OWN RISK
@property
def _state(self):
- if 'up' in self.flags:
- buf = util.good('up')
- if 'lowerup' not in self.flags:
- buf += ' ' + util.bad('no-carrier')
+ if "up" in self.flags:
+ buf = util.good("up")
+ if "lowerup" not in self.flags:
+ buf += " " + util.bad("no-carrier")
else:
- buf = util.bad('down')
+ buf = util.bad("down")
return buf
@property
def _brief(self):
- return self._module_brief() + self._foreach_af('brief')
+ return self._module_brief() + self._foreach_af("brief")
@property
def _flags(self):
ignore = [
- 'up',
- 'running',
- 'lowerup',
+ "up",
+ "running",
+ "lowerup",
]
- return ','.join([flag for flag in self.flags if flag not in ignore])
+ return ",".join([flag for flag in self.flags if flag not in ignore])
def _foreach_af(self, name, args=None):
- buf = ''
+ buf = ""
for af in self.af:
try:
func = getattr(self.af[af], name)
s = str(func(args))
if len(s) > 0:
- buf += ' ' + s
+ buf += " " + s
except AttributeError:
pass
return buf
- def format(self, details=False, stats=False, indent=''):
+ def format(self, details=False, stats=False, indent=""):
"""Return link as formatted text"""
fmt = util.MyFormatter(self, indent)
- buf = fmt.format('{a|ifindex} {a|name} {a|arptype} {a|address} '\
- '{a|_state} <{a|_flags}> {a|_brief}')
+ buf = fmt.format(
+ "{a|ifindex} {a|name} {a|arptype} {a|address} "
+ "{a|_state} <{a|_flags}> {a|_brief}"
+ )
if details:
- buf += fmt.nl('\t{t|mtu} {t|txqlen} {t|weight} '\
- '{t|qdisc} {t|operstate}')
- buf += fmt.nl('\t{t|broadcast} {t|alias}')
+ buf += fmt.nl("\t{t|mtu} {t|txqlen} {t|weight} " "{t|qdisc} {t|operstate}")
+ buf += fmt.nl("\t{t|broadcast} {t|alias}")
- buf += self._foreach_af('details', fmt)
+ buf += self._foreach_af("details", fmt)
if stats:
- l = [['Packets', RX_PACKETS, TX_PACKETS],
- ['Bytes', RX_BYTES, TX_BYTES],
- ['Errors', RX_ERRORS, TX_ERRORS],
- ['Dropped', RX_DROPPED, TX_DROPPED],
- ['Compressed', RX_COMPRESSED, TX_COMPRESSED],
- ['FIFO Errors', RX_FIFO_ERR, TX_FIFO_ERR],
- ['Length Errors', RX_LEN_ERR, None],
- ['Over Errors', RX_OVER_ERR, None],
- ['CRC Errors', RX_CRC_ERR, None],
- ['Frame Errors', RX_FRAME_ERR, None],
- ['Missed Errors', RX_MISSED_ERR, None],
- ['Abort Errors', None, TX_ABORT_ERR],
- ['Carrier Errors', None, TX_CARRIER_ERR],
- ['Heartbeat Errors', None, TX_HBEAT_ERR],
- ['Window Errors', None, TX_WIN_ERR],
- ['Collisions', None, COLLISIONS],
- ['Multicast', None, MULTICAST],
- ['', None, None],
- ['Ipv6:', None, None],
- ['Packets', IP6_INPKTS, IP6_OUTPKTS],
- ['Bytes', IP6_INOCTETS, IP6_OUTOCTETS],
- ['Discards', IP6_INDISCARDS, IP6_OUTDISCARDS],
- ['Multicast Packets', IP6_INMCASTPKTS, IP6_OUTMCASTPKTS],
- ['Multicast Bytes', IP6_INMCASTOCTETS, IP6_OUTMCASTOCTETS],
- ['Broadcast Packets', IP6_INBCASTPKTS, IP6_OUTBCASTPKTS],
- ['Broadcast Bytes', IP6_INBCASTOCTETS, IP6_OUTBCASTOCTETS],
- ['Delivers', IP6_INDELIVERS, None],
- ['Forwarded', None, IP6_OUTFORWDATAGRAMS],
- ['No Routes', IP6_INNOROUTES, IP6_OUTNOROUTES],
- ['Header Errors', IP6_INHDRERRORS, None],
- ['Too Big Errors', IP6_INTOOBIGERRORS, None],
- ['Address Errors', IP6_INADDRERRORS, None],
- ['Unknown Protocol', IP6_INUNKNOWNPROTOS, None],
- ['Truncated Packets', IP6_INTRUNCATEDPKTS, None],
- ['Reasm Timeouts', IP6_REASMTIMEOUT, None],
- ['Reasm Requests', IP6_REASMREQDS, None],
- ['Reasm Failures', IP6_REASMFAILS, None],
- ['Reasm OK', IP6_REASMOKS, None],
- ['Frag Created', None, IP6_FRAGCREATES],
- ['Frag Failures', None, IP6_FRAGFAILS],
- ['Frag OK', None, IP6_FRAGOKS],
- ['', None, None],
- ['ICMPv6:', None, None],
- ['Messages', ICMP6_INMSGS, ICMP6_OUTMSGS],
- ['Errors', ICMP6_INERRORS, ICMP6_OUTERRORS]]
-
- buf += '\n\t%s%s%s%s\n' % (33 * ' ', util.title('RX'),
- 15 * ' ', util.title('TX'))
+ l = [
+ ["Packets", RX_PACKETS, TX_PACKETS],
+ ["Bytes", RX_BYTES, TX_BYTES],
+ ["Errors", RX_ERRORS, TX_ERRORS],
+ ["Dropped", RX_DROPPED, TX_DROPPED],
+ ["Compressed", RX_COMPRESSED, TX_COMPRESSED],
+ ["FIFO Errors", RX_FIFO_ERR, TX_FIFO_ERR],
+ ["Length Errors", RX_LEN_ERR, None],
+ ["Over Errors", RX_OVER_ERR, None],
+ ["CRC Errors", RX_CRC_ERR, None],
+ ["Frame Errors", RX_FRAME_ERR, None],
+ ["Missed Errors", RX_MISSED_ERR, None],
+ ["Abort Errors", None, TX_ABORT_ERR],
+ ["Carrier Errors", None, TX_CARRIER_ERR],
+ ["Heartbeat Errors", None, TX_HBEAT_ERR],
+ ["Window Errors", None, TX_WIN_ERR],
+ ["Collisions", None, COLLISIONS],
+ ["Multicast", None, MULTICAST],
+ ["", None, None],
+ ["Ipv6:", None, None],
+ ["Packets", IP6_INPKTS, IP6_OUTPKTS],
+ ["Bytes", IP6_INOCTETS, IP6_OUTOCTETS],
+ ["Discards", IP6_INDISCARDS, IP6_OUTDISCARDS],
+ ["Multicast Packets", IP6_INMCASTPKTS, IP6_OUTMCASTPKTS],
+ ["Multicast Bytes", IP6_INMCASTOCTETS, IP6_OUTMCASTOCTETS],
+ ["Broadcast Packets", IP6_INBCASTPKTS, IP6_OUTBCASTPKTS],
+ ["Broadcast Bytes", IP6_INBCASTOCTETS, IP6_OUTBCASTOCTETS],
+ ["Delivers", IP6_INDELIVERS, None],
+ ["Forwarded", None, IP6_OUTFORWDATAGRAMS],
+ ["No Routes", IP6_INNOROUTES, IP6_OUTNOROUTES],
+ ["Header Errors", IP6_INHDRERRORS, None],
+ ["Too Big Errors", IP6_INTOOBIGERRORS, None],
+ ["Address Errors", IP6_INADDRERRORS, None],
+ ["Unknown Protocol", IP6_INUNKNOWNPROTOS, None],
+ ["Truncated Packets", IP6_INTRUNCATEDPKTS, None],
+ ["Reasm Timeouts", IP6_REASMTIMEOUT, None],
+ ["Reasm Requests", IP6_REASMREQDS, None],
+ ["Reasm Failures", IP6_REASMFAILS, None],
+ ["Reasm OK", IP6_REASMOKS, None],
+ ["Frag Created", None, IP6_FRAGCREATES],
+ ["Frag Failures", None, IP6_FRAGFAILS],
+ ["Frag OK", None, IP6_FRAGOKS],
+ ["", None, None],
+ ["ICMPv6:", None, None],
+ ["Messages", ICMP6_INMSGS, ICMP6_OUTMSGS],
+ ["Errors", ICMP6_INERRORS, ICMP6_OUTERRORS],
+ ]
+
+ buf += "\n\t%s%s%s%s\n" % (
+ 33 * " ",
+ util.title("RX"),
+ 15 * " ",
+ util.title("TX"),
+ )
for row in l:
row[0] = util.kw(row[0])
- row[1] = self.get_stat(row[1]) if row[1] else ''
- row[2] = self.get_stat(row[2]) if row[2] else ''
- buf += '\t{0[0]:27} {0[1]:>16} {0[2]:>16}\n'.format(row)
+ row[1] = self.get_stat(row[1]) if row[1] else ""
+ row[2] = self.get_stat(row[2]) if row[2] else ""
+ buf += "\t{0[0]:27} {0[1]:>16} {0[2]:>16}\n".format(row)
- buf += self._foreach_af('stats')
+ buf += self._foreach_af("stats")
return buf
+
def get(name, sock=None):
"""Lookup Link object directly from kernel"""
if not name:
@@ -543,8 +553,10 @@ def get(name, sock=None):
return Link.from_capi(link)
+
_link_cache = LinkCache()
+
def resolve(name):
_link_cache.refill()
return _link_cache[name]
diff --git a/python/netlink/route/links/bridge.py b/python/netlink/route/links/bridge.py
index cf4e764..7710584 100644
--- a/python/netlink/route/links/bridge.py
+++ b/python/netlink/route/links/bridge.py
@@ -10,20 +10,29 @@ from __future__ import absolute_import
from __future__ import print_function
from ... import core as netlink
-from .. import capi as capi
+from .. import capi as capi
+
class BRIDGELink(object):
def __init__(self, link):
self._link = link
self._has_ext_info = capi.rtnl_link_bridge_has_ext_info(self._link)
- self._port_state_values = ['disabled','listening','learning','forwarding','blocking']
+ self._port_state_values = [
+ "disabled",
+ "listening",
+ "learning",
+ "forwarding",
+ "blocking",
+ ]
def bridge_assert_ext_info(self):
if self._has_ext_info == False:
- print("""
+ print(
+ """
Please update your kernel to be able to call this method.
Your current kernel bridge version is too old to support this extention.
- """)
+ """
+ )
raise RuntimeWarning()
def port_state2str(self, state):
@@ -40,7 +49,9 @@ class BRIDGELink(object):
def port_state(self):
"""bridge state :
%s
- """ % (self.port_state)
+ """ % (
+ self.port_state
+ )
return capi.rtnl_link_bridge_get_state(self._link)
@port_state.setter
@@ -50,8 +61,7 @@ class BRIDGELink(object):
@property
@netlink.nlattr(type=int)
def priority(self):
- """bridge prio
- """
+ """bridge prio"""
self.bridge_assert_ext_info()
return capi.rtnl_link_bridge_get_prio(self._link)
@@ -65,8 +75,7 @@ class BRIDGELink(object):
@property
@netlink.nlattr(type=int)
def cost(self):
- """bridge prio
- """
+ """bridge prio"""
self.bridge_assert_ext_info()
return capi.rtnl_link_bridge_get_cost(self._link)
@@ -80,7 +89,7 @@ class BRIDGELink(object):
@property
@netlink.nlattr(type=str)
def flags(self):
- """ BRIDGE flags
+ """BRIDGE flags
Setting this property will *Not* reset flags to value you supply in
Examples:
link.flags = '+xxx' # add xxx flag
@@ -90,13 +99,13 @@ class BRIDGELink(object):
"""
self.bridge_assert_ext_info()
flags = capi.rtnl_link_bridge_get_flags(self._link)
- return capi.rtnl_link_bridge_flags2str(flags, 256)[0].split(',')
+ return capi.rtnl_link_bridge_flags2str(flags, 256)[0].split(",")
def _set_flag(self, flag):
- if flag.startswith('-'):
+ if flag.startswith("-"):
i = capi.rtnl_link_bridge_str2flags(flag[1:])
capi.rtnl_link_bridge_unset_flags(self._link, i)
- elif flag.startswith('+'):
+ elif flag.startswith("+"):
i = capi.rtnl_link_bridge_str2flags(flag[1:])
capi.rtnl_link_bridge_set_flags(self._link, i)
else:
@@ -113,7 +122,8 @@ class BRIDGELink(object):
self._set_flag(value)
def brief(self):
- return 'bridge-has-ext-info {0}'.format(self._has_ext_info)
+ return "bridge-has-ext-info {0}".format(self._has_ext_info)
+
def init(link):
link.bridge = BRIDGELink(link._rtnl_link)
diff --git a/python/netlink/route/links/dummy.py b/python/netlink/route/links/dummy.py
index e9491cc..1dc3c68 100644
--- a/python/netlink/route/links/dummy.py
+++ b/python/netlink/route/links/dummy.py
@@ -7,9 +7,9 @@
"""
from __future__ import absolute_import
-__version__ = '1.0'
+__version__ = "1.0"
__all__ = [
- 'init',
+ "init",
]
@@ -19,7 +19,8 @@ class DummyLink(object):
@staticmethod
def brief():
- return 'dummy'
+ return "dummy"
+
def init(link):
link.dummy = DummyLink(link._rtnl_link)
diff --git a/python/netlink/route/links/inet.py b/python/netlink/route/links/inet.py
index d4de07b..7aeedcd 100644
--- a/python/netlink/route/links/inet.py
+++ b/python/netlink/route/links/inet.py
@@ -11,8 +11,9 @@ from __future__ import absolute_import
__all__ = []
from ... import core as netlink
-from .. import capi as capi
+from .. import capi as capi
from ... import util as util
+
DEVCONF_FORWARDING = 1
DEVCONF_MC_FORWARDING = 2
DEVCONF_PROXY_ARP = 3
@@ -40,27 +41,27 @@ DEVCONF_SRC_VMARK = 24
DEVCONF_PROXY_ARP_PVLAN = 25
DEVCONF_MAX = DEVCONF_PROXY_ARP_PVLAN
+
def _resolve(id):
if type(id) is str:
id = capi.rtnl_link_inet_str2devconf(id)[0]
if id < 0:
- raise NameError('unknown configuration id')
+ raise NameError("unknown configuration id")
return id
+
class InetLink(object):
def __init__(self, link):
self._link = link
def details(self, fmt):
- buf = fmt.nl('\n\t{0}\n\t'.format(util.title('Configuration:')))
+ buf = fmt.nl("\n\t{0}\n\t".format(util.title("Configuration:")))
- for i in range(DEVCONF_FORWARDING, DEVCONF_MAX+1):
+ for i in range(DEVCONF_FORWARDING, DEVCONF_MAX + 1):
if i & 1 and i > 1:
- buf += fmt.nl('\t')
+ buf += fmt.nl("\t")
txt = util.kw(capi.rtnl_link_inet_devconf2str(i, 32)[0])
- buf += fmt.format('{0:28s} {1:12} ', txt,
- self.get_conf(i))
-
+ buf += fmt.format("{0:28s} {1:12} ", txt, self.get_conf(i))
return buf
@@ -68,8 +69,9 @@ class InetLink(object):
return capi.inet_get_conf(self._link._rtnl_link, _resolve(id))
def set_conf(self, id, value):
- return capi.rtnl_link_inet_set_conf(self._link._rtnl_link,
- _resolve(id), int(value))
+ return capi.rtnl_link_inet_set_conf(
+ self._link._rtnl_link, _resolve(id), int(value)
+ )
@property
@netlink.nlattr(type=bool, fmt=util.boolean)
@@ -80,7 +82,6 @@ class InetLink(object):
def forwarding(self, value):
self.set_conf(DEVCONF_FORWARDING, int(value))
-
@property
@netlink.nlattr(type=bool, fmt=util.boolean)
def mc_forwarding(self):
@@ -90,7 +91,6 @@ class InetLink(object):
def mc_forwarding(self, value):
self.set_conf(DEVCONF_MC_FORWARDING, int(value))
-
@property
@netlink.nlattr(type=bool, fmt=util.boolean)
def proxy_arp(self):
@@ -136,21 +136,22 @@ class InetLink(object):
def shared_media(self, value):
self.set_conf(DEVCONF_SHARED_MEDIA, int(value))
-# IPV4_DEVCONF_RP_FILTER,
-# IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE,
-# IPV4_DEVCONF_BOOTP_RELAY,
-# IPV4_DEVCONF_LOG_MARTIANS,
-# IPV4_DEVCONF_TAG,
-# IPV4_DEVCONF_ARPFILTER,
-# IPV4_DEVCONF_MEDIUM_ID,
-# IPV4_DEVCONF_NOXFRM,
-# IPV4_DEVCONF_NOPOLICY,
-# IPV4_DEVCONF_FORCE_IGMP_VERSION,
-# IPV4_DEVCONF_ARP_ANNOUNCE,
-# IPV4_DEVCONF_ARP_IGNORE,
-# IPV4_DEVCONF_PROMOTE_SECONDARIES,
-# IPV4_DEVCONF_ARP_ACCEPT,
-# IPV4_DEVCONF_ARP_NOTIFY,
-# IPV4_DEVCONF_ACCEPT_LOCAL,
-# IPV4_DEVCONF_SRC_VMARK,
-# IPV4_DEVCONF_PROXY_ARP_PVLAN,
+
+# IPV4_DEVCONF_RP_FILTER,
+# IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE,
+# IPV4_DEVCONF_BOOTP_RELAY,
+# IPV4_DEVCONF_LOG_MARTIANS,
+# IPV4_DEVCONF_TAG,
+# IPV4_DEVCONF_ARPFILTER,
+# IPV4_DEVCONF_MEDIUM_ID,
+# IPV4_DEVCONF_NOXFRM,
+# IPV4_DEVCONF_NOPOLICY,
+# IPV4_DEVCONF_FORCE_IGMP_VERSION,
+# IPV4_DEVCONF_ARP_ANNOUNCE,
+# IPV4_DEVCONF_ARP_IGNORE,
+# IPV4_DEVCONF_PROMOTE_SECONDARIES,
+# IPV4_DEVCONF_ARP_ACCEPT,
+# IPV4_DEVCONF_ARP_NOTIFY,
+# IPV4_DEVCONF_ACCEPT_LOCAL,
+# IPV4_DEVCONF_SRC_VMARK,
+# IPV4_DEVCONF_PROXY_ARP_PVLAN,
diff --git a/python/netlink/route/links/vlan.py b/python/netlink/route/links/vlan.py
index 0ba3781..8bee3c9 100644
--- a/python/netlink/route/links/vlan.py
+++ b/python/netlink/route/links/vlan.py
@@ -10,7 +10,9 @@ from __future__ import absolute_import
from ... import core as netlink
-from .. import capi as capi
+from .. import capi as capi
+
+
class VLANLink(object):
def __init__(self, link):
self._link = link
@@ -28,7 +30,7 @@ class VLANLink(object):
@property
@netlink.nlattr(type=str)
def flags(self):
- """ VLAN flags
+ """VLAN flags
Setting this property will *Not* reset flags to value you supply in
Examples:
link.flags = '+xxx' # add xxx flag
@@ -37,13 +39,13 @@ class VLANLink(object):
link.flags = [ '+xxx', '-yyy' ] # list operation
"""
flags = capi.rtnl_link_vlan_get_flags(self._link)
- return capi.rtnl_link_vlan_flags2str(flags, 256)[0].split(',')
+ return capi.rtnl_link_vlan_flags2str(flags, 256)[0].split(",")
def _set_flag(self, flag):
- if flag.startswith('-'):
+ if flag.startswith("-"):
i = capi.rtnl_link_vlan_str2flags(flag[1:])
capi.rtnl_link_vlan_unset_flags(self._link, i)
- elif flag.startswith('+'):
+ elif flag.startswith("+"):
i = capi.rtnl_link_vlan_str2flags(flag[1:])
capi.rtnl_link_vlan_set_flags(self._link, i)
else:
@@ -64,7 +66,8 @@ class VLANLink(object):
# - egress map
def brief(self):
- return 'vlan-id {0}'.format(self.id)
+ return "vlan-id {0}".format(self.id)
+
def init(link):
link.vlan = VLANLink(link._rtnl_link)
diff --git a/python/netlink/route/qdisc/htb.py b/python/netlink/route/qdisc/htb.py
index d051c8d..baacce6 100644
--- a/python/netlink/route/qdisc/htb.py
+++ b/python/netlink/route/qdisc/htb.py
@@ -10,8 +10,9 @@ from __future__ import absolute_import
from ... import core as netlink
from ... import util as util
-from .. import capi as capi
-from .. import tc as tc
+from .. import capi as capi
+from .. import tc as tc
+
class HTBQdisc(object):
def __init__(self, qdisc):
@@ -27,25 +28,25 @@ class HTBQdisc(object):
capi.rtnl_htb_set_defcls(self._qdisc._rtnl_qdisc, int(value))
@property
- @netlink.nlattr('r2q', type=int)
+ @netlink.nlattr("r2q", type=int)
def r2q(self):
return capi.rtnl_htb_get_rate2quantum(self._qdisc._rtnl_qdisc)
@r2q.setter
def r2q(self, value):
- capi.rtnl_htb_get_rate2quantum(self._qdisc._rtnl_qdisc,
- int(value))
+ capi.rtnl_htb_get_rate2quantum(self._qdisc._rtnl_qdisc, int(value))
def brief(self):
fmt = util.MyFormatter(self)
- ret = ' {s|default-class!k} {a|default_class}'
+ ret = " {s|default-class!k} {a|default_class}"
if self.r2q:
- ret += ' {s|r2q!k} {a|r2q}'
+ ret += " {s|r2q!k} {a|r2q}"
return fmt.format(ret)
+
class HTBClass(object):
def __init__(self, cl):
self._class = cl
@@ -120,26 +121,29 @@ class HTBClass(object):
def brief(self):
fmt = util.MyFormatter(self)
- ret = ' {t|prio} {t|rate}'
+ ret = " {t|prio} {t|rate}"
if self.rate != self.ceil:
- ret += ' {s|borrow-up-to!k} {a|ceil}'
+ ret += " {s|borrow-up-to!k} {a|ceil}"
- ret += ' {t|burst}'
+ ret += " {t|burst}"
return fmt.format(ret)
def details(self):
fmt = util.MyFormatter(self)
- return fmt.nl('\t{t|level} {t|quantum}')
+ return fmt.nl("\t{t|level} {t|quantum}")
+
def init_qdisc(qdisc):
qdisc.htb = HTBQdisc(qdisc)
return qdisc.htb
+
def init_class(cl):
cl.htb = HTBClass(cl)
return cl.htb
-#extern void rtnl_htb_set_quantum(struct rtnl_class *, uint32_t quantum);
+
+# extern void rtnl_htb_set_quantum(struct rtnl_class *, uint32_t quantum);
diff --git a/python/netlink/route/tc.py b/python/netlink/route/tc.py
index 0689b71..4908c0b 100644
--- a/python/netlink/route/tc.py
+++ b/python/netlink/route/tc.py
@@ -4,18 +4,18 @@
from __future__ import absolute_import
__all__ = [
- 'TcCache',
- 'Tc',
- 'QdiscCache',
- 'Qdisc',
- 'TcClassCache',
- 'TcClass',
+ "TcCache",
+ "Tc",
+ "QdiscCache",
+ "Qdisc",
+ "TcClassCache",
+ "TcClass",
]
from .. import core as netlink
-from . import capi as capi
+from . import capi as capi
from .. import util as util
-from . import link as Link
+from . import link as Link
TC_PACKETS = 0
TC_BYTES = 1
@@ -43,7 +43,7 @@ STAT_MAX = STAT_OVERLIMITS
class Handle(object):
- """ Traffic control handle
+ """Traffic control handle
Representation of a traffic control handle which uniquely identifies
each traffic control object in its link namespace.
@@ -53,6 +53,7 @@ class Handle(object):
print int(handle)
print str(handle)
"""
+
def __init__(self, val=None):
if type(val) is str:
val = capi.tc_str2handle(val)
@@ -81,12 +82,14 @@ class Handle(object):
def isroot(self):
return self._val == TC_H_ROOT or self._val == TC_H_INGRESS
+
class TcCache(netlink.Cache):
"""Cache of traffic control object"""
def __getitem__(self, key):
raise NotImplementedError()
+
class Tc(netlink.Object):
def __cmp__(self, other):
diff = self.ifindex - other.ifindex
@@ -95,8 +98,7 @@ class Tc(netlink.Object):
return diff
def _tc_module_lookup(self):
- self._module_lookup(self._module_path + self.kind,
- 'init_' + self._name)
+ self._module_lookup(self._module_path + self.kind, "init_" + self._name)
@property
def root(self):
@@ -189,7 +191,7 @@ class Tc(netlink.Object):
@property
def _dev(self):
- buf = util.kw('dev') + ' '
+ buf = util.kw("dev") + " "
if self.link:
return buf + util.string(self.link.name)
@@ -197,19 +199,19 @@ class Tc(netlink.Object):
return buf + util.num(self.ifindex)
def brief(self, title, nodev=False, noparent=False):
- ret = title + ' {a|kind} {a|handle}'
+ ret = title + " {a|kind} {a|handle}"
if not nodev:
- ret += ' {a|_dev}'
+ ret += " {a|_dev}"
if not noparent:
- ret += ' {t|parent}'
+ ret += " {t|parent}"
return ret + self._module_brief()
@staticmethod
def details():
- return '{t|mtu} {t|mpu} {t|overhead} {t|linktype}'
+ return "{t|mtu} {t|mpu} {t|overhead} {t|linktype}"
@property
def packets(self):
@@ -225,28 +227,29 @@ class Tc(netlink.Object):
@staticmethod
def stats(fmt):
- return fmt.nl('{t|packets} {t|bytes} {t|qlen}')
+ return fmt.nl("{t|packets} {t|bytes} {t|qlen}")
+
class QdiscCache(netlink.Cache):
"""Cache of qdiscs"""
def __init__(self, cache=None):
if not cache:
- cache = self._alloc_cache_name('route/qdisc')
+ cache = self._alloc_cache_name("route/qdisc")
self._protocol = netlink.NETLINK_ROUTE
self._nl_cache = cache
-# def __getitem__(self, key):
-# if type(key) is int:
-# link = capi.rtnl_link_get(self._this, key)
-# elif type(key) is str:
-# link = capi.rtnl_link_get_by_name(self._this, key)
-#
-# if qdisc is None:
-# raise KeyError()
-# else:
-# return Qdisc._from_capi(capi.qdisc2obj(qdisc))
+ # def __getitem__(self, key):
+ # if type(key) is int:
+ # link = capi.rtnl_link_get(self._this, key)
+ # elif type(key) is str:
+ # link = capi.rtnl_link_get_by_name(self._this, key)
+ #
+ # if qdisc is None:
+ # raise KeyError()
+ # else:
+ # return Qdisc._from_capi(capi.qdisc2obj(qdisc))
@staticmethod
def _new_object(obj):
@@ -256,12 +259,13 @@ class QdiscCache(netlink.Cache):
def _new_cache(cache):
return QdiscCache(cache=cache)
+
class Qdisc(Tc):
"""Queueing discipline"""
def __init__(self, obj=None):
- netlink.Object.__init__(self, 'route/qdisc', 'qdisc', obj)
- self._module_path = 'netlink.route.qdisc.'
+ netlink.Object.__init__(self, "route/qdisc", "qdisc", obj)
+ self._module_path = "netlink.route.qdisc."
self._rtnl_qdisc = self._obj2type(self._nl_object)
self._rtnl_tc = capi.obj2tc(self._nl_object)
@@ -297,105 +301,107 @@ class Qdisc(Tc):
return ret
-# def add(self, socket, flags=None):
-# if not flags:
-# flags = netlink.NLM_F_CREATE
-#
-# ret = capi.rtnl_link_add(socket._sock, self._link, flags)
-# if ret < 0:
-# raise netlink.KernelError(ret)
-#
-# def change(self, socket, flags=0):
-# """Commit changes made to the link object"""
-# if not self._orig:
-# raise NetlinkError('Original link not available')
-# ret = capi.rtnl_link_change(socket._sock, self._orig, self._link, flags)
-# if ret < 0:
-# raise netlink.KernelError(ret)
-#
-# def delete(self, socket):
-# """Attempt to delete this link in the kernel"""
-# ret = capi.rtnl_link_delete(socket._sock, self._link)
-# if ret < 0:
-# raise netlink.KernelError(ret)
-
- def format(self, details=False, stats=False, nodev=False,
- noparent=False, indent=''):
+ # def add(self, socket, flags=None):
+ # if not flags:
+ # flags = netlink.NLM_F_CREATE
+ #
+ # ret = capi.rtnl_link_add(socket._sock, self._link, flags)
+ # if ret < 0:
+ # raise netlink.KernelError(ret)
+ #
+ # def change(self, socket, flags=0):
+ # """Commit changes made to the link object"""
+ # if not self._orig:
+ # raise NetlinkError('Original link not available')
+ # ret = capi.rtnl_link_change(socket._sock, self._orig, self._link, flags)
+ # if ret < 0:
+ # raise netlink.KernelError(ret)
+ #
+ # def delete(self, socket):
+ # """Attempt to delete this link in the kernel"""
+ # ret = capi.rtnl_link_delete(socket._sock, self._link)
+ # if ret < 0:
+ # raise netlink.KernelError(ret)
+
+ def format(
+ self, details=False, stats=False, nodev=False, noparent=False, indent=""
+ ):
"""Return qdisc as formatted text"""
fmt = util.MyFormatter(self, indent)
- buf = fmt.format(self.brief('qdisc', nodev, noparent))
+ buf = fmt.format(self.brief("qdisc", nodev, noparent))
if details:
- buf += fmt.nl('\t' + self.details())
+ buf += fmt.nl("\t" + self.details())
if stats:
buf += self.stats(fmt)
-# if stats:
-# l = [['Packets', RX_PACKETS, TX_PACKETS],
-# ['Bytes', RX_BYTES, TX_BYTES],
-# ['Errors', RX_ERRORS, TX_ERRORS],
-# ['Dropped', RX_DROPPED, TX_DROPPED],
-# ['Compressed', RX_COMPRESSED, TX_COMPRESSED],
-# ['FIFO Errors', RX_FIFO_ERR, TX_FIFO_ERR],
-# ['Length Errors', RX_LEN_ERR, None],
-# ['Over Errors', RX_OVER_ERR, None],
-# ['CRC Errors', RX_CRC_ERR, None],
-# ['Frame Errors', RX_FRAME_ERR, None],
-# ['Missed Errors', RX_MISSED_ERR, None],
-# ['Abort Errors', None, TX_ABORT_ERR],
-# ['Carrier Errors', None, TX_CARRIER_ERR],
-# ['Heartbeat Errors', None, TX_HBEAT_ERR],
-# ['Window Errors', None, TX_WIN_ERR],
-# ['Collisions', None, COLLISIONS],
-# ['Multicast', None, MULTICAST],
-# ['', None, None],
-# ['Ipv6:', None, None],
-# ['Packets', IP6_INPKTS, IP6_OUTPKTS],
-# ['Bytes', IP6_INOCTETS, IP6_OUTOCTETS],
-# ['Discards', IP6_INDISCARDS, IP6_OUTDISCARDS],
-# ['Multicast Packets', IP6_INMCASTPKTS, IP6_OUTMCASTPKTS],
-# ['Multicast Bytes', IP6_INMCASTOCTETS, IP6_OUTMCASTOCTETS],
-# ['Broadcast Packets', IP6_INBCASTPKTS, IP6_OUTBCASTPKTS],
-# ['Broadcast Bytes', IP6_INBCASTOCTETS, IP6_OUTBCASTOCTETS],
-# ['Delivers', IP6_INDELIVERS, None],
-# ['Forwarded', None, IP6_OUTFORWDATAGRAMS],
-# ['No Routes', IP6_INNOROUTES, IP6_OUTNOROUTES],
-# ['Header Errors', IP6_INHDRERRORS, None],
-# ['Too Big Errors', IP6_INTOOBIGERRORS, None],
-# ['Address Errors', IP6_INADDRERRORS, None],
-# ['Unknown Protocol', IP6_INUNKNOWNPROTOS, None],
-# ['Truncated Packets', IP6_INTRUNCATEDPKTS, None],
-# ['Reasm Timeouts', IP6_REASMTIMEOUT, None],
-# ['Reasm Requests', IP6_REASMREQDS, None],
-# ['Reasm Failures', IP6_REASMFAILS, None],
-# ['Reasm OK', IP6_REASMOKS, None],
-# ['Frag Created', None, IP6_FRAGCREATES],
-# ['Frag Failures', None, IP6_FRAGFAILS],
-# ['Frag OK', None, IP6_FRAGOKS],
-# ['', None, None],
-# ['ICMPv6:', None, None],
-# ['Messages', ICMP6_INMSGS, ICMP6_OUTMSGS],
-# ['Errors', ICMP6_INERRORS, ICMP6_OUTERRORS]]
-#
-# buf += '\n\t%s%s%s%s\n' % (33 * ' ', util.title('RX'),
-# 15 * ' ', util.title('TX'))
-#
-# for row in l:
-# row[0] = util.kw(row[0])
-# row[1] = self.get_stat(row[1]) if row[1] else ''
-# row[2] = self.get_stat(row[2]) if row[2] else ''
-# buf += '\t{0:27} {1:>16} {2:>16}\n'.format(*row)
+ # if stats:
+ # l = [['Packets', RX_PACKETS, TX_PACKETS],
+ # ['Bytes', RX_BYTES, TX_BYTES],
+ # ['Errors', RX_ERRORS, TX_ERRORS],
+ # ['Dropped', RX_DROPPED, TX_DROPPED],
+ # ['Compressed', RX_COMPRESSED, TX_COMPRESSED],
+ # ['FIFO Errors', RX_FIFO_ERR, TX_FIFO_ERR],
+ # ['Length Errors', RX_LEN_ERR, None],
+ # ['Over Errors', RX_OVER_ERR, None],
+ # ['CRC Errors', RX_CRC_ERR, None],
+ # ['Frame Errors', RX_FRAME_ERR, None],
+ # ['Missed Errors', RX_MISSED_ERR, None],
+ # ['Abort Errors', None, TX_ABORT_ERR],
+ # ['Carrier Errors', None, TX_CARRIER_ERR],
+ # ['Heartbeat Errors', None, TX_HBEAT_ERR],
+ # ['Window Errors', None, TX_WIN_ERR],
+ # ['Collisions', None, COLLISIONS],
+ # ['Multicast', None, MULTICAST],
+ # ['', None, None],
+ # ['Ipv6:', None, None],
+ # ['Packets', IP6_INPKTS, IP6_OUTPKTS],
+ # ['Bytes', IP6_INOCTETS, IP6_OUTOCTETS],
+ # ['Discards', IP6_INDISCARDS, IP6_OUTDISCARDS],
+ # ['Multicast Packets', IP6_INMCASTPKTS, IP6_OUTMCASTPKTS],
+ # ['Multicast Bytes', IP6_INMCASTOCTETS, IP6_OUTMCASTOCTETS],
+ # ['Broadcast Packets', IP6_INBCASTPKTS, IP6_OUTBCASTPKTS],
+ # ['Broadcast Bytes', IP6_INBCASTOCTETS, IP6_OUTBCASTOCTETS],
+ # ['Delivers', IP6_INDELIVERS, None],
+ # ['Forwarded', None, IP6_OUTFORWDATAGRAMS],
+ # ['No Routes', IP6_INNOROUTES, IP6_OUTNOROUTES],
+ # ['Header Errors', IP6_INHDRERRORS, None],
+ # ['Too Big Errors', IP6_INTOOBIGERRORS, None],
+ # ['Address Errors', IP6_INADDRERRORS, None],
+ # ['Unknown Protocol', IP6_INUNKNOWNPROTOS, None],
+ # ['Truncated Packets', IP6_INTRUNCATEDPKTS, None],
+ # ['Reasm Timeouts', IP6_REASMTIMEOUT, None],
+ # ['Reasm Requests', IP6_REASMREQDS, None],
+ # ['Reasm Failures', IP6_REASMFAILS, None],
+ # ['Reasm OK', IP6_REASMOKS, None],
+ # ['Frag Created', None, IP6_FRAGCREATES],
+ # ['Frag Failures', None, IP6_FRAGFAILS],
+ # ['Frag OK', None, IP6_FRAGOKS],
+ # ['', None, None],
+ # ['ICMPv6:', None, None],
+ # ['Messages', ICMP6_INMSGS, ICMP6_OUTMSGS],
+ # ['Errors', ICMP6_INERRORS, ICMP6_OUTERRORS]]
+ #
+ # buf += '\n\t%s%s%s%s\n' % (33 * ' ', util.title('RX'),
+ # 15 * ' ', util.title('TX'))
+ #
+ # for row in l:
+ # row[0] = util.kw(row[0])
+ # row[1] = self.get_stat(row[1]) if row[1] else ''
+ # row[2] = self.get_stat(row[2]) if row[2] else ''
+ # buf += '\t{0:27} {1:>16} {2:>16}\n'.format(*row)
return buf
+
class TcClassCache(netlink.Cache):
"""Cache of traffic classes"""
def __init__(self, ifindex, cache=None):
if not cache:
- cache = self._alloc_cache_name('route/class')
+ cache = self._alloc_cache_name("route/class")
self._protocol = netlink.NETLINK_ROUTE
self._nl_cache = cache
@@ -408,12 +414,13 @@ class TcClassCache(netlink.Cache):
def _new_cache(self, cache):
return TcClassCache(self.arg1, cache=cache)
+
class TcClass(Tc):
"""Traffic Class"""
def __init__(self, obj=None):
- netlink.Object.__init__(self, 'route/class', 'class', obj)
- self._module_path = 'netlink.route.qdisc.'
+ netlink.Object.__init__(self, "route/class", "class", obj)
+ self._module_path = "netlink.route.qdisc."
self._rtnl_class = self._obj2type(self._nl_object)
self._rtnl_tc = capi.obj2tc(self._nl_object)
@@ -447,24 +454,26 @@ class TcClass(Tc):
return ret
- def format(self, details=False, _stats=False, nodev=False,
- noparent=False, indent=''):
+ def format(
+ self, details=False, _stats=False, nodev=False, noparent=False, indent=""
+ ):
"""Return class as formatted text"""
fmt = util.MyFormatter(self, indent)
- buf = fmt.format(self.brief('class', nodev, noparent))
+ buf = fmt.format(self.brief("class", nodev, noparent))
if details:
- buf += fmt.nl('\t' + self.details())
+ buf += fmt.nl("\t" + self.details())
return buf
+
class ClassifierCache(netlink.Cache):
"""Cache of traffic classifiers objects"""
def __init__(self, ifindex, parent, cache=None):
if not cache:
- cache = self._alloc_cache_name('route/cls')
+ cache = self._alloc_cache_name("route/cls")
self._protocol = netlink.NETLINK_ROUTE
self._nl_cache = cache
@@ -478,12 +487,13 @@ class ClassifierCache(netlink.Cache):
def _new_cache(self, cache):
return ClassifierCache(self.arg1, self.arg2, cache=cache)
+
class Classifier(Tc):
"""Classifier"""
def __init__(self, obj=None):
- netlink.Object.__init__(self, 'route/cls', 'cls', obj)
- self._module_path = 'netlink.route.cls.'
+ netlink.Object.__init__(self, "route/cls", "cls", obj)
+ self._module_path = "netlink.route.cls."
self._rtnl_cls = self._obj2type(self._nl_object)
self._rtnl_tc = capi.obj2tc(self._nl_object)
@@ -522,21 +532,24 @@ class Classifier(Tc):
def childs(self):
return []
- def format(self, details=False, _stats=False, nodev=False,
- noparent=False, indent=''):
+ def format(
+ self, details=False, _stats=False, nodev=False, noparent=False, indent=""
+ ):
"""Return class as formatted text"""
fmt = util.MyFormatter(self, indent)
- buf = fmt.format(self.brief('classifier', nodev, noparent))
- buf += fmt.format(' {t|priority} {t|protocol}')
+ buf = fmt.format(self.brief("classifier", nodev, noparent))
+ buf += fmt.format(" {t|priority} {t|protocol}")
if details:
- buf += fmt.nl('\t' + self.details())
+ buf += fmt.nl("\t" + self.details())
return buf
+
_qdisc_cache = QdiscCache()
+
def get_qdisc(ifindex, handle=None, parent=None):
l = []
@@ -553,8 +566,10 @@ def get_qdisc(ifindex, handle=None, parent=None):
return l
+
_class_cache = {}
+
def get_class(ifindex, parent, handle=None):
l = []
@@ -575,8 +590,10 @@ def get_class(ifindex, parent, handle=None):
return l
+
_cls_cache = {}
+
def get_cls(ifindex, parent, handle=None):
chain = _cls_cache.get(ifindex, dict())
@@ -590,6 +607,6 @@ def get_cls(ifindex, parent, handle=None):
cache.refill()
if handle is None:
- return [ cls for cls in cache ]
+ return [cls for cls in cache]
- return [ cls for cls in cache if cls.handle == handle ]
+ return [cls for cls in cache if cls.handle == handle]
diff --git a/python/netlink/util.py b/python/netlink/util.py
index 22ed5cf..8f1513e 100644
--- a/python/netlink/util.py
+++ b/python/netlink/util.py
@@ -15,85 +15,104 @@ from . import capi as capi
from string import Formatter
import types
-__version__ = '1.0'
+__version__ = "1.0"
-#rename into colored_output
+# rename into colored_output
def _color(t, c):
- return '{esc}[{color}m{text}{esc}[0m'.format(esc=b'\x1b'.decode(), color=c, text=t)
+ return "{esc}[{color}m{text}{esc}[0m".format(esc=b"\x1b".decode(), color=c, text=t)
+
def black(t):
return _color(t, 30)
+
def red(t):
return _color(t, 31)
+
def green(t):
return _color(t, 32)
+
def yellow(t):
return _color(t, 33)
+
def blue(t):
return _color(t, 34)
+
def magenta(t):
return _color(t, 35)
+
def cyan(t):
return _color(t, 36)
+
def white(t):
return _color(t, 37)
+
def bold(t):
return _color(t, 1)
+
def kw(t):
return yellow(t)
+
def num(t):
return str(t)
+
def string(t):
return t
+
def addr(t):
return str(t)
+
def bad(t):
return red(t)
+
def good(t):
return green(t)
+
def title(t):
return t
+
def boolean(t):
return str(t)
+
def handle(t):
return str(t)
+
class MyFormatter(Formatter):
- def __init__(self, obj, indent=''):
+ def __init__(self, obj, indent=""):
self._obj = obj
self._indent = indent
def _nlattr(self, key):
value = getattr(self._obj.__class__, key)
if not isinstance(value, property):
- raise ValueError('Invalid formatting string {0}'.format(key))
+ raise ValueError("Invalid formatting string {0}".format(key))
- d = getattr(value.fget, 'formatinfo', dict())
+ d = getattr(value.fget, "formatinfo", dict())
# value = value.fget() is exactly the same
value = getattr(self._obj, key)
- if 'fmt' in d:
- value = d['fmt'](value)
+ if "fmt" in d:
+ value = d["fmt"](value)
- title_ = d.get('title', None)
+ title_ = d.get("title", None)
return title_, str(value)
@@ -104,13 +123,13 @@ class MyFormatter(Formatter):
# HACK, we allow defining strings via fields to allow
# conversions
- if key[:2] == 's|':
+ if key[:2] == "s|":
return key[2:]
- if key[:2] == 't|':
+ if key[:2] == "t|":
# title mode ("TITLE ATTR")
include_title = True
- elif key[:2] == 'a|':
+ elif key[:2] == "a|":
# plain attribute mode ("ATTR")
include_title = False
else:
@@ -122,31 +141,33 @@ class MyFormatter(Formatter):
if include_title:
if not title_:
- title_ = key # fall back to key as title
- value = '{0} {1}'.format(kw(title_), value)
+ title_ = key # fall back to key as title
+ value = "{0} {1}".format(kw(title_), value)
return value
def convert_field(self, value, conversion):
- if conversion == 'r':
+ if conversion == "r":
return repr(value)
- elif conversion == 's':
+ elif conversion == "s":
return str(value)
- elif conversion == 'k':
+ elif conversion == "k":
return kw(value)
- elif conversion == 'b':
+ elif conversion == "b":
return bold(value)
elif conversion is None:
return value
- raise ValueError('Unknown converion specifier {0!s}'.format(conversion))
+ raise ValueError("Unknown converion specifier {0!s}".format(conversion))
+
+ def nl(self, format_string=""):
+ return "\n" + self._indent + self.format(format_string)
- def nl(self, format_string=''):
- return '\n' + self._indent + self.format(format_string)
NL_BYTE_RATE = 0
NL_BIT_RATE = 1
+
class Rate(object):
def __init__(self, rate, mode=NL_BYTE_RATE):
self._rate = rate
@@ -161,6 +182,7 @@ class Rate(object):
def __cmp__(self, other):
return int(self) - int(other)
+
class Size(object):
def __init__(self, size):
self._size = size
diff --git a/python/setup.py.in b/python/setup.py.in
index 0cd35d0..83ffdb0 100644
--- a/python/setup.py.in
+++ b/python/setup.py.in
@@ -2,45 +2,54 @@
from distutils.core import setup, Extension
-opts = ['-O', '-nodefaultctor']
-include = ['@top_builddir@/include', '@top_srcdir@/include']
-library_dirs = ['@top_builddir@/lib/.libs']
+opts = ["-O", "-nodefaultctor"]
+include = ["@top_builddir@/include", "@top_srcdir@/include"]
+library_dirs = ["@top_builddir@/lib/.libs"]
-netlink_capi = Extension('netlink/_capi',
- sources = ['@srcdir@/netlink/capi.i'],
- include_dirs = include,
- swig_opts = opts,
- library_dirs = library_dirs,
- libraries = ['nl-3'],
- )
+netlink_capi = Extension(
+ "netlink/_capi",
+ sources=["@srcdir@/netlink/capi.i"],
+ include_dirs=include,
+ swig_opts=opts,
+ library_dirs=library_dirs,
+ libraries=["nl-3"],
+)
-route_capi = Extension('netlink/route/_capi',
- sources = ['@srcdir@/netlink/route/capi.i'],
- include_dirs = include,
- swig_opts = opts,
- library_dirs = library_dirs,
- libraries = ['nl-3', 'nl-route-3'],
- )
+route_capi = Extension(
+ "netlink/route/_capi",
+ sources=["@srcdir@/netlink/route/capi.i"],
+ include_dirs=include,
+ swig_opts=opts,
+ library_dirs=library_dirs,
+ libraries=["nl-3", "nl-route-3"],
+)
-genl_capi = Extension('netlink/genl/_capi',
- sources = ['@srcdir@/netlink/genl/capi.i'],
- include_dirs = include,
- swig_opts = opts,
- library_dirs = library_dirs,
- libraries = ['nl-3', 'nl-genl-3'],
- )
+genl_capi = Extension(
+ "netlink/genl/_capi",
+ sources=["@srcdir@/netlink/genl/capi.i"],
+ include_dirs=include,
+ swig_opts=opts,
+ library_dirs=library_dirs,
+ libraries=["nl-3", "nl-genl-3"],
+)
-setup(name = 'netlink',
- version = '1.0',
- description = 'Python wrapper for netlink protocols',
- author = 'Thomas Graf',
- author_email = 'tgraf@suug.ch',
- url = 'http://www.infradead.org/~tgr/libnl/',
- license = 'LGPL 2',
- platforms = 'linux2',
- long_description = 'Experimental python bindings for libnl',
- ext_modules = [netlink_capi, route_capi, genl_capi],
- package_dir = {'': '@srcdir@'},
- packages = ['netlink', 'netlink.genl', 'netlink.route',
- 'netlink.route.links', 'netlink.route.qdisc'],
- )
+setup(
+ name="netlink",
+ version="1.0",
+ description="Python wrapper for netlink protocols",
+ author="Thomas Graf",
+ author_email="tgraf@suug.ch",
+ url="http://www.infradead.org/~tgr/libnl/",
+ license="LGPL 2",
+ platforms="linux2",
+ long_description="Experimental python bindings for libnl",
+ ext_modules=[netlink_capi, route_capi, genl_capi],
+ package_dir={"": "@srcdir@"},
+ packages=[
+ "netlink",
+ "netlink.genl",
+ "netlink.route",
+ "netlink.route.links",
+ "netlink.route.qdisc",
+ ],
+)
diff --git a/python/tests/test-create-bridge.py b/python/tests/test-create-bridge.py
index 3b91556..bfb1459 100644
--- a/python/tests/test-create-bridge.py
+++ b/python/tests/test-create-bridge.py
@@ -8,22 +8,22 @@ sock = netlink.lookup_socket(netlink.NETLINK_ROUTE)
cache = link.LinkCache()
cache.refill(sock)
-testtap1 = cache['testtap1']
+testtap1 = cache["testtap1"]
print(testtap1)
lbr = link.Link()
-lbr.type = 'bridge'
-lbr.name = 'testbridge'
+lbr.type = "bridge"
+lbr.name = "testbridge"
print(lbr)
lbr.add()
cache.refill(sock)
-lbr = cache['testbridge']
+lbr = cache["testbridge"]
print(lbr)
lbr.enslave(testtap1)
cache.refill(sock)
-testtap1 = cache['testtap1']
+testtap1 = cache["testtap1"]
print(capi.rtnl_link_is_bridge(lbr._rtnl_link))
print(capi.rtnl_link_get_master(testtap1._rtnl_link))