summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/net/lib/py/ynl.py
blob: 2e567062aa6cce36f7a192dcd05bcc650f430d8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# 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)