134 lines
3.9 KiB
Python
134 lines
3.9 KiB
Python
from util import (
|
|
MyArgParseHelpFormatter,
|
|
open_device,
|
|
get_hwnetid,
|
|
dict_align_str,
|
|
)
|
|
|
|
from util_eth import (
|
|
load_macsec_from_yaml,
|
|
)
|
|
|
|
from util_sfp import (
|
|
read_macsec_rx_secy_stats,
|
|
read_macsec_tx_secy_stats,
|
|
read_macsec_rx_sc_stats,
|
|
read_macsec_tx_sc_stats,
|
|
sfp_query_verify_macsec_support,
|
|
)
|
|
|
|
import ics
|
|
import argparse
|
|
|
|
###############################################################################
|
|
# This loads a single macsec configuration from selected yaml into supported
|
|
# devices and exits
|
|
###############################################################################
|
|
|
|
|
|
DESCRIPTION = "MACSec utility"
|
|
|
|
|
|
def main():
|
|
parser = get_parser()
|
|
args = parser.parse_args()
|
|
run_test(args, None)
|
|
|
|
|
|
def run_test(args, power_supply):
|
|
print(f"Attempting to load {args.yaml}...")
|
|
|
|
fail = 0
|
|
|
|
# connect to test device1 and set network settings for the macsec test
|
|
with open_device(args.serial_number) as device:
|
|
# Just load default every time in case we get some crazy stuff
|
|
ics.load_default_settings(device)
|
|
|
|
# if sfp module, query for mdio i2c address
|
|
if args.sfp:
|
|
sfp_i2c_mdio_address = sfp_query_verify_macsec_support(
|
|
device, args.config_netid, args.reset
|
|
)
|
|
# if we only want reset, exit here
|
|
if args.reset:
|
|
exit(0)
|
|
|
|
# if we only want the phy macsec counters, read then exit
|
|
if args.counters:
|
|
# Read secy, sc stats
|
|
print("\nReading PHY MACsec rx/tx stats...\n")
|
|
rx_secy_stats = read_macsec_rx_secy_stats(
|
|
device, get_hwnetid(args.config_netid), sfp_i2c_mdio_address
|
|
)
|
|
tx_secy_stats = read_macsec_tx_secy_stats(
|
|
device, get_hwnetid(args.config_netid), sfp_i2c_mdio_address
|
|
)
|
|
rx_sc_stats = read_macsec_rx_sc_stats(
|
|
device, get_hwnetid(args.config_netid), sfp_i2c_mdio_address
|
|
)
|
|
tx_sc_stats = read_macsec_tx_sc_stats(
|
|
device, get_hwnetid(args.config_netid), sfp_i2c_mdio_address
|
|
)
|
|
# print non-zero macsec counts
|
|
print("rx_secy_stats:\n")
|
|
print(dict_align_str(rx_secy_stats, False, True))
|
|
print("tx_secy_stats:\n")
|
|
print(dict_align_str(tx_secy_stats, False, True))
|
|
print("rx_sc_stats:\n")
|
|
print(dict_align_str(rx_sc_stats, False, True))
|
|
print("tx_sc_stats:\n")
|
|
print(dict_align_str(tx_sc_stats, False, True))
|
|
exit(0)
|
|
|
|
# load yaml macsec config
|
|
load_macsec_from_yaml(device, args.config_netid, args.yaml, args.sfp)
|
|
|
|
if fail: # bail out if something fails
|
|
print(f"{fail} tests failed.")
|
|
exit(1)
|
|
|
|
|
|
def get_parser():
|
|
parser = argparse.ArgumentParser(
|
|
description="MACsec utility script",
|
|
formatter_class=MyArgParseHelpFormatter,
|
|
)
|
|
parser.add_argument(
|
|
"serial_number",
|
|
help="The serial number of the device to connect to",
|
|
)
|
|
parser.add_argument(
|
|
"--yaml",
|
|
help="yaml file name to be loaded/configured.",
|
|
default="test_sfp_macsec_Rule_wildcard_SecY_128_strip_strict_sci_SA_sak0.yml",
|
|
)
|
|
parser.add_argument(
|
|
"--sfp",
|
|
help="sfp module.",
|
|
default=False,
|
|
action="store_true",
|
|
)
|
|
parser.add_argument(
|
|
"--config_netid",
|
|
help="netid to config the sfp module.",
|
|
default="NETID_I2C2",
|
|
)
|
|
parser.add_argument(
|
|
"--reset",
|
|
help="Only reset and clear and disable macsec on the device, then exit.",
|
|
default=False,
|
|
action="store_true",
|
|
)
|
|
parser.add_argument(
|
|
"--counters",
|
|
help="Only read the phy macsec counters, then exit.",
|
|
default=False,
|
|
action="store_true",
|
|
)
|
|
return parser
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|