tools: ynl: move python code to separate sub-directory
Move python code to a separate directory so it can be packaged as a python module. Updates existing references in selftests and docs. Also rename ynl-gen-[c|rst] to ynl_gen_[c|rst], avoid dashes as these prevent easy imports for entrypoints. Signed-off-by: Jan Stancek <jstancek@redhat.com> Reviewed-by: Donald Hunter <donald.hunter@gmail.com> Link: https://patch.msgid.link/a4151bad0e6984e7164d395125ce87fd2e048bf1.1736343575.git.jstancek@redhat.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
93e505a300
commit
ab88c2b373
21 changed files with 20 additions and 17 deletions
|
@ -104,7 +104,7 @@ quiet_cmd_sphinx = SPHINX $@ --> file://$(abspath $(BUILDDIR)/$3/$4)
|
|||
YNL_INDEX:=$(srctree)/Documentation/networking/netlink_spec/index.rst
|
||||
YNL_RST_DIR:=$(srctree)/Documentation/networking/netlink_spec
|
||||
YNL_YAML_DIR:=$(srctree)/Documentation/netlink/specs
|
||||
YNL_TOOL:=$(srctree)/tools/net/ynl/ynl-gen-rst.py
|
||||
YNL_TOOL:=$(srctree)/tools/net/ynl/pyynl/ynl_gen_rst.py
|
||||
|
||||
YNL_RST_FILES_TMP := $(patsubst %.yaml,%.rst,$(wildcard $(YNL_YAML_DIR)/*.yaml))
|
||||
YNL_RST_FILES := $(patsubst $(YNL_YAML_DIR)%,$(YNL_RST_DIR)%, $(YNL_RST_FILES_TMP))
|
||||
|
|
|
@ -89,7 +89,7 @@ Observability
|
|||
=============
|
||||
The relation between PF, irq, napi, and queue can be observed via netlink spec::
|
||||
|
||||
$ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml --dump queue-get --json='{"ifindex": 13}'
|
||||
$ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml --dump queue-get --json='{"ifindex": 13}'
|
||||
[{'id': 0, 'ifindex': 13, 'napi-id': 539, 'type': 'rx'},
|
||||
{'id': 1, 'ifindex': 13, 'napi-id': 540, 'type': 'rx'},
|
||||
{'id': 2, 'ifindex': 13, 'napi-id': 541, 'type': 'rx'},
|
||||
|
@ -101,7 +101,7 @@ The relation between PF, irq, napi, and queue can be observed via netlink spec::
|
|||
{'id': 3, 'ifindex': 13, 'napi-id': 542, 'type': 'tx'},
|
||||
{'id': 4, 'ifindex': 13, 'napi-id': 543, 'type': 'tx'}]
|
||||
|
||||
$ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml --dump napi-get --json='{"ifindex": 13}'
|
||||
$ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml --dump napi-get --json='{"ifindex": 13}'
|
||||
[{'id': 543, 'ifindex': 13, 'irq': 42},
|
||||
{'id': 542, 'ifindex': 13, 'irq': 41},
|
||||
{'id': 541, 'ifindex': 13, 'irq': 40},
|
||||
|
|
|
@ -199,13 +199,13 @@ parameters mentioned above use hyphens instead of underscores:
|
|||
|
||||
Per-NAPI configuration can be done programmatically in a user application
|
||||
or by using a script included in the kernel source tree:
|
||||
``tools/net/ynl/cli.py``.
|
||||
``tools/net/ynl/pyynl/cli.py``.
|
||||
|
||||
For example, using the script:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ kernel-source/tools/net/ynl/cli.py \
|
||||
$ kernel-source/tools/net/ynl/pyynl/cli.py \
|
||||
--spec Documentation/netlink/specs/netdev.yaml \
|
||||
--do napi-set \
|
||||
--json='{"id": 345,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
This file is populated during the build of the documentation (htmldocs) by the
|
||||
tools/net/ynl/ynl-gen-rst.py script.
|
||||
tools/net/ynl/pyynl/ynl_gen_rst.py script.
|
||||
|
|
|
@ -15,7 +15,7 @@ developing Netlink related code. The tool is implemented in Python
|
|||
and can use a YAML specification to issue Netlink requests
|
||||
to the kernel. Only Generic Netlink is supported.
|
||||
|
||||
The tool is located at ``tools/net/ynl/cli.py``. It accepts
|
||||
The tool is located at ``tools/net/ynl/pyynl/cli.py``. It accepts
|
||||
a handul of arguments, the most important ones are:
|
||||
|
||||
- ``--spec`` - point to the spec file
|
||||
|
@ -27,7 +27,7 @@ YAML specs can be found under ``Documentation/netlink/specs/``.
|
|||
|
||||
Example use::
|
||||
|
||||
$ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/ethtool.yaml \
|
||||
$ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/ethtool.yaml \
|
||||
--do rings-get \
|
||||
--json '{"header":{"dev-index": 18}}'
|
||||
{'header': {'dev-index': 18, 'dev-name': 'eni1np1'},
|
||||
|
@ -75,7 +75,7 @@ the two marker lines like above to a file, add that file to git,
|
|||
and run the regeneration tool. Grep the tree for ``YNL-GEN``
|
||||
to see other examples.
|
||||
|
||||
The code generation itself is performed by ``tools/net/ynl/ynl-gen-c.py``
|
||||
The code generation itself is performed by ``tools/net/ynl/pyynl/ynl_gen_c.py``
|
||||
but it takes a few arguments so calling it directly for each file
|
||||
quickly becomes tedious.
|
||||
|
||||
|
@ -84,7 +84,7 @@ YNL lib
|
|||
|
||||
``tools/net/ynl/lib/`` contains an implementation of a C library
|
||||
(based on libmnl) which integrates with code generated by
|
||||
``tools/net/ynl/ynl-gen-c.py`` to create easy to use netlink wrappers.
|
||||
``tools/net/ynl/pyynl/ynl_gen_c.py`` to create easy to use netlink wrappers.
|
||||
|
||||
YNL basics
|
||||
----------
|
||||
|
|
|
@ -21,5 +21,7 @@ clean distclean:
|
|||
fi \
|
||||
done
|
||||
rm -f libynl.a
|
||||
rm -rf pyynl/__pycache__
|
||||
rm -rf pyynl/lib/__pycache__
|
||||
|
||||
.PHONY: all clean distclean $(SUBDIRS)
|
||||
|
|
|
@ -12,7 +12,7 @@ include ../Makefile.deps
|
|||
YNL_GEN_ARG_ethtool:=--user-header linux/ethtool_netlink.h \
|
||||
--exclude-op stats-get
|
||||
|
||||
TOOL:=../ynl-gen-c.py
|
||||
TOOL:=../pyynl/ynl_gen_c.py
|
||||
|
||||
GENS_PATHS=$(shell grep -nrI --files-without-match \
|
||||
'protocol: netlink' \
|
||||
|
|
1
tools/net/ynl/lib/.gitignore
vendored
1
tools/net/ynl/lib/.gitignore
vendored
|
@ -1,2 +1 @@
|
|||
__pycache__/
|
||||
*.d
|
||||
|
|
|
@ -19,7 +19,6 @@ ynl.a: $(OBJS)
|
|||
|
||||
clean:
|
||||
rm -f *.o *.d *~
|
||||
rm -rf __pycache__
|
||||
|
||||
distclean: clean
|
||||
rm -f *.a
|
||||
|
|
2
tools/net/ynl/pyynl/.gitignore
vendored
Normal file
2
tools/net/ynl/pyynl/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
__pycache__/
|
||||
lib/__pycache__/
|
0
tools/net/ynl/pyynl/__init__.py
Normal file
0
tools/net/ynl/pyynl/__init__.py
Normal file
|
@ -1,7 +1,7 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
||||
|
||||
TOOL=$(dirname $(realpath $0))/ynl-gen-c.py
|
||||
TOOL=$(dirname $(realpath $0))/pyynl/ynl_gen_c.py
|
||||
|
||||
force=
|
||||
search=
|
||||
|
|
|
@ -13,14 +13,14 @@ try:
|
|||
SPEC_PATH = KSFT_DIR / "net/lib/specs"
|
||||
|
||||
sys.path.append(tools_full_path.as_posix())
|
||||
from net.lib.ynl.lib import YnlFamily, NlError
|
||||
from net.lib.ynl.pyynl.lib import YnlFamily, NlError
|
||||
else:
|
||||
# Running in tree
|
||||
tools_full_path = KSRC / "tools"
|
||||
SPEC_PATH = KSRC / "Documentation/netlink/specs"
|
||||
|
||||
sys.path.append(tools_full_path.as_posix())
|
||||
from net.ynl.lib import YnlFamily, NlError
|
||||
from net.ynl.pyynl.lib import YnlFamily, NlError
|
||||
except ModuleNotFoundError as e:
|
||||
ksft_pr("Failed importing `ynl` library from kernel sources")
|
||||
ksft_pr(str(e))
|
||||
|
|
|
@ -31,7 +31,8 @@ $(OUTPUT)/libynl.a: $(YNL_SPECS) $(OUTPUT)/.libynl-$(YNL_GENS_HASH).sig
|
|||
$(Q)cp $(top_srcdir)/tools/net/ynl/libynl.a $(OUTPUT)/libynl.a
|
||||
|
||||
EXTRA_CLEAN += \
|
||||
$(top_srcdir)/tools/net/ynl/lib/__pycache__ \
|
||||
$(top_srcdir)/tools/net/ynl/pyynl/__pycache__ \
|
||||
$(top_srcdir)/tools/net/ynl/pyynl/lib/__pycache__ \
|
||||
$(top_srcdir)/tools/net/ynl/lib/*.[ado] \
|
||||
$(OUTPUT)/.libynl-*.sig \
|
||||
$(OUTPUT)/libynl.a
|
||||
|
|
Loading…
Add table
Reference in a new issue