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