diff options
author | Thomas Haller <thaller@redhat.com> | 2023-07-13 07:31:52 (GMT) |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2023-07-25 11:32:12 (GMT) |
commit | 3c753e3c94b01c63bf99b2709f4780e2df4608eb (patch) | |
tree | 4df3d17886d2499363795724d01d5655ce409f66 | |
parent | 298ee58e7a843d42bfb9edd27de40c93a366f9f7 (diff) | |
download | libnl-3c753e3c94b01c63bf99b2709f4780e2df4608eb.zip libnl-3c753e3c94b01c63bf99b2709f4780e2df4608eb.tar.gz libnl-3c753e3c94b01c63bf99b2709f4780e2df4608eb.tar.bz2 |
python: reformat all Python files with python-black
Automated code formatting is great. Use python-black for that ([1]).
Black us not configurable much (uncompromising) and follows PEP8.
It thus generates quite a standard, pleasing format.
But the point isn't whether the formatting is always the most
subjectively pleasing. The point is that the style is generated and
enforceable by an automated tool. It takes away places for nit picking,
while resulting in a more consistent code base.
As this reformats the entire code base, it introduces a large diff and
interferes with tools like git-blame. That will be somewhat alleviated
by adding a "blame.ignoreRevsFile" for git in the next commit.
The change is done automatically, by running python-black version
black-22.8.0-2.fc38.noarch:
$ black .
The result is the same as
$ ( git grep -l '#!.*\(PYTHON\|python\)' ; git ls-files '*.py' '*.py.in' ) \
| sort -u \
| xargs -d '\n' black
Note that the exact result depends on the version of black. Currently
that version is black==22.12.0 from pip. Yes, this means when we bump
the version in the future, some reformatting will happen.
[1] https://github.com/psf/black
-rwxr-xr-x | doc/doxygen-link.py | 56 | ||||
-rwxr-xr-x | doc/resolve-asciidoc-refs.py | 28 | ||||
-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 |
18 files changed, 1540 insertions, 1391 deletions
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/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)) |