xref: /linux/tools/testing/selftests/drivers/net/lib/py/env.py (revision 48ba00da2eb4b54a7e6ed2ca3a9f2e575dff48c9)
1# SPDX-License-Identifier: GPL-2.0
2
3import os
4import shlex
5from pathlib import Path
6from lib.py import ip
7from lib.py import NetdevSimDev
8
9class NetDrvEnv:
10    def __init__(self, src_path):
11        self._ns = None
12
13        self.env = os.environ.copy()
14        self._load_env_file(src_path)
15
16        if 'NETIF' in self.env:
17            self.dev = ip("link show dev " + self.env['NETIF'], json=True)[0]
18        else:
19            self._ns = NetdevSimDev()
20            self.dev = self._ns.nsims[0].dev
21        self.ifindex = self.dev['ifindex']
22
23    def __enter__(self):
24        return self
25
26    def __exit__(self, ex_type, ex_value, ex_tb):
27        """
28        __exit__ gets called at the end of a "with" block.
29        """
30        self.__del__()
31
32    def __del__(self):
33        if self._ns:
34            self._ns.remove()
35            self._ns = None
36
37    def _load_env_file(self, src_path):
38        src_dir = Path(src_path).parent.resolve()
39        if not (src_dir / "net.config").exists():
40            return
41
42        lexer = shlex.shlex(open((src_dir / "net.config").as_posix(), 'r').read())
43        k = None
44        for token in lexer:
45            if k is None:
46                k = token
47                self.env[k] = ""
48            elif token == "=":
49                pass
50            else:
51                self.env[k] = token
52                k = None
53