| # 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) |