Skip to content

Commit

Permalink
spytest tgen improvements (sonic-net#9364)
Browse files Browse the repository at this point in the history
Co-authored-by: Rama Sasthri, Kristipati <rama.kristipati@broadcom.com>
  • Loading branch information
ramakristipati and ramakristipatibrcm committed Aug 11, 2023
1 parent 2070b18 commit 520d32a
Show file tree
Hide file tree
Showing 34 changed files with 7,219 additions and 2,748 deletions.
44 changes: 23 additions & 21 deletions spytest/spytest/tgen/init.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
tcl_custom_pkgdir = os.path.abspath(os.path.dirname(__file__))
py_version = platform.python_version()


def tg_stc_load(version, logger, logs_path=None):

stc_version_map = {"4.67": "4.67", "4.91": "4.91"}
Expand Down Expand Up @@ -71,8 +72,9 @@ def tg_stc_load(version, logger, logs_path=None):
os.environ['STC_PRIVATE_INSTALL_DIR'] = stc_app_root
os.environ["STC_TCL"] = tclsh
os.environ['TCLLIBPATH'] = "{} {} {} /usr/lib".format(stc_hl_src, tcl_custom_pkgdir, tcl_lib_path)
os.environ['HLPYAPI_LOG'] = logs_path or os.getenv("SPYTEST_USER_ROOT")
os.environ['HOME'] = logs_path or os.getenv("SPYTEST_USER_ROOT")
user_root = os.getenv("SPYTEST_USER_ROOT", os.path.abspath("."))
os.environ['HLPYAPI_LOG'] = logs_path or user_root
os.environ['HOME'] = logs_path or user_root

sys.path.insert(0, tcl_path)
sys.path.insert(0, stc_hl_api_path)
Expand All @@ -86,12 +88,13 @@ def tg_ixia_load(version, logger, logs_path=None):
"8.4": "8.40", "8.42": "8.42",
"9.0": "9.00", "9.00": "9.00",
"9.1": "9.10", "9.10": "9.10",
"9.20": "9.20", "9.24": "9.24"}
"9.2": "9.20", "9.20": "9.20",
"9.24": "9.24", "9.31": "9.31"}
version_string = str(version)
version_string = ixia_version_map.get(version_string, version_string)
if (version_string not in ixia_version_map and
not os.path.exists(os.path.join(tgen_path, "ixia")) and
not os.path.exists(os.path.join(tgen_path, version_string)) ):
if (version_string not in ixia_version_map
and not os.path.exists(os.path.join(tgen_path, "ixia"))
and not os.path.exists(os.path.join(tgen_path, version_string))):

logger.error("IXIA: unsupported version {}".format(version_string))
return None
Expand All @@ -103,47 +106,46 @@ def tg_ixia_load(version, logger, logs_path=None):
'9.10': 'HLTSET237',
'9.20': 'HLTSET249',
'9.24': 'HLTSET251',
'9.31': 'HLTSET261',
}

ix_path = '' if os.path.exists(os.path.join(tgen_path, version_string)) else "ixia"
ixnetwork = os.path.join(tgen_path, ix_path, version_string, "lib")
hl_api = os.path.join(ixnetwork, "hltapi" if os.path.exists(os.path.join(ixnetwork,"hltapi")) else "hlapi", "library")
hl_api = os.path.join(ixnetwork, "hltapi" if os.path.exists(os.path.join(ixnetwork, "hltapi")) else "hlapi", "library")
tcl_path = os.getenv("SCID_TCL85_BIN", def_tcl_path)
tcl_lib_path = os.path.join(tcl_path, "..", "lib")
if os.path.exists(ixnetwork) and os.path.exists(hl_api):
ngpf_api = os.path.join(hl_api, "common", "ixiangpf", "python")
ixn_py_api = os.path.join(ixnetwork, "PythonApi")
if version_string in ixia_hltapi_map:
os.environ["IXIA_VERSION"] = ixia_hltapi_map[version_string]
os.environ["IXIA_HOME"] = ixnetwork
os.environ["TCLLIBPATH"] = str(ixnetwork)
os.environ["TCLLIBPATH"] = " ".join([str(ixnetwork), hl_api, os.path.join(ixnetwork, "TclApi", "IxTclNetwork"), tcl_lib_path])

sys.path.append(ngpf_api)
sys.path.append(ixn_py_api)

return version_string

# 9.0 onwards for BRCM
tcl_path = os.getenv("SCID_TCL85_BIN", def_tcl_path)
tcl_lib_path = os.path.join(tcl_path, "..", "lib")
ixia_root = os.path.join(tgen_path, "ixia", "all", "ixia-" + py_version)

ixnetwork_version = os.getenv("IXNETWORK_VERSION", version_string)
hltapi_version = os.getenv("HLAPI_VERSION", version_string)

if not os.path.exists(ixia_root):
ixia_root = os.path.join(tgen_path, "ixia")
hlt_api = os.path.join(ixia_root, "hlapi", hltapi_version)
ixia_root = os.path.join(tgen_path, "ixia", "all", "ixia")
hlt_api = os.path.join(ixia_root, "hlapi", version_string)
ngpf_api = os.path.join(hlt_api, "library", "common", "ixiangpf", "python")
ixn_py_api = os.path.join(ixia_root, "ixnetwork", ixnetwork_version,"lib", "PythonApi")
ixn_tcl_api_1 = os.path.join(ixia_root, "ixnetwork", ixnetwork_version,"lib", "IxTclNetwork")
ixn_tcl_api_2 = os.path.join(ixia_root, "ixnetwork", ixnetwork_version,"lib", "TclApi", "IxTclNetwork")

ixn_py_api = os.path.join(ixia_root, "ixnetwork", version_string,
"lib", "PythonApi")
ixn_tcl_api_1 = os.path.join(ixia_root, "ixnetwork", version_string,
"lib", "IxTclNetwork")
ixn_tcl_api_2 = os.path.join(ixia_root, "ixnetwork", version_string,
"lib", "TclApi", "IxTclNetwork")
os.environ["IXIA_VERSION"] = ixia_hltapi_map[version_string]
os.environ["TCLLIBPATH"] = " ".join([hlt_api, ixn_tcl_api_1, ixn_tcl_api_2, tcl_lib_path])
sys.path.append(ngpf_api)
sys.path.append(ixn_py_api)

return version_string


def tg_scapy_load(version, logger, logs_path=None):
return version

11 changes: 9 additions & 2 deletions spytest/spytest/tgen/scapy/afpacket.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,14 @@
PACKET_AUXDATA = 8
TP_STATUS_VLAN_VALID = 1 << 4


class struct_iovec(Structure):
_fields_ = [
("iov_base", c_void_p),
("iov_len", c_size_t),
]


class struct_msghdr(Structure):
_fields_ = [
("msg_name", c_void_p),
Expand All @@ -47,13 +49,15 @@ class struct_msghdr(Structure):
("msg_flags", c_int),
]


class struct_cmsghdr(Structure):
_fields_ = [
("cmsg_len", c_size_t),
("cmsg_level", c_int),
("cmsg_type", c_int),
]


class struct_tpacket_auxdata(Structure):
_fields_ = [
("tp_status", c_uint),
Expand All @@ -65,11 +69,13 @@ class struct_tpacket_auxdata(Structure):
("tp_padding", c_ushort),
]


libc = CDLL("libc.so.6")
recvmsg = libc.recvmsg
recvmsg.argtypes = [c_int, POINTER(struct_msghdr), c_int]
recvmsg.retype = c_int


def enable_auxdata(sk):
"""
Ask the kernel to return the VLAN tag in a control message
Expand All @@ -78,6 +84,7 @@ def enable_auxdata(sk):
"""
sk.setsockopt(SOL_PACKET, PACKET_AUXDATA, 1)


def recv(sk, bufsize):
"""
Receive a packet from an AF_PACKET socket
Expand Down Expand Up @@ -112,11 +119,11 @@ def recv(sk, bufsize):
# only control message.
assert msghdr.msg_controllen >= sizeof(struct_cmsghdr)

cmsghdr = struct_cmsghdr.from_buffer(ctrl_buf) # pylint: disable=E1101
cmsghdr = struct_cmsghdr.from_buffer(ctrl_buf) # pylint: disable=E1101
assert cmsghdr.cmsg_level == SOL_PACKET
assert cmsghdr.cmsg_type == PACKET_AUXDATA

auxdata = struct_tpacket_auxdata.from_buffer(ctrl_buf, sizeof(struct_cmsghdr)) # pylint: disable=E1101
auxdata = struct_tpacket_auxdata.from_buffer(ctrl_buf, sizeof(struct_cmsghdr)) # pylint: disable=E1101

if auxdata.tp_vlan_tci != 0 or auxdata.tp_status & TP_STATUS_VLAN_VALID:
# Insert VLAN tag
Expand Down
162 changes: 0 additions & 162 deletions spytest/spytest/tgen/scapy/bgp.py

This file was deleted.

Loading

0 comments on commit 520d32a

Please sign in to comment.