Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/tests/atf_python/sys/netpfil/ipfw/utils.py
39536 views
1
#!/usr/bin/env python3
2
3
import os
4
import socket
5
import struct
6
import subprocess
7
import sys
8
from enum import Enum
9
from typing import Dict
10
from typing import List
11
from typing import Optional
12
from typing import Union
13
from typing import Any
14
from typing import NamedTuple
15
import pytest
16
17
18
def roundup2(val: int, num: int) -> int:
19
if val % num:
20
return (val | (num - 1)) + 1
21
else:
22
return val
23
24
25
def align8(val: int) -> int:
26
return roundup2(val, 8)
27
28
29
def enum_or_int(val) -> int:
30
if isinstance(val, Enum):
31
return val.value
32
return val
33
34
35
def enum_from_int(enum_class: Enum, val) -> Enum:
36
if isinstance(val, Enum):
37
return val
38
for item in enum_class:
39
if val == item.value:
40
return item
41
return None
42
43
44
class AttrDescr(NamedTuple):
45
val: Enum
46
cls: Any
47
child_map: Any = None
48
is_array: bool = False
49
50
51
def prepare_attrs_map(attrs: List[AttrDescr]) -> Dict[str, Dict]:
52
ret = {}
53
for ad in attrs:
54
ret[ad.val.value] = {"ad": ad}
55
if ad.child_map:
56
ret[ad.val.value]["child"] = prepare_attrs_map(ad.child_map)
57
ret[ad.val.value]["is_array"] = ad.is_array
58
return ret
59
60
61
62
63