mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 19:31:42 -04:00
Add validation for the nlctrl family, accessing family info and dumping policies. TAP version 13 1..4 ok 1 nl_nlctrl.getfamily_do ok 2 nl_nlctrl.getfamily_dump ok 3 nl_nlctrl.getpolicy_dump ok 4 nl_nlctrl.getpolicy_by_op # Totals: pass:4 fail:0 xfail:0 xpass:0 skip:0 error:0 Link: https://patch.msgid.link/20260311032839.417748-5-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
from .consts import KSRC, KSFT_DIR
|
|
from .ksft import ksft_pr, ktap_result
|
|
|
|
# Resolve paths
|
|
try:
|
|
if (KSFT_DIR / "kselftest-list.txt").exists():
|
|
# Running in "installed" selftests
|
|
tools_full_path = KSFT_DIR
|
|
SPEC_PATH = KSFT_DIR / "net/lib/specs"
|
|
|
|
sys.path.append(tools_full_path.as_posix())
|
|
from net.lib.ynl.pyynl.lib import YnlFamily, NlError, NlPolicy, Netlink
|
|
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.pyynl.lib import YnlFamily, NlError, NlPolicy, Netlink
|
|
except ModuleNotFoundError as e:
|
|
ksft_pr("Failed importing `ynl` library from kernel sources")
|
|
ksft_pr(str(e))
|
|
ktap_result(True, comment="SKIP")
|
|
sys.exit(4)
|
|
|
|
__all__ = [
|
|
"NlError", "NlPolicy", "Netlink", "YnlFamily", "SPEC_PATH",
|
|
"EthtoolFamily", "RtnlFamily", "RtnlAddrFamily",
|
|
"NetdevFamily", "NetshaperFamily", "NlctrlFamily", "DevlinkFamily",
|
|
"PSPFamily",
|
|
]
|
|
|
|
#
|
|
# Wrapper classes, loading the right specs
|
|
# Set schema='' to avoid jsonschema validation, it's slow
|
|
#
|
|
class EthtoolFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('ethtool.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|
|
|
|
|
|
class RtnlFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('rt-link.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|
|
|
|
class RtnlAddrFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('rt-addr.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|
|
|
|
class NetdevFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('netdev.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|
|
|
|
class NetshaperFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('net_shaper.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|
|
|
|
|
|
class NlctrlFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('nlctrl.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|
|
|
|
|
|
class DevlinkFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('devlink.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|
|
|
|
class PSPFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('psp.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|