Path: blob/main/tests/atf_python/sys/netpfil/ipfw/utils.py
39536 views
#!/usr/bin/env python312import os3import socket4import struct5import subprocess6import sys7from enum import Enum8from typing import Dict9from typing import List10from typing import Optional11from typing import Union12from typing import Any13from typing import NamedTuple14import pytest151617def roundup2(val: int, num: int) -> int:18if val % num:19return (val | (num - 1)) + 120else:21return val222324def align8(val: int) -> int:25return roundup2(val, 8)262728def enum_or_int(val) -> int:29if isinstance(val, Enum):30return val.value31return val323334def enum_from_int(enum_class: Enum, val) -> Enum:35if isinstance(val, Enum):36return val37for item in enum_class:38if val == item.value:39return item40return None414243class AttrDescr(NamedTuple):44val: Enum45cls: Any46child_map: Any = None47is_array: bool = False484950def prepare_attrs_map(attrs: List[AttrDescr]) -> Dict[str, Dict]:51ret = {}52for ad in attrs:53ret[ad.val.value] = {"ad": ad}54if ad.child_map:55ret[ad.val.value]["child"] = prepare_attrs_map(ad.child_map)56ret[ad.val.value]["is_array"] = ad.is_array57return ret585960616263