diff options
author | Thomas Haller <thaller@redhat.com> | 2023-07-25 11:40:22 (GMT) |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2023-07-25 11:40:22 (GMT) |
commit | 5a21bde6ae90cab25c6d14199bb506fc30074015 (patch) | |
tree | 57d58159655eee90bf6342dde59c78aca77deb4a | |
parent | 143cee1d381753c3ff01d51b39d77117d5c59bd2 (diff) | |
parent | 02e0fd3fab42d7f37a78ecadc688e800e0014a7d (diff) | |
download | libnl-5a21bde6ae90cab25c6d14199bb506fc30074015.zip libnl-5a21bde6ae90cab25c6d14199bb506fc30074015.tar.gz libnl-5a21bde6ae90cab25c6d14199bb506fc30074015.tar.bz2 |
python: merge branch 'th/black'
-rw-r--r-- | .git-blame-ignore-revs | 6 | ||||
-rw-r--r-- | .github/workflows/ci.yml | 12 | ||||
-rwxr-xr-x | doc/doxygen-link.py | 56 | ||||
-rwxr-xr-x | doc/resolve-asciidoc-refs.py | 28 | ||||
-rw-r--r-- | pyproject.toml | 8 | ||||
-rw-r--r-- | python/doc/conf.py | 120 | ||||
-rw-r--r-- | python/examples/iface.py | 166 | ||||
-rw-r--r-- | python/examples/nl80211.py | 1408 | ||||
-rw-r--r-- | python/examples/wiphy.py | 241 | ||||
-rw-r--r-- | python/netlink/core.py | 84 | ||||
-rw-r--r-- | python/netlink/route/address.py | 59 | ||||
-rw-r--r-- | python/netlink/route/link.py | 188 | ||||
-rw-r--r-- | python/netlink/route/links/bridge.py | 38 | ||||
-rw-r--r-- | python/netlink/route/links/dummy.py | 7 | ||||
-rw-r--r-- | python/netlink/route/links/inet.py | 61 | ||||
-rw-r--r-- | python/netlink/route/links/vlan.py | 15 | ||||
-rw-r--r-- | python/netlink/route/qdisc/htb.py | 28 | ||||
-rw-r--r-- | python/netlink/route/tc.py | 273 | ||||
-rw-r--r-- | python/netlink/util.py | 64 | ||||
-rw-r--r-- | python/setup.py.in | 85 | ||||
-rw-r--r-- | python/tests/test-create-bridge.py | 10 |
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)) |